【问题标题】:Unable to access array initialised inside while loop无法访问在while循环内初始化的数组
【发布时间】:2015-09-28 11:34:00
【问题描述】:

我正在尝试为我的程序创建一个交互式菜单,该菜单处理对象数组(“学生”)。问题出在我的第二个 switch 函数中,案例 1。它一直给我一个错误,即 myArray 尚未初始化。我首先在 main 方法中声明了 myArray,并认为在我的第一个 switch 中初始化它会初始化 myArray 的所有情况。 (请注意,我第一次使用“是”和“否”的情况下的开关没有问题。) 对我来说,我似乎无法访问 while 循环之外的初始化数组。有没有解决的办法?

public static void main(String[] args) {

    Student[] myArray;

    System.out.println("Welcome.");
        //stuff
        System.out.println("Please type \"Yes\" or \"No\".");
        switch (keyboard.next()) {

        case "Yes":
            String filename = myFile;
            myArray = readListFromFile(filename); //sends to setters in class Student
            //more stuff
            break;

        case "No":
            myArray = readList(); //allows for manual input then sends to setters
            //stuff
            break;

        default:
            System.out.println("Unrecognized option.");

        }

    // add a new switch 
    switch(keyboard.nextInt()) {

        case 1:
            averageScore(myArray); //The local variable myArray may not have been initialized

        }
    }

提前致谢。

【问题讨论】:

  • 它这样说是因为您的 while 循环可能永远不会被执行。因此添加一个默认初始化。
  • 在while循环之前添加一个默认初始化。
  • 编译器需要知道你的变量在你读取它之前被初始化。每条执行路径都需要初始化变量。确保这一点的最简单方法是在声明时为其分配一些东西。

标签: java arrays while-loop


【解决方案1】:

有两种选择。在开头声明您的数组:

Student[] myArray = null;

或者在switch语句中,默认情况下:

myArray = null;

或者初始化为一个空数组来避免Nullpointer。

【讨论】:

  • 谢谢。我发现我也可以使用Student[] myArray = {};
【解决方案2】:

如果输入不是“是”或“否”,您将仅使用默认值。你的数组还没有初始化。

Student[] myArray = null;

在声明时或

myArray = null

在您的开关的默认部分将解决此问题。

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多