有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中返回布尔值时出错

我正试着做运动,但a卡住了

这个类将询问用户是否仍然想玩游戏,回答是或否,并返回一个boolean

public boolean playAgain() {
    char va;
    boolean t = true;
    boolean ry;
    while (t = true) {
        IO.outputln("Want to play again? (y/n)");
        va = IO.inputCharacter();
        if ((va == 'y') || (va == 'Y')) {
            ry = true;
            t = false;
        } else if ((va == 'n') || (va == 'N')) {
            ry = false;
            t = false;
        }

    }
    return ry;

这给了我下一个错误:

[ERROR] variable ry might not have been initialized.

可以从一开始就给变量ry赋值吗?(因为在任何情况下,它都将在while循环中分配)


共 (1) 个答案

  1. # 1 楼答案

    在进入另一个作用域之前,不要给变量赋值。为了更好地说明这一点,以下是缩进更清晰的代码:

    public boolean playAgain() {
        char va;
        boolean t = true;
        boolean ry;
        while(t = true) {
            IO.outputln("Want to play again? (y/n)");
            va = IO.inputCharacter();
            if((va == 'y') || (va == 'Y')) {
                ry = true;
                t = false;
            } else if((va == 'n') || (va == 'N')) {
                ry = false;
                t = false;
            }
    
        }
        return ry;
    }
    

    只声明ry,但不初始化它;它的初始化依赖于if语句中的某些内容,该语句本身就在while循环中

    当Java编译类似这样的东西时,它也会考虑分支,即“我会继续这个if分支吗?”,或者,“如果这个循环从未启动,会发生什么?”

    以这种方式查看代码:

    public boolean playAgain() {
        char va;
        boolean t = true;
        boolean ry;
    
        return ry;
    }
    

    这是有效地消除循环,以防它“从不点火”。请注意,我们现在返回的变量中没有初始化任何内容。这是不可接受的,因此会出现编译错误,“变量ry可能尚未初始化。”

    它假设循环可能永远不会触发(尽管在本例中,这是非常正确的;您可能希望将其更改为while(t == true)或甚至while(t)),并且它看到ry在方法的后面使用,但没有值

    必须将变量ry初始化为一个值(例如boolean ry = false