簡體   English   中英

如何使用 nextInt(Java 掃描器)處理字符串輸入

[英]How to handle String inputs with nextInt (Java scanner)

我的代碼如下:

Scanner scan = new Scanner(System.in);
boolean valid_input = false;

    while (valid_input == false) {
        try {
            int num_input = scan.nextInt();
            if ((num_input >= 5) && (num_input <= 10)){
                valid_input = true;
                no_of_letters = num_input;
            }
        } catch (java.util.InputMismatchException e) {}
        if (valid_input == false){
            System.out.println("Invalid Input");
            System.out.println("Please enter a number between 5 and 10");
        }
    }
    
    scan.close();

當它接受一個數字時,它會按我的預期執行,每次輸入一個時都會檢查輸入,直到它在可接受的范圍內得到一個。

但是當輸入一個不是整數的字符時,它會停止等待輸入並一遍又一遍地打印錯誤消息。

這是正在發生的事情:

  1. 你運行scan.nextInt(); 並輸入字母c
  2. 掃描儀無法讀取c ,因為它不是int ,所以它保留在其輸入管道的前面。 它沒有超過 char c ,而是拋出一個異常,打印出您提供的文本
  3. 然后代碼返回到while循環,因為valid_input尚未變為true 然后,當掃描儀嘗試讀取其管道中的下一個輸入時, c仍然存在......參見上面的步驟“2”......無限循環。

那么你需要做什么?

見上面@PM 77-1 的評論

使用 nextLine() (而不是 nextInt()) 后跟 parseInt();

所以這可能是這樣的:

import java.util.Scanner;

public class ScannerQ {
    public static void main(String[] args)
    {
        int no_of_letters = 0;
        Scanner scan = new Scanner(System.in);
        boolean valid_input = false;

        while (valid_input == false) {
            try {
                String next = scan.nextLine();
                int num_input = Integer.parseInt(next);
                if ((num_input >= 5) && (num_input <= 10)){
                    valid_input = true;
                    no_of_letters = num_input;
                }
            } catch (NumberFormatException  e) { //note that this is the type of exception thrown by parseInt()
                System.out.println("Invalid Input - the input needs to be a number");
                continue;
            }
            if (valid_input == false){
                System.out.println("Invalid Input");
                System.out.println("Please enter a number between 5 and 10");
            }
        }

        scan.close();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM