2017-10-20 11 views
1

whileループを使用して1〜100の数字を入力する必要があり、入力すると間違った番号を入力したことをユーザーに伝える必要があります100以上の数字です。これまで私が持っていたことがあります。私はそれを実行するたびに、ユーザーの入力を求めます。入力が負または100以上の場合、無効な数値となりますが、ユーザー入力が45の場合は、0〜100の数値が有効な場合でも無効な数値と表示されます。私はそのコードの最後の部分を読んでいるとは思わない。どのようにユーザーに正しい番号を入力するよう依頼し続ける

import java.util.*; 

public class PlayOffs { 
    public static Scanner scan = new Scanner(System.in); 

    public static void main(String[] args) { 

     System.out.print("What is the % chance Team 1 will win (1-99)?: "); 
     int team1input = scan.nextInt(); 
     do { 
      while (team1input >= -1 || team1input >= 101) { 
       System.out.println("That's not between 1-99"); 
       scan.next(); // this is important! 
      } 
      team1input = scan.nextInt(); 
     } while (team1input >= 0 && team1input <= 100); 
     System.out.println("Thank you! Got " + team1input); 
    } 
} 
+2

あなたは2つのループ –

+1

を必要とする理由私は本当にまた、あなたの比較の一部が誤っている 'FOOバー123'のようなデータを提供する際 – theGleep

+0

@FrankUnderwoodインナーループは、おそらくケースを扱う表示されません。 'foo'と' bar'を処理し、 '123'を有効な数字として受け取ります。コードはおそらく:[java.util.Scannerを使用した入力の検証](https://stackoverflow.com/q/3059333) – Pshemo

答えて

0

あなたの問題は、あなたのwhileループのこの状態にある:

while (team1input >= -1 || team1input >= 101) 

45> = -1? => trueであり、それが無効なものを印刷する理由です。

実際には、このために2つのループは必要ありません。 DO-whileループは、あなたの希望する結果を取得するのに十分になります

import java.util.*; 

public class PlayOffs { 
    public static Scanner scan = new Scanner(System.in); 

    public static void main(String[] args) { 

     System.out.print("What is the % chance Team 1 will win (0-100)?: "); 
     boolean validNumber; 
     int team1input; 
     do { 
      team1input = scan.nextInt(); 
      validNumber = team1input >= 0 && team1input <= 100; 

      if (!validNumber) { 
       System.out.println("That's not between 0-100"); 
      } 

     } while (!validNumber); 
     System.out.println("Thank you! Got " + team1input); 
    } 
} 

実行出力:

%チャンスチーム1で何が(0-100)を獲得します?:-1
ですない 0-100の間0-100 の間ではありませんそれ0-100 間 ないありがとうだこと!

+0

なぜwhile(validNumber)ではなくwhile(!validNumber)ですか? –

+0

番号が**有効ではない間もループを維持したい。それは 'while(!validNumber)'がするものです。有効な番号を取得すると、ループを終了することができます。 –

+0

@LuisValdezお読みください:[誰かが私の質問に答えたときにはどうすればいいですか?](https://stackoverflow.com/help/someone-answers) –

1

あなたの比較に問題があります。
2つのループは必要ありません。
このコードは適切な場合があります。

import java.util.Random; 
import java.util.*; 

    public class PlayOffs { 
     public static Scanner scan = new Scanner(System.in); 

     public static void main(String[] args) { 

      System.out.print("What is the % chance Team 1 will win (1-99)?: "); 
      int team1input = scan.nextInt(); 
      do { 
       if(!(team1input >= 0 && team1input <= 100)) { 
        System.out.println("That's not between 1-99"); 
        scan.next(); // this is important! 
        team1input = scan.nextInt(); 
       } 

      } while (!(team1input > -1 && team1input <101)); 
      System.out.println("Thank you! Got " + team1input); 
     } 
    } 
+0

45を入力すると有効な数字ではないものが印刷されます。 ifステートメントの条件。 –

+0

U R right 私はそれを編集した。 –

関連する問題