我对if()
while()
或for()
语句中使用的返回语句有疑问。
正如您在以下方法中看到的那样,期望I return
为String值。
问题是,如果我在return
语句块中使用if
语句,编译器将返回错误missing return statement
。
public String myMethod()
{
if(condition)
{
return x;
}
}
当然,我可以将方法标题更改为void
,然后使用System.out.println
代替return
。但这是正确的方法吗?我错过了什么吗?
非常感谢任何帮助。
答案 0 :(得分:8)
如果您将return语句放在if
,while
或for
语句中,那么它可能会返回值,也可能不会返回值。如果它不会进入这些语句,那么该方法也应返回一些值(可能为null)。为了确保这一点,编译器将强制您编写此返回语句,该语句位于if
,while
或for
之后。
但是如果您编写if
/ else
块并且每个块都返回其中,则编译器知道if
或else
将获得执行和方法将返回一个值。所以这次编译器不会强迫你。
if(condition)
{
return;
}
else
{
return;
}
答案 1 :(得分:3)
这是因为函数需要来返回一个值。想象一下,如果你执行myMethod()
会发生什么,并且它不会进入if(condition)
你的函数会返回什么?编译器需要知道在函数的每次可能执行中返回什么
检查Java文档:
定义:如果方法声明具有返回类型,那么必须 是方法结束时的return语句。如果退货 语句不存在丢失的return语句错误。
如果方法没有返回类型,也会抛出此错误 并且没有使用void宣布(即,它是错误的 中省略)。
您可以解决问题:
public String myMethod()
{
String result = null;
if(condition)
{
result = x;
}
return result;
}
答案 2 :(得分:2)
尝试使用,好像if condition
返回false,因此它将返回空,否则无法返回。
public String myMethod()
{
if(condition)
{
return x;
}
return ""
}
因为编译器不知道是否会到达任何块if,所以它会给你一个错误。
答案 3 :(得分:2)
非法语法。返回变量 可选。您必须返回您在方法中指定的类型的变量。
public String myMethod()
{
if(condition)
{
return x;
}
}
你实际上在说,我保证任何类都可以使用这个方法(公共),我保证它总会返回一个String(String)。
然后你说如果我的情况属实,我将返回x。那太糟糕了,你的承诺中没有IF。你承诺myMethod总是会返回一个字符串。即使你的条件总是如此,编译器也必须假设它有可能是假的。因此,您总是需要在任何条件之外的非空方法结束时返回一个JUST IN CASE,所有条件都失败。
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //or whatever the default behavior will be if all of your conditions fail to return.
}
答案 4 :(得分:0)
仅当 条件为真时,才会返回字符串 。
public String myMethod()
{
if(condition)
{
return x;
}
else
return "";
}
答案 5 :(得分:0)
如果condition
为false,则必须添加一个return语句。
public String myMethod() {
if(condition) {
return x;
}
// if condition is false you HAVE TO return a string
// you could return a string, a empty string or null
return otherCondition;
}
供参考:
答案 6 :(得分:0)
myMethod()应该如何返回一个String值。如果条件为false,myMethod会返回什么内容? ans不是,所以你需要在false条件中定义return null或一些字符串值
public String myMethod() {
boolean c=true;
if (conditions) {
return "d";
}
return null;//or some other string value
}