BlueJ中的编译错误 - if else with return语句

时间:2017-08-09 06:19:43

标签: java bluej

我使用BlueJ IDE编写java程序。

我有一个String返回类型的方法。我把return语句放在if-else中,这样如果布尔变量" flag"具有真值,然后返回一个值,而如果值为false,则返回另一个值。

现在,问题是BlueJ在此之后要求另一个return语句,如下所示。

enter image description here

如果我在if-else之后给予另一次回报,那就有效。

为什么会这样?我知道在return语句之后没有语句。那么,为什么编译器要求另一个return语句?

如果有人想要用于剪切粘贴目的的代码,那么就是这样。此代码用于将二进制数转换为十进制数,包括分数,但不包含负数。

public class Conversions{
    protected String Binary_Decimal(String str){
        int a = str.indexOf('.');
        boolean flag = false;
        if (a == -1){
            str += ".0";
            a = str.indexOf('.');
            flag = true;
        }
        String bd = str.substring(0, a);
        String ad = str.substring(a + 1);
        a = 0;
        double num = 0;
        for (int i = bd.length() - 1; i >= 0; i--){
             num += Math.pow(2, a) * Integer.parseInt(Character.toString(str.charAt(i)));
            a++;
        }
        if (flag == true){
            return Integer.toString((int) num);
        }
        else if (flag == true) {
            a = -1;
            for (int i = 0; i < ad.length(); i++){
                num += Math.pow(2, a) * Integer.parseInt(Character.toString(str.charAt(i)));
                a--;
            }
            return String.valueOf(num);
        }
        return String.valueOf(num); //<-- WHY DOESN'T IT RUN WITHOUT THIS EXTRA return?
    }
}

此处,str是用户使用其他方法Input()输入的字符串。

3 个答案:

答案 0 :(得分:2)

  

那么,为什么编译器要求另一个return语句?

因为您缺少默认的return语句。

如果您满意的条件都没有?必须有一些返回默认权利吗?这就是问题所在。这就是为什么在取消注释该行时编译的原因。

或者甚至,你有一个else语句,你的程序将至少有一个满意的返回,它也会被编译。试试吧。

  

我了解到在返回声明后没有任何陈述。

此声明附带一些条件。你在if条件中有return语句。因此,如果表达式不正确,则无法执行返回。

答案 1 :(得分:2)

删除第二个ELSE IF子句并将块直接放在第一个return语句之后,并认为该标志是一个布尔值。如下:

if (flag) return Integer.toString((int) num);
a=-1;
for(....){
....
}
return String.valueOf(num);

通过这种方式,编译器不应该通知您该错误。

答案 2 :(得分:2)

问题是您将if - else写为if - else if。编译器不理解或不关心您拥有的两个条件是互斥的,因此涵盖所有情况。鉴于你如何编写分支,你需要一个明确的else或catchall return,以确保编译器始终返回String

这是为什么当你有一套条件时明确地拼出else是个坏主意的一个例子。更重要的原因是,if通常会包含更复杂的内容,而且您可能无法正确否定它。