簡體   English   中英

Java 檢查輸入是整數還是空以允許使用默認值

[英]Java check input is integer or empty to allow for default value

我目前正在嘗試制作一個相當基本的 java 程序,該程序要求用戶輸入以及是否按 Enter 鍵以提供默認值。

目前我執行此操作的代碼是

System.out.println("Please enter a port number (default 8080): ")
port = scanner.nextLine();
      if (port.isEmpty() || port.equals("8080")) {
          port = "8080";
          System.out.println("Using default port...");
      }
      else {
          System.out.println("Using new port...");
      }

我想改變它以檢查輸入(如果有的話)是一個整數,如果不是,則循環返回以再次要求輸入。 我知道它需要使用 hasNextInt 和 nextLine 的組合,但我無法弄清楚。

任何幫助,將不勝感激。

而不是搞亂 nextInt() 我建議嘗試將輸入解析為整數並在失敗時處理異常

Scanner scanner = new Scanner(System.in);
System.out.println("Please enter a port number (default 8080): ");
String port = null;
while (true) {
    port = scanner.nextLine();
    if (port.isEmpty() || port.equals("8080")) {
        port = "8080";
        break;
    } else {
        try {
            Integer.valueOf(port);
            break;
        } catch (NumberFormatException ex) {
            System.out.println("Incorrect value given, try again");
        }
    }
}
System.out.println("You have selected " + port);
scanner.close();

這將是一種選擇。 您只需要求用戶幾次輸入默認值,如果他們多次失敗,您就返回默認端口。 如果他們提供的輸入不是整數,則會拋出 InputMismatchException 並且我們告訴他們它不正確,然后我們再次嘗試或返回默認值。

值得注意的是,我們調用 Scanner#next() 來清除底層緩存以移除任何現有數據。

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int port = askForPortOr(scanner, 8080, 0, 3);

        System.out.println("port: " + port);
    }

    private static int askForPortOr(Scanner scanner, int defaultPort, int attempts, int maximumAttempts) {
        try {
            System.out.println("Please enter a port number (default 8080): ");
            return scanner.nextInt();
        } catch (InputMismatchException ime) {
            scanner.next();

            if (++attempts < maximumAttempts) {
                System.out.println("Incorrect port, please try again...");
                return askForPortOr(scanner, defaultPort, attempts, maximumAttempts);
            }
            return defaultPort;
        }
    }

輸出

Please enter a port number (default 8080): 
808o
Incorrect port, please try again...
Please enter a port number (default 8080): 
808o
Incorrect port, please try again...
Please enter a port number (default 8080): 
808o
port: 8080

您可以簡單地使用 java Regex

if (port.matches("\\d+")) {
  System.out.println("it's a natural number (positive integer)");
}

我目前正在嘗試制作一個相當基本的Java程序,該程序要求用戶輸入內容,如果用戶按回車鍵可以提供默認值。

目前,我執行此操作的代碼是

System.out.println("Please enter a port number (default 8080): ")
port = scanner.nextLine();
      if (port.isEmpty() || port.equals("8080")) {
          port = "8080";
          System.out.println("Using default port...");
      }
      else {
          System.out.println("Using new port...");
      }

我想更改它以檢查輸入(如果有)是否為整數,如果不是,則循環返回以再次請求輸入。 我知道它需要結合使用hasNextInt和nextLine,但是我無法弄清楚。

任何幫助,將不勝感激。

嘗試這個

String port;
     Scanner scanner = new Scanner(System.in);
     do {
     System.out.println("Please enter a port number (default 8080): ");
     port = scanner.nextLine();
           if (port.isEmpty() || port.equals("8080")) {
               port = "8080";
               System.out.println("Using default port...");
           }     
 }while(!port.matches("\\d*"));

暫無
暫無

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

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