Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中动态初始化数组?_Java_Arrays_Dynamic_Foreach_Syntax - Fatal编程技术网

如何在Java中动态初始化数组?

如何在Java中动态初始化数组?,java,arrays,dynamic,foreach,syntax,Java,Arrays,Dynamic,Foreach,Syntax,我已尝试动态初始化数组并显示该数组 因此: 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";

我已尝试动态初始化数组并显示该数组 因此:

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可能尚未初始化”

其他答案是正确的,您没有初始化数组。您需要调用
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);
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
扫描仪输入=新扫描仪(系统输入);
ArrayList c=新的ArrayList();
String cmd=“yes”;
而(cmd.equals(“yes”)){
System.out.println(“为c输入值:”);
c、 在.nextInt()中添加((整数);
System.out.println(“继续(是/否)?:”;
cmd=in.next();
}
for(整数k:c)
系统输出println(k);
}

对于您的实际编译错误,如果不执行循环,
c
可能无法初始化。即使您知道它会(因为
cmd
等于
“yes”
,编译器也不会走那么远)

您将找到在开始时初始化值的答案,例如,但根据您的逻辑,您可以使用
do..while
循环,因为您的逻辑显示您希望至少读取
扫描仪一次

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
执行block语句后检查
do..while
中的条件(与之前检查条件的
while
相比)。因此,该语句将至少执行一次,因此您可以确定
c
将以这种方式初始化。编译器也知道这一点



由于标题中提到您需要动态大小的数组,请参阅使用将根据需要增长的
集合。有关
列表
的更完整帖子,请参见

初始化c arr,
int[]c=null
,编译器不知道代码流将始终进入while loop。在继续阶段输入no之前,是否需要使用此程序将数字输入数组?请查看while循环中的条件。最好也解决这个问题。