2016-10-07 5 views
0

誰かが私のためにこれを見ることができるかもしれないと思っていました。私はJavaで始まったばかりですが、これは私の最初のプロジェクトですが、私は理解できないような変なバグがあります。ループのないループ?

このメソッドは、ユーザーが入力した内容に応じて、trueまたはfalseを返すことになっています。それは動作します、唯一のことは、ユーザーに二度聞いています。それは入力を受け取りますが、もう一度質問し、2番目の入力に対する評価を行います。私はそれを何と呼ぶべきかは分かりませんが、誰かが何が起こっているのかを知ることができれば、本当に感謝します!

public static boolean yesOrNo(){ 
    System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: "); 
    char c = screen.next().trim().charAt(0); 
    if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') { 
     switch (c) { 
     case 'y': return (true); 
     case 'Y': return (true); 
     case 'n': return (false); 
     case 'N': return (false); 
     } 
    } 
    else { 
     System.out.println("Invalid input, try again!!"); 
     yesOrNo(); 
    } 
    return (true); 
} 

編集:スキャナの入力は、私はちょうどクラス内のプログラムの先頭に持って

public static Scanner screen = new Scanner(System.in); 

です。私が他の入力状況で問題を起こしているようには見えません。それは何も印刷しませんが、最初に文字を取得することを見てprintステートメントを置くことはできますが、入力を2回尋ねます。私はまた、その機能の呼び出しをそれ自身に変更しようとしました。

return(yesOrNo()); 

運がありません。再帰なしで関数を再度呼び出す方法はありますか?

+0

「スクリーン」変数の定義を表示できますか?このコードは問題ありません。問題を見つけるためにyesOrNo()を呼び出す場所のように、もっと見る必要があります。 – SpacePrez

+0

あなたはそれが2回尋ねると言いますが、最初に「いいえ、入力をやり直してください。 – SpacePrez

+2

ここで再帰を使用しないでください。 –

答えて

1

他の方法では、このメソッドをもう一度呼び出しています。

 else { 
    System.out.println("Invalid input, try again!!"); 
    yesOrNo(); 
     } 
5

いいえ、あなたがyesOrNo()内部からyesOrNo()を呼び出す場所で何をしているかは、再帰です。

修正するには、次の通話から回答を返す必要があります。

else { 
    System.out.println("Invalid input, try again!!"); 
    return yesOrNo(); 
} 
0

whileここでは再帰を使用するのではなく、ループを使用できます。

public static boolean yesOrNo(){ 
    boolean run = true; 

    while(run){ 
     System.out.print("Would you like to roll again? Type 'y' for yes or 'n' for no: "); 
     char c = screen.next().trim().charAt(0); 

     if (c == 'y' || c == 'Y' || c == 'n' || c == 'N') { 
      switch (c) { 
       case 'y': return true; 
       case 'Y': return true; 
       case 'n': return false; 
       case 'N': return false; 
      } 
      run = false; 
     } 
     else { 
      System.out.println("Invalid input, try again!!"); 
     } 
    } 
    return true; 
} 
関連する問題