Java 错误 "missing return statment"
Java error "missing return statment"
所以这是我的代码:
public class Bob {
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
} else {
System.out.println("Complete");
return 0;
}
}
public static void main(String[] args) {
int result = F(10);
System.out.println(result);
}
}
我好像找不到哪里出错了。涵盖了 n 的所有可能值。如果我在 if 语句之外添加一个简单的 return 值,它将起作用,但我不明白为什么会这样。
另外,我想在 main 中添加一个 print "i" 语句,但是每当我做类似的事情时:
if (something){
int i;
i++;
do something
我尝试添加一个 System.out.println(i),它给我一个关于静态变量的错误。
Question 1
您必须在方法中添加 return;
语句,因为它可能永远不会进入 if
statement.The 编译器不知道您将使用哪些变量调用该方法,因此:
return某事;
你还漏了一个括号
else{ System.out.println("Complete"); return 0;}
如果您想使用最后的 else 作为 return 点,那么您的方法必须是这样的:
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
}
} else {
System.out.println("Complete");
return 0;
}
}
Question 2
不允许在静态方法中使用非静态变量,如果它们超出方法 scope.That 是因为静态方法加载速度更快,非静态的简单方法和变量可能尚未初始化。
我的意思是:(不允许)
int b;
public static void main (String[ ] args){
// variable ( b) has to be static to be used here
}
您的代码没有意义,正如所发布的那样。您有一个包含三个分支的 if/else
语句。如果 n%2
为 0,则执行第一个分支。如果 n%2
不为零,则执行第二个分支。既然涵盖了所有的可能性,那么第三个分支应该什么时候执行呢?
因为这没有意义(而且因为我以前见过这个编码问题),我怀疑你的意思是如果第一个 if
为假,则执行第三个分支,即如果 n <= 1
。但是由于大括号,编译器将 "else" 附加到 if (n%2...)
分支,而不是 if (n > 1)
。要解决此问题,您需要另一个大括号:
public static int F(int n){
if (n > 1){ // ***** Opening brace 1
if (n%2 == 0){
n = n/2;
System.out.println(n);
return F(n);
} else if(n%2 != 0){ // ***** Opening brace 2
n = 3*n+1;
System.out.println(n);
return F(n);
} // This curly brace matches "opening brace 2"
} // This curly brace matches "opening brace 1"
else {
System.out.println("Complete");
return 0;
}
}
但这仍然不合法,原因也不明显。这里发生的是 Java 要求您在每个可能的路径中都有一个 return
语句。下面是编译器的想法:如果 n > 1
,那么你有一个 if
语句 if (n%2 == 0)
。如果失败,它将转到 if
语句 if (n%2 != 0)
。如果这也是 false,那么它将下降到最后的 else
部分,并且它将到达方法的末尾而不返回任何内容。
当然,你我看着它会说,那是不可能的,因为n%2 == 0
或n%2 != 0
必须为真。但这需要我们做一些推理。 Java 编译器不进行这种推理,因此无法确定这两个 if
表达式中的一个一定为真。
所以解决这个问题也需要你改变
} else if(n%2 != 0) {
至
} else {
无论如何您都不需要 if
——它完全是多余的。如果我们到达这里,我们已经知道 n%2 != 0
.
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
} else {
System.out.println("Complete");
return 0;
}
}
错误 missing return statement 是因为你没有指定 return statement if n is less than 1.. 那么,这个函数 return 如果提供的 参数 n 小于 1,如 0。您应该在 else 语句中指定它,甚至用单个 return 语句如 return -1 在函数的最后一行;
所以这是我的代码:
public class Bob {
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
} else {
System.out.println("Complete");
return 0;
}
}
public static void main(String[] args) {
int result = F(10);
System.out.println(result);
}
}
我好像找不到哪里出错了。涵盖了 n 的所有可能值。如果我在 if 语句之外添加一个简单的 return 值,它将起作用,但我不明白为什么会这样。
另外,我想在 main 中添加一个 print "i" 语句,但是每当我做类似的事情时:
if (something){
int i;
i++;
do something
我尝试添加一个 System.out.println(i),它给我一个关于静态变量的错误。
Question 1
您必须在方法中添加 return;
语句,因为它可能永远不会进入 if
statement.The 编译器不知道您将使用哪些变量调用该方法,因此:
return某事;
你还漏了一个括号
else{ System.out.println("Complete"); return 0;}
如果您想使用最后的 else 作为 return 点,那么您的方法必须是这样的:
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
}
} else {
System.out.println("Complete");
return 0;
}
}
Question 2
不允许在静态方法中使用非静态变量,如果它们超出方法 scope.That 是因为静态方法加载速度更快,非静态的简单方法和变量可能尚未初始化。
我的意思是:(不允许)
int b;
public static void main (String[ ] args){
// variable ( b) has to be static to be used here
}
您的代码没有意义,正如所发布的那样。您有一个包含三个分支的 if/else
语句。如果 n%2
为 0,则执行第一个分支。如果 n%2
不为零,则执行第二个分支。既然涵盖了所有的可能性,那么第三个分支应该什么时候执行呢?
因为这没有意义(而且因为我以前见过这个编码问题),我怀疑你的意思是如果第一个 if
为假,则执行第三个分支,即如果 n <= 1
。但是由于大括号,编译器将 "else" 附加到 if (n%2...)
分支,而不是 if (n > 1)
。要解决此问题,您需要另一个大括号:
public static int F(int n){
if (n > 1){ // ***** Opening brace 1
if (n%2 == 0){
n = n/2;
System.out.println(n);
return F(n);
} else if(n%2 != 0){ // ***** Opening brace 2
n = 3*n+1;
System.out.println(n);
return F(n);
} // This curly brace matches "opening brace 2"
} // This curly brace matches "opening brace 1"
else {
System.out.println("Complete");
return 0;
}
}
但这仍然不合法,原因也不明显。这里发生的是 Java 要求您在每个可能的路径中都有一个 return
语句。下面是编译器的想法:如果 n > 1
,那么你有一个 if
语句 if (n%2 == 0)
。如果失败,它将转到 if
语句 if (n%2 != 0)
。如果这也是 false,那么它将下降到最后的 else
部分,并且它将到达方法的末尾而不返回任何内容。
当然,你我看着它会说,那是不可能的,因为n%2 == 0
或n%2 != 0
必须为真。但这需要我们做一些推理。 Java 编译器不进行这种推理,因此无法确定这两个 if
表达式中的一个一定为真。
所以解决这个问题也需要你改变
} else if(n%2 != 0) {
至
} else {
无论如何您都不需要 if
——它完全是多余的。如果我们到达这里,我们已经知道 n%2 != 0
.
public static int F(int n) {
if (n > 1) {
if (n % 2 == 0) {
n = n / 2;
System.out.println(n);
return F(n);
} else if (n % 2 != 0) {
n = 3 * n + 1;
System.out.println(n);
return F(n);
} else {
System.out.println("Complete");
return 0;
}
}
错误 missing return statement 是因为你没有指定 return statement if n is less than 1.. 那么,这个函数 return 如果提供的 参数 n 小于 1,如 0。您应该在 else 语句中指定它,甚至用单个 return 语句如 return -1 在函数的最后一行;