请解释以下代码段无法编译的原因:
public class ScjpTest{
static void go(int... i){
System.out.println("In 1");
for (int x : i){
System.out.println(x);
}
}
static void go(int i){
System.out.println("In 2");
for (int x : i){
System.out.println(x);
}
}
public static void main(String[] args){
go(1);
go(1,2);
go(1,2,3);
}
}
我正在测试看看将调用哪个go()实例,但它失败并出现以下错误:
ScjpTest.java:16: foreach not applicable to expression type
for (int x : i){
^
1 error
我不能为我的生活解决增强的for循环的问题。
由于
答案 0 :(得分:4)
在第一次重载中,i
是整数的数组。这就是你可以迭代它的方法。在第二个重载中,它只是一个单个整数值。增强的for循环仅适用于Iterable
实例和数组 - 而不是单个值。你应该写:
System.out.println(i);
因为必须只有一个值。
答案 1 :(得分:3)
在第二个go()
方法中,你试图迭代一个int,而不是一个int数组(这是varargs分解为的。)因为你不能有意义地迭代int,编译器抱怨。
答案 2 :(得分:3)
您无法迭代单个整数。它适用于使用varargs
输入的方法,因为它是一个整数数组,相当于int[]
参数。
你可以简单地使用它:
static void go(int i){
System.out.println("In 2");
System.out.println(i);
}