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

Java 为什么这个阵列会给我带来麻烦?,java,arrays,for-loop,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 array[] = {2, 2, 4, 6, 8, 5}; for (int i : array) { } int array[] = {2, 2, 4, 6, 8, 5}; int i =

如果我这样写:

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 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
的内部呢


还有其他编写方法吗?

您使用的语法是for循环的特例,有时称为“for in”循环。您的老师可能希望循环使用更传统的C样式,如下所示:

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

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

Java中需要一个类型,而您没有提供。您只给了它变量
i

for (type var : arr) {
    // body-of-loop
}
省略该类型是一个语法错误。如果您的讲师坚持要求您在循环之前声明
i
,则您必须使用常规

inti=0;
对于(i=0;i

(尽管我不认为这是一种好的风格。)

你实际上是在改变它:

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

}

如果你试着去读它,那就没什么意义了。问:“它想做什么?”-在第一种情况下,你告诉它取数组中的所有整数。然而,在第二个例子中,您试图以某种方式指定从何处开始,但对于代码来说,这毫无意义:如何从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
}
int数组[]={2,2,4,6,8,5};
for(int i=0;i

这从索引0开始,并通过索引5进行迭代,每次增加索引1。java中的数组索引以0开头,以小于长度的1结尾,因此
i
将从0变为5。

如果要遍历数组的所有元素,有两种方法:

当您只需要该元素时:

for (int element : array) {
    ...
}
当您还需要索引(
i
)时:

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

int element;
for (int i = 0; i < array.length; i++) {
    element = array[i];
    ...
}
int元素;
for(int i=0;i
当您使用for-each-java构造时,您认为完全可以(并且有必要)将
int
声明为for循环的一部分,就像在第一个代码块中一样


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

如果使用foreach语句(在Java中称为“”)您必须在语句中声明变量的类型,否则它将无法编译。如果要在顶部初始化,则不能使用foreach,而是使用如下简单的for循环:

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

}
inti=0;
对于(;i

inti;
对于(i=0;i int i和int i=0不相同。添加语言标记,如C、C++或java之类的。请描述你所讨论的问题。你指的是“它给了我问题”?找到另一位老师,语法都是完全好的,如果你不想在以后重用变量,第一个更好。