2011-07-20 12 views
0

今日は何時間も働いているので、何かばかげているかもしれませんが、この時点で私はちょっと盲目で、この行動の説明を探しています。2同じ機能で射撃を返しますか?

私はこの問題の例を作った私が見つけた解決策は解決策ではありません。

問題:私はshotCountとして1を、カウントダウンには9を渡します。 私はデバッグ時に結果を返します。実行すると最初に表示され、戻り値2を実行しますが、elseも実行すると決定します。最終的には-1

public int getNextShot(int shotCount, int Countdown) 
    { 
     if ((shotCount == 1) && (Countdown != 10)) return 2; 
     else if (shotCount == 0) return 1; 
     else return -1; 
    } 

を返すが、私はこの(同じパラメータ)を行う場合、それは動作します:

public int getNextShot(int shotCount, int Countdown) 
    { 
     int res = -2; 
     if ((shotCount == 1) && (Countdown != 10)) res = 2; 
     else if (shotCount == 0) res = 1; 
     else res = -1; 
     return res; 
    } 

私はここで何かが足りないのですか?

ありがとうございました:)

+5

なぜあなたは波括弧を使用していません? –

+0

このメソッドを呼び出すコードを投稿し、なぜ "2戻り値を返す"と思うのですか(これは少なくとも記述されているようにJavaでは不可能です)。 – jkraybill

+2

ブレークポイントを適切な場所に設定していますか?デバッガでコードの実行を継続している間に、誤ってreturn文をスキップして、実際に関数の2回目の呼び出しを取得している可能性があります。リターンを自分の行に分割し、すべての行にブレークポイントを設定してみてください。 (そして、Olegが言ったように、中括弧を使用してください!これは*常に*それらを含む理由の1つです) –

答えて

4

私はあなたが間違っていると思います。

時にEclipseのデバッガは、メソッド呼び出しの最後の行にジャンプしたように動作しますが、正しい値を返します。

たとえば、コードをコピーして貼り付けただけで、うまくいきました。以下のコードは2を印刷します。

public class AA { 

     public static void main(String[] args) { 

       System.out.println(getNextShot(1, 9)); 

     } 

     public static int getNextShot(int shotCount, int Countdown) 
    { 
     if ((shotCount == 1) && (Countdown != 10)) return 2; 
     else if (shotCount == 0) return 1; 
     else return -1; 
    } 
} 
+1

これは通常、コンパイラがいくつかの最適化を行うために起こります(eclipse-javaについてはわかりませんが、アンドロイドにとっては非常に一般的です)。 – Voo

+0

私はあなたが正しいと思うが、最高の答えを与える前にもう一度テストをしたい。私は明日それを実行します。私はあなたが言っていることを見たので、私はあなたが実際に2番目の戻り値を取る時があると思うので、あなたに知らせてください。 –

+0

また、私が示した第2のケースのようなコードが使用されている場合、この奇妙な動作は表示されず、複数のリターンを使用する場合にのみ見えます。 –

0

このコードはOKです。私はこれを実行すると:

public static int getNextShot1(int shotCount, int Countdown) { 
    if ((shotCount == 1) && (Countdown != 10)) { 
     return 2; 
    } else if (shotCount == 0) { 
     return 1; 
    } else { 
     return -1; 
    } 
} 
public static int getNextShot2(int shotCount, int Countdown) { 
    int res = -2; 
    if ((shotCount == 1) && !(Countdown == 10)) { 
     res = 2; 
    } else if (shotCount == 0) { 
     res = 1; 
    } else { 
     res = -1; 
    } 
    return res; 
} 
public static void main(String[] args) throws KeyStoreException, ParseException { 
    System.out.println(getNextShot1(1, 9)); 
    System.out.println(getNextShot2(1, 9)); 

} 

を私は、コンソール上の

2 
2 

を得る:) 第二の機能は、この(finalキーワード)のようになります。

public static int getNextShot2(int shotCount, int Countdown) { 
    final int res; 
    if ((shotCount == 1) && !(Countdown == 10)) { 
     res = 2; 
    } else if (shotCount == 0) { 
     res = 1; 
    } else { 
     res = -1; 
    } 
    return res; 
} 
関連する問題