簡體   English   中英

如何在此循環中合並“僅int”輸入?

[英]How can i make incorporate a 'int only' input in this loop?

我一直在弄亂這段代碼大約一個小時,試圖在用戶輸入字符而不是數字時使其循環播放

    System.out.println("Enter level student last completed (0-3): "); 
    int level = in.nextInt();
    while (level > 3 || level < 0){
        System.out.println("Please enter a valid level!: ");
        level = in.nextInt();
    }

我想到了將!in.hasNextInt()添加到while (level > 3 || level < 0)

while (!in.hasNextInt() || level > 3 || level < 0)

但這無濟於事,因為如果輸入了字符,程序仍然會崩潰。

編輯:

    System.out.println("Enter level student last completed (0-3): "); 
    int level = 1; //in.nextInt();
    while (in.hasNextInt()==false || level > 3 || level < 0){
        in.next();
        System.out.println("Please enter a valid level!: ");
    }
    level = in.nextInt();

您可以創建一個while循環來重復請求輸入,直到獲得喜歡的輸入為止

基本解決方案

    int i;
    while(scan.hasNextInt()==false){ //keep asking until it gets something it likes
        scan.next(); //<--consume bad input, important!
        System.out.println("Only integers are valid");
    }
    i=scan.nextInt();

    System.out.println(i);

先進的解決方案

您可以將其打包為方法,當我們希望合並更多邏輯時,這將使工作更輕松

public static int getSafeInteger(){
    Scanner scan=new Scanner(System.in); //if using scanner over and over consider passing the scanner as an argument
    while(scan.hasNextInt()==false){
        scan.next();
        System.out.println("Only integers are valid");
    }
    return scan.nextInt();
}

然后我們可以在您現有的循環中使用該方法

    System.out.println("Enter level");

    Scanner scan=new Scanner(System.in);

    int level=getSafeInteger();
    while (level > 3 || level < 0){
        System.out.println("Please enter a valid level!: ");
        level = getSafeInteger();
    }

使用nextLine()並嘗試使用Integer.parseInt(String)其解析為整數。

您可以執行以下操作:

int level;
while (true) {
    if (in.hasNextInt()) {
        // now we know at least the input is a number
        if (level > 3 || level < 0) {
            // aww, it's an invalid number :(
            in.nextLine(); // clear bad input
            System.out.println("Please enter a valid level (0-3)!: ");
        } else {
            // hooray! store the input now
            level = in.nextInt();
            break; // out of the infinite loop
        }
    } else {
        // input is not a number
        in.nextLine(); // clear bad input
        System.out.println("Please enter a number!: ");
    }
}

嘗試這個:

Scanner sc = new Scanner(System.in);
int level;

System.out.printf("Enter level student last completed (0-3): "); 
while(true) {
    try {
        level = Integer.parseInt(sc.next());
        if (level < 4 && level > -1) {
            break;
        }
    } catch (Exception ex) { }
    System.out.printf("Please enter a valid level!: ");
}

您可以將級別的默認值設置為大於3並執行以下操作

            do
            {
                System.out.println("Enter level student last completed (0-3): ");
                try{
                 level = in.nextInt();
                }catch(InputMismatchException e){
                    System.out.println("Not a valid Number");
                    in.nextLine();
                }
            }while (level > 3 || level < 0);

暫無
暫無

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

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