我试图动态初始化数组并显示数组 结果:
import java.util.Scanner;
public class Arrays {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int[] c;
String cmd="yes";
while(cmd=="yes") {
System.out.println("Enter value for c :");
c=new int[] {in.nextInt()};
System.out.println("Continue(yes/no)? :");
cmd=in.next();
}
for(int k:c)
System.out.println(k);
}
}
但是在for-each循环(即main()的第12行)中,它显示错误为"局部变量c可能尚未初始化"。
答案 0 :(得分:2)
其他答案都是正确的,你没有初始化你的数组。您需要致电c=null;
才能使其正常工作。
但是,如果我理解正确,那么您正在尝试将数字添加到不确定大小的数组中,这是Java无法做到的。你应该使用ArrayList。
您还使用==来比较字符串值,这是一个很大的禁忌,我在下面的答案中将其更改为.equals
。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
ArrayList<Integer> c = new ArrayList<>();
String cmd="yes";
while(cmd.equals("yes")) {
System.out.println("Enter value for c :");
c.add((Integer)in.nextInt());
System.out.println("Continue(yes/no)? :");
cmd=in.next();
}
for(Integer k:c)
System.out.println(k);
}
答案 1 :(得分:0)
对于实际编译错误,如果未执行循环,则c
可能无法初始化。即使你知道它会(因为cmd
等于"yes"
,编译器也不会那么远)。
您会找到最初初始化值的答案,例如Neng Liu's answer,但根据您的逻辑,您可以使用do..while
循环,因为您的逻辑显示您想要至少读取一次Scanner
。
do{
System.out.println("Enter value for c :");
c=new int[] {in.nextInt()};
System.out.println("Continue(yes/no)? :");
cmd=in.next();
}while("yes".equals(cmd)); //.equals is needed to compare `String` correctly
执行块语句后检查do..while
中的条件(与之前检查条件的while
比较)。因此语句将至少执行一次,因此您确定c
将以这种方式初始化。编译器也知道这一点。
由于标题提及您需要动态大小的数组,请参阅HamishD's answer以使用将根据需求增长的Collection
。有关List
的更完整帖子,请参阅Java dynamic array sizes?