【问题标题】:How to initialize an array dynamically in Java?如何在 Java 中动态初始化数组?
【发布时间】:2018-05-18 06:43:40
【问题描述】:

我尝试动态初始化一个数组并显示该数组 结果:

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 arr,int[] c = null,编译器不知道代码流会一直进入while循环
  • 是使用此程序将数字输入到数组中所需的功能,直到您在继续阶段输入否?

标签: java arrays dynamic foreach syntax


【解决方案1】:

其他答案是正确的,你没有初始化你的数组。您需要致电 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);
}

【讨论】:

  • 看看while循环中的条件。解决这个问题也是明智之举。
【解决方案2】:

对于您的实际编译错误,如果不执行循环,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?

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2011-01-03
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多