整数数组访问 - Java

时间:2012-01-30 06:30:20

标签: java arrays for-loop int

我有一个大小为50的整数数组。 因此,如您所知,最初此数组的元素值将全为0。 我需要做的是: 如果数组= [12,10,0,0,...... 0],for循环只需要考虑非零元素,所以循环应该只执行两次.once为12和next 10。 类似地,如果数组是= [0,0,0,...... 0],那么for循环不应该执行,因为所有元素都是零。 如果数组是[12,10,5,0,17,8,0,0,.......,0]那么for循环应该为前6个元素执行,即使其中一个内部元素为零。

这就是我所拥有的。这给了我一个IndexOutOfBoundsException.Please帮助。 另外,有什么方法可以动态增加int数组的大小而不是将大小设置为50,然后在循环中使用它?感谢您提供任何帮助!

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)

5 个答案:

答案 0 :(得分:3)

更简洁的方法是:

解决此类问题最方便的方法是使用适当的Collection。对于此示例,您可以考虑使用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元素进行迭代,这些元素只有for (int p=0; p< myArray.length && myArray[p]!=0 ; p++){ 元素,因此正确的代码行将是

{{1}}

答案 1 :(得分:2)

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

这行甚至不应该编译。你可能意味着myArray.length?另一个错误:使用<而不是<=

你可能想要一个List,而不是一个数组。列表可以动态调整大小,但阵列不能。

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

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

但更好的处理数组的方法是使用Collections ArrayList。

答案 4 :(得分:-1)

为什么不考虑在for循环中添加一个continue语句,就像这个

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