簡體   English   中英

無限循環使用掃描儀 hasNext 方法

[英]Infinity while loop on using scanner hasNext method

我為一家餐廳創建了一個 JDBC 項目......問題是它會無限循環......我不知道該怎么做,我已經研究了幾天。 我得到的唯一解決方案是掃描器hasNext方法,但它也不起作用!!!

package com.restaurant.orders;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("WELCOME TO UR RESTAURANT");
        System.out.println("PLEASE, PLACE UR ORDER: ");
        ManageOrders.PlaceOrder();
        System.out.println("ANYTHING ELSE???");
        Scanner scanner=new Scanner(System.in);
        boolean c=true;
        while(true) {
            System.out.println("1. CancleOrder");
            System.out.println("2. CancleDish");
            System.out.println("3. ReplaceDish");
            System.out.println("4. DisplayOrderDetails");
            System.out.println("5. Nothing, Thank you!!");
            if(scanner.hasNextInt()) {
                int ch=scanner.nextInt();
                switch(ch) {
                    case 1:ManageOrders.CancleOrder();break;
                    case 2:ManageOrders.CancleDish();break;
                    case 3:ManageOrders.ReplaceDish();break;
                    case 4:ManageOrders.DisplayorderDetails();break;
                    case 5:c=false;break;
                }
            }
            if(c==false) {
                break;
            }
            else {
                continue;
            }
        }
        scanner.close();
    }
}

您需要以這種方式獲取用戶輸入:

package com.restaurant.orders;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("WELCOME TO UR RESTAURANT");
        System.out.println("PLEASE, PLACE UR ORDER: ");
        ManageOrders.PlaceOrder();
        System.out.println("ANYTHING ELSE???");
        Scanner scanner = new Scanner(System.in);
        boolean c = true;
        while(true) {
            System.out.println("1. CancleOrder");
            System.out.println("2. CancleDish");
            System.out.println("3. ReplaceDish");
            System.out.println("4. DisplayOrderDetails");
            System.out.println("5. Nothing, Thank you!!");
            
            int ch = scanner.nextInt();
            switch(ch) {
                case 1:ManageOrders.CancleOrder();break;
                case 2:ManageOrders.CancleDish();break;
                case 3:ManageOrders.ReplaceDish();break;
                case 4:ManageOrders.DisplayorderDetails();break;
                case 5:c=false;break;
            }
            
            if(c==false) {
                break;
            }
            else {
                continue;
            }
        }
        scanner.close();
    }
}

循環變得無限,因為不知何故在輸入中出現了一個非整數值,因此hasNextInt()總是false
將預期輸入的類型更改為String並使用hasNext() / next()讀取字符串值可能是有意義的。
此外,代碼可能會得到改進:

  • switch語句缺少default情況;
  • if/else語句是多余的,可以刪除;
  • while循環不應該是無限的,它應該檢查c的狀態:
Scanner scanner=new Scanner(System.in);
boolean run = true;
while (run) {
    System.out.println("1. CancelOrder");
    System.out.println("2. CancelDish");
    System.out.println("3. ReplaceDish");
    System.out.println("4. DisplayOrderDetails");
    System.out.println("5. Nothing, Thank you!!");
    if (scanner.hasNext()) {
        String ch = scanner.next();
        switch(ch) {
            case "1": ManageOrders.CancleOrder(); break;
            case "2": ManageOrders.CancleDish();  break;
            case "3": ManageOrders.ReplaceDish(); break;
            case "4": ManageOrders.DisplayorderDetails(); break;
            case "5": run = false; break;
            default:  System.out.println("Use digits from 1 to 5 please"); break;
        }
    }
}
System.out.println("Bye");

暫無
暫無

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

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