从int数组中删除所有出现的整数

时间:2013-10-24 13:46:27

标签: java arrays

如何从java中的给定数组中删除所有出现的整数(例如17)? 我尝试将条目设置为(整数)null虽然它不起作用。

输入数组:[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

8 个答案:

答案 0 :(得分: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 :(得分:1)

  

我尝试将条目设置为(整数)null虽然它不起作用。

当然没有,因为数组的大小没有改变。为此,一些已定义的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

您可以填写空白,只需记住您实际上无法从数组中删除元素,因为它的大小是静态的。

注意:我正在采用教育方法。

答案 2 :(得分: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));

: - )

答案 3 :(得分: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;
}

答案 4 :(得分: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);

答案 5 :(得分:0)

我认为,如果您不想使用ArrayList,则必须计算数组中有多少17个并使用ansa.length-count字段创建一个新的

答案 6 :(得分:0)

您无法从当前使用for循环的数组中删除项目。目前,即使您删除了数组,也要到达数组的末尾并查找下一个值。数组长度指示器(ansa.length)不会像您想的那样自动更新。

您应该使用List和迭代器来遍历列表。 您可以使用.remove函数

答案 7 :(得分: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