簡體   English   中英

Do-while循環不等待用戶輸入?

[英]Do-while loop not waiting for user input?

我確信這是一個簡單的東西,我無法發現,我有一個while循環提示用戶輸入數組大小,這將用於程序的其余部分。 如果用戶輸入正確的輸入,程序繼續並正常工作,但如果用戶輸入錯誤的輸入...

public static void main(String[] args)
{
  // user enters up to 20 double values, stored in an array, user should enter 99999 to quit entering numbers. If user has not entered any numbers yet
  // display an error message, otherwise, display each entered value and it's distance from the average

  Scanner keyboard = new Scanner(System.in);
  int arraySize = 0;
  boolean isValid = false;

  do
  {
     isValid = true;
     arraySize = 0; // reset these values at start of each loop.

     System.out.println("Enter an array size.");
     try {
        arraySize = keyboard.nextInt();
     }
     catch(NegativeArraySizeException mistake) {
        System.out.println("Do not enter a negative number for the arrays size.");
        System.out.println();
        isValid = false;
     }
     catch(InputMismatchException mistake) {
        System.out.println("Make sure to enter a valid number.");
        System.out.println();
        isValid = false;
     }
  } while (isValid == false);

如果用戶輸入無效輸入,例如“紅色”,則捕獲塊將啟動並打印“確保輸入有效數字”。 和“輸入數組大小。” 一遍又一遍,不給用戶實際輸入任何輸入的機會。 我想重置arraySize變量會修復它,但事實並非如此。 我猜鍵盤緩沖區中有東西,但到目前為止還沒有空printlns的組合。

我聽說不應該使用Exceptions來驗證用戶輸入。 這是為什么?

無論如何,它與此問題無關,因為它是異常處理中的練習。

不使用isValid布爾變量並為輸入創建簡單代碼。

int arraySize = 0;
do {
    System.out.println("Enter a valid array size.");
    try {
        arraySize = Integer.valueOf(keyboard.nextLine());
        if (arraySize < 0) throw new NegativeArraySizeException();// for negative arry size
        break;// loop break when got a valid input
    } catch (Exception mistake) {
        System.err.println("Invalid input: " + mistake);
    }
} while (true);

你可以添加一個keyboard.nextLine(); 如果發生異常,它應該解決問題。

 try {
    arraySize = keyboard.nextInt();
 }
 catch(NegativeArraySizeException mistake) {
    System.out.println("Do not enter a negative number for the arrays size.");
    System.out.println();
    isValid = false;
    keyboard.nextLine();
 }
 catch(Exception mistake) {
    System.out.println("Make sure to enter a valid number.");
    System.out.println();
    isValid = false;
    keyboard.nextLine();
   }

請查看此修復程序是否適合您。 當您嘗試從nextInt函數獲取字符串時,掃描程序有問題。 在這里我已經獲取了字符串並解析為Integer,然后處理了數字格式異常

public static void main(String[] args) {
    // user enters up to 20 double values, stored in an array, user should enter 99999 to quit entering numbers. If user has not entered any numbers yet
    // display an error message, otherwise, display each entered value and it's distance from the average

    Scanner keyboard = new Scanner(System.in);
    int arraySize = 0;
    boolean isValid = false;

    do {
        isValid = true;
        arraySize = 0; // reset these values at start of each loop.

        System.out.println("Enter an array size.");
        try {
            arraySize = Integer.parseInt(keyboard.next());
        } catch (NegativeArraySizeException mistake) {
            System.out.println("Do not enter a negative number for the arrays size.");
            System.out.println();
            isValid = false;
        } catch (InputMismatchException mistake) {
            System.out.println("Make sure to enter a valid number.");
            System.out.println();
            isValid = false;
        } catch (NumberFormatException nfe) {
            System.out.println("Make sure to enter a valid number.");
            System.out.println();
            isValid = false;
        }

    } while (isValid == false);
}

mmuzahid幾乎就在那里。 但我還添加了一種檢查負數的方法。 嘗試這個

    Scanner keyboard = new Scanner(System.in);
    int arraySize = 0;
    boolean isValid = false;
    do {
        System.out.println("Enter a valid array size.");
        try {
            arraySize = Integer.valueOf(keyboard.nextLine());

            if (arraySize < 0) {
                System.out.println("Make sure to enter a valid positive number.");
            } else {
                break;
            }
        } catch (Exception mistake) {
            System.out.println("Make sure to enter a valid number. Error:" + mistake);
        }
    } while (true);

使用keyboard.nextLine()NumberFormatException

do {
            // more code
            try {
                arraySize = Integer.valueOf((keyboard.nextLine()));
            } catch (NegativeArraySizeException mistake) {
                // more code
                isValid = false;
            } catch (InputMismatchException mistake) {
                // more code
                isValid = false;
            } catch (NumberFormatException mistake) {
                // more code
                isValid = false;
            }
} while (isValid == false);

暫無
暫無

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

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