2017-07-27 37 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()的調用,它讀取並放棄掃描器中的任何字符串。 –

+1

可能是一個循環,比如'for'或'while',你只是想讀更多的輸入,直到用戶輸入正確的東西。這不是一個真正的「重置」,只是繼續閱讀。 – markspace

回答

0

如果我理解你正確,那麼這是你正在尋找的, 如果用戶輸入invaild字符而不是int,則會拋出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

這就是我想要的,但我仍然有一個問題;即使我將** _「&& count m」_ **添加到「while」,但是當我輸入「1234」或任何大於我所設置的數字時,它仍「跳過」「while」最大值,第二次表示爲_ ** m ** _。 – Jace

+0

我有更新;現在是**「while(!isProcessed || count m)」**現在,任何數字都可以輸入,只有正確的數字才能被使用。但是如果你輸入一個非常大的數字,它不會顯示「InputMismatchException」。幫幫我? – Jace

+0

如果輸入的值大於int的範圍(在我們的例子中),則會拋出InputMismatchException。無論如何,我已經更新了我的答案,該答案顯示了一個用於檢查用戶輸入是否在0 -150範圍內的示例。如果它對你有幫助,請接受答案。 –