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
通常会包含更复杂的东西,你可能无法正确地否定它。
我正在使用 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
通常会包含更复杂的东西,你可能无法正确地否定它。