2017-07-27 3 views
1

私は新しいヒューマン学習のコードです!私は無効な文字の修正でJavaスキャナ 'リセット'が必要です

スキャナに問題がありました。無効な文字に「リセット」する必要があります。

マイコード:スキャナが数字のみを受け入れるよう

public class Lemonade { 

static int m = 150; 
private static Scanner scan; 

public static void main(String[] args) { 

    int day = 1; 

    for(int gameover = m; gameover > 0; day++) { 
    int Random = (int) (Math.random() * 100); 
    if(Random <= 25) { 
     System.out.println("Great Chance!"); 
     System.out.println("--------------------------------"); 
    } 
    else if(Random <= 50) { 
     System.out.println("Good Chance!"); 
     System.out.println("--------------------------------"); 
    } 
    else if(Random <= 75) { 
     System.out.println("Bad Chance!"); 
     System.out.println("--------------------------------"); 
    } 
    else if(Random <= 100) { 
     System.out.println("Awful Chance!"); 
     System.out.println("--------------------------------"); 
    } 

    int count = 0; 

    int none = 0; 

    scan = new Scanner(System.in); 

    System.out.println("Enter a number between 0 and " + m + "!"); 

    count = scan.nextInt(); 

    if(count >= none && count <= m) { 
     System.out.println("You entered " + count + "!"); 
     System.out.println("--------------------------------"); 
     day = day + 1; 
     m = m - count; 
     System.out.println("Day " + day); 
    } 
    else { 
     System.out.println("Enter a number between 0 and " + m + "."); 
     count = scan.nextInt(); 
    } 

    } 
} 
} 

は今、「F」のような無効な文字で「リセット」にこれを取得する方法私の質問です。

ありがとうございました!

+2

必要なのは、next()の呼び出しです。これは、ScannerからStringを読み込み、破棄します。 –

+1

おそらく 'for'や' while'のようなループは、ユーザーが正しいものを入力するまで、もっと多くの入力を読みたいと思うでしょう。それは本当に「リセット」だけではありません。 – markspace

答えて

0

正しく理解すれば、これはあなたが探しているものです ユーザがintではなくinvaildの文字を入力すると、InputMismatchExceptionがスローされます。ユーザーが整数を入力するまでループを使用することができます

import java.util.Scanner; 
import java.util.InputMismatchException; 


class Example 
{ 
    public static void main(String args[]) 
    { 
     boolean isProcessed = false; 
     Scanner input = new Scanner(System.in); 
     int value = 0; 
     while(!isProcessed) 
     { 

      try 
      { 
       value = input.nextInt(); 
     //example we will now check for the range 0 - 150 
     if(value < 0 || value > 150) { 
      System.out.println("The value entered is either greater than 150 or may be lesser than 0"); 
     } 
     else isProcessed = true; // If everything is ok, Then stop the loop 
      } 
      catch(InputMismatchException e) 
      { 
       System.out.print(e); 
     input.next(); 
      } 

     } 

    } 
} 

これはあなたが探していない場合は私に教えてください!

+0

これは私が欲しいものですが、私にはまだ1つの問題があります。私が "1234"と入力したときよりも大きい数字を入力すると、 "_" && count "_ **"を "while"に追加しても "while"をスキップします2回目に_ ** m ** _と表示されます。 – Jace

+0

私には更新があります。 while(** isProcessed || count m) "**今では、任意の数値を入力することができ、正しい数字だけが使用されます。しかし、実際に大きな数値を入力すると、 "InputMismatchException"は表示されません。助けて? – Jace

+0

入力された値がint(この場合は)の範囲より大きい場合、InputMismatchExceptionがスローされます。とにかく、ユーザーの入力が0〜150の範囲内にあるかどうかをチェックする例を示した私の答えを更新しました。それがあなたを助けたら答えを受け入れてください。 –

関連する問題