2017-06-20 12 views
1

私はコーディングにかなり初心者で、 "do while loops"で遊んでいて忙しいです。私のコードはおそらく恐ろしいですし、私がやろうとしていることをするための1000の良い方法がありそうですとにかく。do while loop Java

私はmainメソッドを使い、次にもう一度やり直したい場合は1から10までの数字を選択するように2つの方法を試しています。

ユーザーにyes/noを入力するまで実行するコードが表示されますが、コードが実行されなくなり、その理由がわかりません。次のように

public static void main(String[] args) { 
    chooseNum(); 

} 

public static boolean chooseNum() { 
    int number = 4; 
    do { 
     System.out.println("Enter a number 1 to 10"); 
     int userNum = in.nextInt(); 
     if (number == userNum) { 
      System.out.println("You chose the correct number!"); 
      return tryAgain(); 
     } else if (number != userNum) { 
      System.out.println("You chose the incorrect number!"); 
      return tryAgain(); 
     } else 
      System.out.println("invalid Response"); 
    } 
    while (false); 
    return false; 
} 

public static boolean tryAgain(){ 

     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return chooseNum(); 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
    }else 
     return false; 
    } 
} 

と私の出力は次のとおりです。

Enter a number 1 to 10 
1 
You chose the incorrect number! 
Try again? yes/no 

Process finished with exit code 0 

私は入力yesまたはnoに私のためにそれ以上、それを得るように見える傾けます。

私はこれが基本的なことを知っています。私はおそらく哀れみを感じますが、どんな助けもありがたいです。

たぶん、別の新人は誰かを助け:)

おかげでたくさんの彼らのチャンスを得ることができます!

+0

期待される出力は何ですか? –

+0

それは私に "はい"か "いいえ"を入力するオプションを与えるべきです。はいの場合、ループをもう一度実行し、別の番号を選択します。いいえ、コードを終了します。 –

+1

'... while(false)'ではなく 'do {...} while(true)'を試してください。 –

答えて

0

nextLine()の代わりにnext()を使用し、intを読み込み、\nを追加して値を送信するためです。スキャナはこれを入力として扱います。 next()は、以前に入力した\nを無視し、予想どおりに入力します。

+0

ありがとう!できます:) –

-1

ああ、 "nextLine" 落とし穴...

あなたは1を入力すると、STDINは1\n\rが含まれています。 nextInt()を呼び出すと、1をポップして\n\rをSTDINストリームに残します。次の入力を取得するためにnextLine()を呼び出すと、次に\n\rに読み込まれ、\n\rはINストリームを汚染しているので空の文字列を返します。 next()を代わりに使用すると、\n\r(およびその他の空白)は無視され、STDINの次の単語が表示されます。 (nextIntコールから\n\rをクリアするためにnextLine()を2回呼び出すこともできます)

これはdo-whileを使用する正しい方法です。

public static void main(String[] args) { 
    chooseNum(); 
} 

public static void chooseNum() { 
    int number = 4; 
    do { 
     System.out.println("Enter a number 1 to 10"); 
     int userNum = in.nextInt(); 
     if (number == userNum) { 
      System.out.println("You chose the correct number!"); 
     } else if (number != userNum) { 
      System.out.println("You chose the incorrect number!"); 
     } else 
      System.out.println("invalid Response"); 
    } 
    while (tryAgain()); 
} 

public static boolean tryAgain(){ 
    do { 
     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return true; 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
     }else 
      System.out.println("Invalid response."); 
     } 
    } while(true); 
} 
0

メソッド内にスキャナの新しいインスタンスを作成するだけでnextLineエラーを回避できます。 chooseNumとtryAgainで新しいScannerを宣言することでコードを編集しました。これはバッファリングされた入力による問題を回避します。私はこれが役立つことを願っています

import java.util.Scanner; 

public class dowhile { 
    public static void main(String[] args) { 
     chooseNum(); 
    } 

    public static boolean chooseNum() { 
     Scanner in = new Scanner(System.in); 
     int number = 4; 
     do { 
      System.out.println("Enter a number 1 to 10"); 
      int userNum = in.nextInt(); 
      if (number == userNum) { 
       System.out.println("You chose the correct number!"); 
       return tryAgain(); 
      } else if (number != userNum) { 
       System.out.println("You chose the incorrect number!"); 
       return tryAgain(); 
      } else 
       System.out.println("invalid Response"); 
     } 
     while (false); 
     return false; 
    } 

    public static boolean tryAgain(){ 
     Scanner in = new Scanner(System.in); 
     System.out.println("Try again? yes/no"); 
     String response = in.nextLine(); 
     if (response.equalsIgnoreCase("yes")){ 
      return chooseNum(); 
     }else if (response.equalsIgnoreCase("no")){ 
      return false; 
     }else 
      return false; 
    } 
} 
0

return tryAgain();行を実行すると、chooseNum()メソッドが終了します。それはreturn文の結果です。