我有一个大小为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)
答案 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++){
myArray
是int
类型的数组,因此您无法使用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..
}