if()
while()
またはfor()
ステートメント内で使用されるreturnステートメントに関して質問があります。次のメソッドでわかるように、I return
が文字列値であることを期待しています。問題は、return
ステートメントブロック内でif
ステートメントを使用すると、コンパイラがエラーmissing return statement
。
public String myMethod()
{
if(condition)
{
return x;
}
}
もちろん、メソッドヘッダーをvoid
に変更し、System.out.println
の代わりにreturn
。しかし、これは正しい方法ですか?私は何かが欠けていますか?
どんな助けも大歓迎です。
Returnステートメントをif
、while
、またはfor
ステートメントに配置すると、値を返す場合と返さない場合があります。これらのステートメントの内部に入らない場合、そのメソッドは何らかの値(nullの可能性がある)を返す必要があります。これを確実にするために、コンパイラはif
、while
、またはfor
の後にあるこのreturnステートメントを書くように強制します。
しかし、あなたがif
/else
ブロックを書き、それらのそれぞれがリターンを持っている場合、コンパイラはif
またはelse
のいずれかが実行され、メソッドは値を返します。そのため、今回はコンパイラーはあなたを強制しません。
if(condition)
{
return;
}
else
{
return;
}
これは、関数needsが値を返すためです。 myMethod()
を実行し、それがif(condition)
に入らないとどうなるか想像してみてください。コンパイラーは、関数のすべての可能な実行で何を返すかを知る必要があります
Java documentation:
定義:メソッド宣言に戻り型がある場合、メソッドの最後にreturnステートメントがなければなりません。 returnステートメントが存在しない場合、returnステートメントが見つからないというエラーがスローされます。
このエラーは、メソッドに戻り値の型がなく、voidを使用して宣言されていない(つまり、誤って省略された)場合にもスローされます。
あなたの問題を解決するために行うことができます:
public String myMethod()
{
String result = null;
if(condition)
{
result = x;
}
return result;
}
if condition
はfalseを返すため、空を返します。それ以外の場合は何も返しません。
public String myMethod()
{
if(condition)
{
return x;
}
return ""
}
コンパイラは、それらのifブロックに到達するかどうかわからないため、エラーが発生します。
それは不正な構文です。 not an optional変数を返すことです。メソッドで指定した型の変数を返さなければなりません。
public String myMethod()
{
if(condition)
{
return x;
}
}
事実上、I promiseすべてのクラスがこのメソッド(public)を使用でき、常にString(String)を返すと約束しています。
その後、私の条件が真である場合、私はxを返すと言っています。まあそれはあまりにも悪いです、あなたの約束にはIFはありません。 myMethodは常に文字列を返すと約束しました。たとえ条件が常に真であったとしても、コンパイラはそれが偽である可能性があると仮定しなければなりません。そのため、すべての条件が失敗した場合に必ず、任意の条件の外にある非voidメソッドの最後にリターンを配置する必要があります。
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //or whatever the default behavior will be if all of your conditions fail to return.
}
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;
}
参考までに:
Ifに行かないと、戻るものが何もないので、戻りを逃すからです。 :)
する必要があります:
public String myMethod()
{
if(condition)
{
return x;
}
return y;
}
これは、文字列を返しますif条件がtrueの場合のみ。
public String myMethod()
{
if(condition)
{
return x;
}
else
return "";
}
MyMethod()が文字列値を返す方法。条件がfalseの場合、myMethodは何を返しますか。 ansはnoですので、nullまたはfalse条件で文字列値を返すように定義する必要があります
public String myMethod() {
boolean c=true;
if (conditions) {
return "d";
}
return null;//or some other string value
}
これを試して:
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //returns empty string
}
public String myMethod() // it ALWAYS expects a String to be returned
{
if(condition) // will not execute always. Will execute only when condition is true
{
return x; // will not be returned always.
}
//return empty string here
}