无法在while循环中设置变量

时间:2014-06-08 21:59:14

标签: java

Java新手,对不起,如果这是一个愚蠢的问题。我想为while循环内的几个变量分配新值,但这不起作用。我收到错误"本地变量newString可能尚未初始化"在尝试编译时。这是一个例子:

public class Test {

    public static String example() {
        String first;
        String second;
        String newString;
        int start = 1;

        while (start<5) {
            if (start<4) {
                first = "hello";
                second = "world";
                newString = first + second;
            }
            start += 1;
        }
        return newString;
    }

    public static void main(String[] args) {
            System.out.println(example());
    }
}

3 个答案:

答案 0 :(得分:1)

您收到此错误是因为编译器在返回之前不知道是否会初始化newString

虽然 知道start<5start<4都是true并且因此会执行,但编译器并没有&# 39;在编译期间执行这些类型的计算。因此,就其所知,这些语句永远不会执行,因此newString可能会在初始化之前返回。

因此,您应该在声明它时将其初始化(例如null)以避免此错误。

答案 1 :(得分:1)

Java中有一条规则,所有局部变量必须在首次读取之前进行初始化。您正在使用newString作为返回值,这是一个读取操作。
虽然您要为newString分配值,但它是在条件情况下完成的(start<5 && start<4)。在编译时,编译器不知道运行代码的结果是什么,它保守地抱怨这种情况。

简单的解决方案是初始化字符串:

 String newString = "";

答案 2 :(得分:1)

当您从方法返回变量时,编译器需要确保将一个值分配给该变量(在您的情况下为newString)。

虽然你很清楚条件start < 4在某些点上会true,但是编译器不够聪明,无法解决这个问题,这意味着你必须只返回变量,肯定有价值。

根据您的方法的目的,您有以下机会:

String newString = "";

在这种情况下,您确定您的方法永远不会返回null,这在某些情况下可能会发现错误。

另一个机会是

String newString = null;

如果您希望允许方法返回null值。

在这种情况下很明显,你最终会输入if - 块并为变量newString分配一个值,在其他情况下它不会那么明显,所以你需要确定是否允许您的方法返回null值。