2013-10-24 40 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)); 

:-)