2012-01-30 83 views
2

我有一個大小爲50的整數數組。 所以,如你所知,最初這個數組的元素值將全爲0。 我需要做的是: 如果數組= [12,10,0,0,...... 0],for循環只需要考慮非零元素,所以循環應該被執行同樣,如果數組爲= [0,0,0,...... 0],則for循環不應該執行,因爲所有元素均爲零。 如果數組是[12,10,5,0,17,8,0,0,.......,0],則for循環應該爲前6個元素執行,即使其中一個內部元素爲零。Integer數組訪問 - Java

這是我的。這給了我一個IndexOutOfBoundsException.Please幫助。 此外,有沒有什麼辦法可以動態增加int數組的大小,而不是將大小設置爲50,然後在循環中使用它? thx在advacance任何幫助!

int[] myArray = new int[50]; 
int cntr = 0; 
int x = getXvalue(); 
int y = getYvalue(); 

if (x>y){ 
    myArray[cntr] = x; 
    cntr++; 
    } 

for (int p=0; p<= myArray.length && myArray[p]!=0 ; p++){ 
//execute other methods.. 
} 

// SOLUTION:

我利用一個ArrayList代替的int數組動態增加陣列的尺寸。

ArrayList<Integer> myArray = new ArrayList<Integer>(); 

To set the value of the elements- 
myArray.add(cntr, x); // add(index location, value) 
+2

考慮使用'ArrayList'。它使用簡單,可以動態調整大小。 – Dawood 2012-01-30 06:33:09

+0

哪一行引發異常? – Arjan 2012-01-30 06:37:14

+0

@Arjan - for循環拋出一個異常 – user656523 2012-01-30 06:40:44

回答

3

一個清潔的方法是:

最方便的方法來解決這樣的這樣的事情是使用適當的集合。對於這個例子,你可以考慮使用ArrayList<Integer>

好處是,您不必預先初始化給定大小的列表。如有必要,它也會調整大小。

另一個優點是您不必關心填充空元素以及處理列表末尾的空元素。

具體問題是

for (int p=0; p<= myArray[cntr].length && myArray[p]!=0 ; p++){ 
//execute other methods.. 
} 

這應該是非法的:

myArray[cntr].length 

它需要myArray.length

也從0..50迭代與<=這不會忽略51元素你只有50 el對此語句所以正確的代碼行會

for (int p=0; p< myArray.length && myArray[p]!=0 ; p++){ 
+0

Thx!我根據你的建議使用了ArrayList。解決方案包含在我的文章中。 :) – user656523 2012-01-30 08:54:16

1

這是有問題的:

for (int p=0; p<= myArray[cntr].length && myArray[p]!=0 ; p++){ 

myArrayint類型的數組,所以你不能使用myArray[cntr].length。你也許意味着這個代替?:

for (int p=0; p<= cntr && myArray[p]!=0 ; p++){ 
2
for (int p=0; p<= myArray[cntr].length && myArray[p]!=0 ; p++){ 

此行甚至不應該編譯。你可能意思是myArray.length?另一個錯誤:使用<而不是<=

而你可能想要一個列表在這裏,而不是一個數組。列表可以動態調整大小,數組不能。

+0

是的..那是一個錯字...我的意思是myArray.length。 – user656523 2012-01-30 06:43:03

0

這將有助於您的問題

int len = myArray.length; 

    for (int p=0; p < len; p++){ 

     cntr++; 
     while(myArray[p]==0){ 
      if((p+1) != len) p++; 
     } 
    System.out.println(myArray[p]); 
    System.out.println("cntr: " + cntr++); 
     //execute other methods.. 
    } 

但是處理陣列更好的辦法是使用集合的ArrayList。

-1

你爲什麼不考慮增加一個continue語句內的for循環本身這樣

for (int p=0; p<= myArray.length ; p++) 
{ 
    if(myArray[p]==0){ 
    continue; 
    } 
//execute other methods.. 
}