访问在if语句中初始化的变量

时间:2014-12-01 04:05:26

标签: java

public static String answer(boolean a, boolean b, boolean c, boolean d, boolean e)
{
    String response;
    if (a == true)
    {
        if (b == false)
        {
            if (c == true)
            {
                if (d == false)
                {
                    if (e == true)
                    {
                        response = "Your animal is a goose!";
                    }
                }
            }
        }
    }

    return response;
}

我的问题是回应。我想将它返回给主测试器,但它一直说它还没有被初始化。我认为这意味着它已经在if else之前被声明,但是它没有识别其中的初始化变量。我该如何解决这个问题?

这是用BlueJ编写的。该程序询问5个问题(布尔a-e),看看你想到的七种农场动物。 if语句决定你的答案,如果它们对应,我想返回“响应”,它将打印你选择的动物。此外,如果有更好的方法,请通知我。我是Java和编码的新手,所以任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

Java中的局部变量(方法内部的局部变量)没有默认值。因此,为了使用它,它必须具有值。

假设afalse,那么到达return response;时应返回的值是多少?您必须为其分配初始值:

String response = null;
// or String response = "";

答案 1 :(得分:0)

编译器会分析代码中的所有可能路径,并发现有可能永远不会分配response,即不会被初始化。

您必须确保无论这些if语句如何发挥作用,response都会被赋予一些价值。

例如,通过给出默认值以

开头
String response = "Your animal is not a goose!";

  

有七种动物供您选择,您可以让计算机回答它提出的问题。还有其他六种情况,如果它们都不适合,那就是用户错误。

在这种情况下,你应该首先保持未初始化,然后分支到达那七只动物和一个else,它会抛出异常(无效输入)或分配错误信息。

  

因此,假设,回应应始终有作业

嗯,在您展示的代码中,情况并非如此。

如果代码非常复杂,编译器可能无法确定某些路径永远不会到达,但在您的情况下,如果添加所有动物,您应该能够获得使编译器生成的内容高兴。

答案 2 :(得分:0)

假设这是java,您需要指定

String response = null;

你应该在路上!。

如果变量在全局级别上,那么将使用默认值隐式分配它,例如对于引用类型,默认值为null,但对于方法内的变量,程序员必须显式初始化它们。 / p>

请参阅此内容,讨论为什么局部变量未在java中自动初始化: Why are local variables not initialized in Java?