为什么这个阵列给我带来麻烦?

时间:2014-06-27 12:02:16

标签: java arrays for-loop

如果我写这个:

int array[] = {2, 2, 4, 6, 8, 5};
for (int i : array) {

}

..没关系,但如果我这样写:

int array[] = {2, 2, 4, 6, 8, 5};
int i = 0;
for (i : array) {

}

它给了我一些问题。我的老师说他希望我们总是在顶部进行初始化,我们如何将int放在for内...

还有其他方法可以写吗?

6 个答案:

答案 0 :(得分:1)

您使用的语法是for循环的特殊情况,有时称为" for-in"环。你的老师可能想要一个更传统的C风格循环:

for (int i = 0; i < array.length; i++) {
    // you need to say array[i] to access elements here
}

不同之处在于for-in循环不使用计数器(循环归纳变量),它使用未初始化的值i并在迭代时将该名称绑定到数组的每个元素。

答案 1 :(得分:1)

Java中的for each loop需要类型,但您还没有提供。您只提供了变量i

for (type var : arr) {
    // body-of-loop
}

退出该类型是语法错误。如果您的讲师坚持要求您在循环之前声明i,那么您将不得不使用常规for loop

int i = 0;
for (i = 0; i < array.length; i++) {
    // body-of-loop
}

(虽然我不同意这是好风格。)

答案 2 :(得分:1)

如果要遍历数组的所有元素,可以采用以下两种方式:

当你只需要元素时:

for (int element : array) {
    ...
}

当您还需要索引(i)时:

for (int i = 0; i < array.length; i++) {
    int element = array[i];
    ...
}

对于第二个循环,如果您的老师希望您在顶部声明所有内容,则可以执行以下操作:

int element;
for (int i = 0; i < array.length; i++) {
    element = array[i];
    ...
}

答案 3 :(得分:0)

你有效地改变它:

int array[] = {2, 2, 4, 6, 8, 5};
for (int i : array) {

}

int array[] = {2, 2, 4, 6, 8, 5};
for (int i = 0: array) {

}

如果你试着读它,它真的没有意义。问,&#34;它想做什么?&#34; - 在第一种情况下,你告诉它采取数组中的所有整数。然而在第二种情况下,你试图以某种方式指定从哪里开始,但对于代码它没有意义:你怎么能从0到数组?

另一种写作方式是:

int array[] = {2, 2, 4, 6, 8, 5};
for (int i = 0; i < array.length; i++) {
   int j = array[i]; // takes the value of the array at index i
}

这从索引0开始,并遍历索引#5,每次将索引增加1。 java中的数组索引从0开始,以小于1的长度结束,因此i将从0到5。

答案 4 :(得分:0)

当你使用每个java构造时,将int声明为for循环的一部分被认为是完全可以接受的(也是必要的),就像你的第一个代码块一样。

您的老师可能会担心您的变量没有定义的值,但在这种情况下它是可以接受的,因为整数i将始终绑定到给定的数组或集合的值之后结肠。

答案 5 :(得分:0)

如果使用foreach语句(在Java中称为&#34; enhanced for loop&#34;),则必须在语句中声明变量的类型,否则它将无法编译。如果你想在顶部初始化,你不能使用foreach,但这是一个简单的for循环:

int i = 0;
for (; i < array.length; i++) {

}

int i;
for (i = 0; i < array.length; i++) {

}