2

私は質問と回答の(疑似)AIインターフェースを行っています。私の「回答」クラスは一連のifステートメントです。メッセージの「a」の場合、この「b」を返します。

ネストされたifを挿入することで、さらに深みを与えたいのですが、その2番目のifは「到達不能コード」を与えています。解決するにはどうすればよいですか?私がしようとしていることを行うためのより良い方法はありますか?

メインクラス:

System.out.println("Type your message:");
String message = talkback.beginAnswers(in.nextLine());

...

beginAnswers クラス:

public String beginAnswers (String message) {

if("nothing".equalsIgnoreCase(message)) {
 return "Are you sure?";

     if("yes".equalsIgnoreCase(message)) {
       return "ok";
        }
   }

  ....

}
4

1 に答える 1

3

return最初のステートメントが原因でエラーが発生します。

return "Are you sure?";

到達した場合は、メソッドの実行を終了beginAnswers()し、呼び出し元のメソッドに制御を返します。したがって、次のコードは次のとおりです。

if("yes".equalsIgnoreCase(message)) {
    return "ok";
}

到達することはありません。

if解決策として、ネストされたステートメントを最初のステートメントから取り出すことができます。

if("nothing".equalsIgnoreCase(message)) {
    return "Are you sure?";
}
else if("yes".equalsIgnoreCase(message)) {
    return "ok";
}

また、三項演算子を使用して 1 行で全体をランプアップすることもできます。nullこれらの 2 つの条件がいずれも満たされていない場合は、次のように戻りtrueます。

return "nothing".equalsIgnoreCase(message) ? "Are you sure?" : 
       "yes".equalsIgnoreCase(message) ? "ok" : null;
/* if message == "nothing" return "Are you sure?"
   if message == "yes" return "ok"
   if message != "yes" AND message != "nothing" return null 
   P.S: '==' and '!=' are for demonstration only. Keep using the .equals() 
   method for matching strings */
于 2016-01-24T18:00:44.757 に答える