2013-12-09 154 views
1

我有整數a = 4和數組b的b 7,8,9,4,3,4,4,2,1從數組中刪除特定值(java)

我必須編寫一個方法,從陣列中的所有A b

期望的結果7,8,9,3,2,1

這是我到目前爲止,

public static int[] removeTwo (int x, int[] array3) 
{ 
    int counter = 0; 
    boolean[] barray = new boolean [array3.length]; 
    for (int k=0; k<array3.length; k++) 
    { 
     barray[k] = (x == array3[k]); 
     counter++; 
    } 

    int[] array4 = new int [array3.length - counter]; 
    int num = 0; 
    for (int j=0; j<array3.length; j++) 
{ 
    if(barray[j] == false) 
    { 
     array4[num] = array3[j]; 
     num++; 
    } 

} 
    return array4; 

我得到這個錯誤

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
    at Utility.removeTwo(Utility.java:50) 
    at Utility.main(Utility.java:18) 

Java結果:1

任何幫助將不勝感激!

+1

你正在遞增計數器,通過第一個for循環的每一步,這真的是你的意思嗎? –

+0

有什麼好的理由不使用ListArray? – gregory561

回答

2

錯誤源於此for循環:

for (int k=0; k<array3.length; k++) 
{ 
    barray[k] = (x == array3[k]); 
    counter++; 
} 

當你創建int[] array4 = new int [array3.length - counter];要創建大小爲0的數組時,才應增加計數器的值,如果該項目是刪除所需的項目:

for (int k=0; k<array3.length; k++) 
{ 
    boolean b = (x == array3[k]); 
    barray[k] = b; 
    if(b) { 
     counter++; 
    } 
} 

要回答在評論你的問題,該方法應被調用,可以這樣檢查:

public static void main(String[] args) { 
    int[] array3 = {0,1,3,2,3,0,3,1}; 
    int x = 3; 
    int[] result = removeTwo(x, array3); 
    for (int n : result) { 
     System.out.print(""+ n + " "); 
    } 
} 
+0

它擺脫了錯誤,但我仍然得到int x在我的數組中 int [] array3 = {0,1,3,2,3,0,3,1}; int x = 3; removeTwo(x,array3); (int value:array3) System.out.printf(「%d」,value); 我在主要方法中使用它嗎? – user3083128

+0

在你的主要方法中使用什麼?你爲什麼要打印array3的值,這似乎是原始數組? – turbo

+0

等待不知所措,我沒有直截了當地想。哈哈哈我需要睡眠,感謝您的幫助! – user3083128

1

在此行中:

int[] array4 = new int [array3.length - counter]; 

創建與大小爲0的數組,如counter是在這一點上等於array3.length

這意味着您無法訪問該數組中的任何索引。

0

你正在創建

int[] array4 = new int [array3.length - counter];// 0 length array. 

你不能有0th指數在那裏。至少長度應爲10th索引。

順便說一句我的建議,最好使用List。然後你可以輕鬆做到這一點。

0

真的是一個Array是工作的錯誤工具,因爲除了其他任何東西外,最後都會有一些無法刪除的雜散值。只需使用一個ArrayList並提供一個removeAll()方法來執行您所需的操作。如果你確實需要數組,你甚至可以做:

List<Integer> list = new ArrayList(Arrays.asList(array)) 
list.removeAll(4); 
array = list.toArray(); 

(精確的方法名稱/參數可能需要調整,因爲這是所有從內存中)。

+0

在'List'有沒有方法removeAll(int)? – Masudul

+0

removeAll(Integer) –

+0

int是一個原始對象,你不能把它放在'List'中 –

0

最簡單的方法是你在正確的價值觀把

東西likte是

public static int[] removeTwo (int x, int[] array3) 
{ 
    int counter = 0; 
    int[] array4 = new int[array3.lenght]; 
    for (int i = 0; i < array3.lenght; i ++) { 
     if(array3[i] == x){ 
      array4[counter] = array3[i]; 
     } 
    } 
    return array4; 
} 

anoterh方法是刪除從array3x calue和移位值與第二陣列工作正向後面

+0

這段代碼會不工作,你永遠不會增加'計數器',你也拼錯了兩次。 – turbo

+0

你是對的。在array4 [counter] = array3 [i]之後的 ;''你必須遞增計數器'counter + = 1' – Stone

0

從陣列中刪除元素的最佳方法是使用ListIterator。嘗試,

Integer[] array = {7, 8, 9, 4, 3, 4, 4, 2, 1}; 
List<Integer> list = new ArrayList(Arrays.asList(array)); 
for(Iterator<Integer> it=list.iterator();it.hasNext();){ 
    if(it.next()==4){ 
     it.remove(); 
     } 
    }