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

Compilation error in BlueJ- if else with return statement

我正在使用 BlueJ IDE 编写 java 程序。

我有一个 String return 类型的方法。我将 return 语句放在 if-else 中,这样如果布尔变量 "flag" 具有真值,那么一个值是 returned,而如果值为假,则另一个值是 returned.

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

如果我在 if-else 之后给出另一个 return,它就可以工作。

为什么会这样?我了解到 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()

So, why is the compiler asking for another return statement?

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

满足none个条件怎么办?一定有一些东西 return 默认吧?这就是问题所在。这就是当您取消注释该行时它被编译的原因。

甚至,您有一个 else 语句,您的程序将至少满足一个 return 并且它也会被编译。试试吧。

I had learnt that there can be no statements after the return statement.

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

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

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

这样,编译器就不会通知你那个错误了。

问题是您将 if - else 写成了 if - else if。编译器不理解也不关心您拥有的两个条件是相互排斥的,因此涵盖了所有情况。鉴于您编写分支的方式,您需要一个明确的 else 或一个包罗万象的 return 来让编译器确保该函数始终 returns a String.

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