2013-10-24 33 views
-4

如何从java中的给定数组中删除所有出现的整数,例如17。 我试着将条目设置为(整数),尽管它不起作用。从int数组中删除所有出现的整数

输入数组:[0,6,0,17,1,9,17,8,4]

输出数组:[0,6,0,1,9,8,4]

for(int i =0;i<ansa.length;i++){ 
if(ansa[i]==17) 
     { 
      ansa[i]=(Integer)null; 
     } 
} 

这导致

Exception in thread "main" java.lang.NullPointerException 
+3

我敢肯定,很多答案都在路上。 – devnull

+0

请分享代码,你已经尝试到目前为止。 –

+1

@devnull你的评论真的阻止了'在路上很多答案'。 – Trying

回答

0

这似乎是工作 - 虽然我怀疑人们会后更好/更高效的解决方案。

public void test() { 
    int[] before = new int[] {0,6,0,17,1,9,17,8,4}; 
    int[] after = remove(before, 17); 
    System.out.println("Before: "+Arrays.toString(before)); 
    System.out.println("Aftre: "+Arrays.toString(after)); 
} 

private int[] remove(int[] before, int remove) { 
    // Work out how long it must be. 
    int keep = 0; 
    for (int i = 0; i < before.length; i++) { 
    if(before[i] != remove) { 
     keep += 1; 
    } 
    } 
    // Make the new one 
    int[] after = new int[keep]; 
    // Fill it in. 
    for (int i = 0, j = 0; i < before.length; i++) { 
    if(before[i] != remove) { 
     after[j++] = before[i]; 
    } 
    } 
    return after; 
} 
1

试试这个。

Integer[] array ={0,6,0,17,1,9,17,8,4}; 
List<Integer> list = new ArrayList<Integer>(Arrays.asList(array)); 
list.removeAll(Arrays.asList(17)); 
array =list.toArray(new Integer[0]); 
System.out.println(Arrays.toString(array)); 
1

我试着设置项(整数)空,虽然它不工作。

当然不会,因为数组的大小没有改变。为此,一些定义的java集合(特别是ArrayListIterator类)可以为您提供更好的方法。

伪代码:

Turn array into a List 
Iterate over its elements 
    If the element is the given number 
     Remove it 
Return the List as an Array 

可以填补空白,只记得你不能真正从数组中删除一个元素,因为它的大小是静态的。

注意:我正在接受教育方法。

0

那是一个可能的解决方案:

int[] array1 = new int[]{0,6,0,17,1,9,17,8,4}; 
    ArrayList<Integer> result = new ArrayList<Integer>(); 
    boolean flag = true; 

    for(int i = 0; i < array1.length; i++) { 
     for(int j = 0; j < array1.length; j++) { 
      if(array1[i]==array1[j]&&i!=j) { 
       flag = false; 
      } 
     } 
     if(flag) { 
      result.add(array1[i]); 
     } 
     else{ 
      flag = true; 
     } 
    } 

    System.out.println(result); 
0

我想,如果你不想使用ArrayList,你将不得不指望17有多少人在数组中,并创建一个新的袢带.length计数字段

0

您不能从当前使用for循环循环的数组中删除项目。目前,即使您删除了该数组,您仍然可以查看数组的末尾。阵列长度指示符(ansa.length)不会像您所想的那样自动更新。

你应该使用List和一个迭代器遍历整个列表。 然后你可以使用.remove功能

0

你快完成了!

Integer[] ansa = new Integer[] { 0, 6, 0, 17, 1, 9, 17, 8, 4 }; 
    for (int i = 0; i < ansa.length; i++) { 
     if (ansa[i] == 17) { 
      ansa[i] = (Integer) null; 
     } 
    } 

    for (Integer integer : ansa) { 
     System.out.print(integer+","); //0,6,0,null,1,9,null,8,4, 
    } 

您所面临的问题,因为你宣布原始我猜喜欢,

int[] ansa = new int[] // Primitive 
+0

这会在OP数组中留下NULL值。 OP请求的输出没有NULL值。但最初的问题是另有建议。 – Intern87

+0

@ Intern87'我尝试设置条目为(整数)null虽然它不起作用.' –

1
int[] array = { 0,6,0,17,1,9,17,8,4 }; 
int[] filtered = Arrays.stream(array).filter(i -> i != 17).toArray(); 
System.out.println(Arrays.toString(filtered)); 

:-)