在for-each循环之外声明int i会导致错误吗?

huangapple go评论74阅读模式
英文:

Declaring int i outside for-each loop causing error?

问题

以下是翻译好的内容:

public static void main(String[] args) {
    int[] arr = {-1,1,1};
    int i;
    for(i: arr){
        System.out.println(i);
    }
}
上述代码会报错
错误for循环的初始化器错误

但是下面的代码可以正常工作

public static void main(String[] args) {
    int[] arr = {-1,1,1};
    for(int i: arr){
        System.out.println(i);
    }
}

我可以知道为什么在for-each循环外部初始化i是一个错误吗

在Java中,for-each循环(也称为增强型for循环)用于遍历数组或集合中的元素。在for-each循环中,循环变量的类型必须与数组或集合中元素的类型相匹配。因此,在for-each循环中,循环变量的类型是由编译器根据数组或集合的类型自动推断出来的。

在你提供的第一个代码示例中,你在for-each循环之前声明了一个int类型的变量i。这样做是错误的,因为在for-each循环中,循环变量的类型应该由编译器自动推断,而不是显式声明。因此,编译器会报告错误,指出在for循环的初始化器中存在错误的初始化器。

在第二个代码示例中,你将int类型的变量i的声明放在了for-each循环的初始化器中,这是正确的做法。编译器会根据arr数组的类型自动推断出i的类型为int,并且代码可以正常工作。

总结起来,初始化循环变量应该在for-each循环的初始化器中进行,而不是在循环之前进行显式声明。这样可以确保循环变量的类型与数组或集合中元素的类型相匹配。

英文:
public static void main(String[] args) {
    int[] arr = {-1,1,1};
    int i;
    for(i: arr){
        System.out.println(i);
    }
}

above code gives ERROR.
error: bad initializer for for-loop

but the below code works fine.

public static void main(String[] args) {
    int[] arr = {-1,1,1};
    for(int i: arr){
        System.out.println(i);
    }
}

Can I know why initializing i outside for-each loop is a mistake.?

答案1

得分: 6

因为你不能像那样使用for循环。for in语法要求你使用一个在循环中作用域范围内的新变量。你可以像这样使用它:

public static void main(String[] args) {
    int[] arr = {-1,1,1};
    int i;
    for(i = 0; i < arr.length; i++){
        System.out.println(arr[i]);
    }
}
英文:

Because you simply can't use for loops like that. The for in syntax require you use a new variable which is scoped to the loop. You could use it like this, though:

public static void main(String[] args) {
    int[] arr = {-1,1,1};
    int i;
    for(i = 0; i &lt; arr.length; i++){
        System.out.println(arr[i]);
    }
}

答案2

得分: 0

增强型for循环的语法就像这样。

for(int x: arr) {
     System.out.println(x);
}
英文:

The syntax of the enhanced for loop are just like that.

for(int x: arr) {
     System.out.println(x);
}

huangapple
  • 本文由 发表于 2023年7月27日 17:35:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/76778390.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定