【问题标题】:What does "Variable might not have been initialized" mean?“变量可能尚未初始化”是什么意思?
【发布时间】:2014-01-14 06:20:46
【问题描述】:
public static double[] processUserInput(String data) {
        String[] arrayInString;
        double[] arrayInDouble;
        int length;

        if( data.contains(",") ) {
            arrayInString = data.split(",");

            length = arrayInString.length;

            for(int i = 0; i < length; i++) {
                arrayInDouble[i] = Double.parseDouble( arrayInString[i] );
            }
        }

        return arrayInDouble;

    }

我正在使用 Netbeans,编译器说变量 arrayInDouble 可能尚未初始化。这是什么意思?

【问题讨论】:

  • String[] arrayInString;双[] arrayInDouble;您尚未初始化这些数组,这就是为什么您收到警告说变量可能未初始化的原因。
  • 当我这样做时'double[] arrayInDouble = new double[]{};'它解决了问题,但 arrayInString 没有抱怨它?!
  • @Joshua 唯一一次使用arrayInString 是当data.contains(",") 为真时,在这种情况下,您在使用前进行初始化。因此,编译器可以确保您在使用之前初始化该变量。这里的问题是,如果data.contains(",") 为假,则您使用的是arrayInDouble 而不进行初始化(但您不会使用arrayInString,因此它不会以这种方式抱怨该变量)。跨度>
  • @Dennis Meng 你的意思是因为我最后返回了arrayInDouble,所以我必须为变量分配一些东西?所以返回行为是调用“使用变量”?还是我错了?
  • 差不多。在返回的情况下,如果变量没有初始化,你返回什么?

标签: java variables initialization


【解决方案1】:
    String[] arrayInString;

这未初始化,但您在引用它之前提供了一个值 (arrayInString = data.split(",");),因此没有投诉。

    double[] arrayInDouble;

这也是未初始化的。如果输入不包含逗号,则跳过所有代码,然后尝试返回 arrayInDouble 的值。警告说当你执行return 时,arrayInDouble 可能没有值。

【讨论】:

    【解决方案2】:

    在这

    String[] arrayInString;
    double[] arrayInDouble;
    

    你只是声明它们,在你使用它们之前,你还需要初始化:

    String[] arrayInString = new String[length1];
    double[] arrayInDouble = new double[length2];
    

    其中length 是数组的长度。

    PS:还有其他方法可以初始化它们,例如:

    double[] arrayInDouble = {1.1, 2.2}; // The length of the array will be the number of elements in brackets
    

    【讨论】:

    • 有线事物:'String[] arrayInString = new String[3];'它抱怨“从未使用过的赋值”......
    • String 是一个对象,double 是原始的,如果你的数组是 java.lang.Double 的,它会表现出相同的行为
    • @Joshua 这是一个错误吗?还是警告?如果是警告,则表示您没有对数组arrayInString 执行任何操作,因为这只是为了测试,您可以忽略该警告
    • @Christian Still 可能想指出,从长远来看,忽略警告并不理想。
    【解决方案3】:

    您需要在使用它们之前对其进行初始化(分配一些值)。

    【讨论】:

    • 当我这样做时'double[] arrayInDouble = new double[]{};'它解决了这个问题,但 arrayInString 并没有抱怨它。这是为什么呢?
    • @Joshua:因为你在这里给它赋值arrayInString = data.split(",");
    【解决方案4】:

    你没有给这些变量赋值

     String[] arrayInString;
     double[] arrayInDouble;
    

    这些变量是局部变量,因此在使用之前需要对其进行初始化,因为它们不会获得任何默认值。

    【讨论】:

    • 我想知道我在发布此答案时犯的错误。
    猜你喜欢
    • 2012-03-25
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多