[英]Java scanner object skipping lines?
自從我寫了任何基於Java的控制台以來,已經有一段時間了,
我在下面有這種方法,應該問我每一行,對吧? 相反,我得到一個提示,然后是三個提示。
try {
System.out.println("Please enter the product's LONG details: ");
product.setLongDetails(sc.next()); //set products long details
System.out.println("Please enter the product's SHORT details: ");
product.setShortDetails(sc.next()); //set short details
System.out.println("Please enter the product's UPC data: ");
product.setUpc(sc.next()); //set upc
System.out.println("Please enter the product's stock: ");
product.setStock(sc.nextInt());
System.out.println("Please enter the products price. ");
System.out.println("This MUST be entered with no dollar sign.");
product.setPrice(sc.nextBigDecimal());
InventoryManager.addProduct(product); //add product to database
}
我的控制台輸出如下:
Please enter the product's LONG details:
Fireplace Cleaning Package
Please enter the product's SHORT details:
Please enter the product's UPC data:
Please enter the product's stock:
BUILD STOPPED (total time: 3 minutes 5 seconds)
掃描程序僅在類聲明中初始化為:
public static Scanner sc = new Scanner(System.in); //class level scanner object for reuse.
如果我在每個對象設置方法之間調用sc.nextLine(),則它會正確提示,但會得到錯誤的信息:
Please enter the product's SHORT details:
Fire Poker
將對象顯示為:請輸入選擇: Fire
該文檔指出:
掃描程序使用定界符模式將其輸入分為令牌,默認情況下,該模式與空格匹配。
這意味着,當您輸入帶有空格的文本時(例如您的示例中的“壁爐清潔包”),它將分成3個不同的輸入,每個輸入由一個sc.next()
調用返回。
解決方案是將您的分界線樣式調整為換行符:
sc.useDelimeter("\\r?\\n");
Scanner.next()獲取下一個完整令牌,后跟定界符,如doumentation中所述。 由於您輸入了三個單詞(此處的分隔符為空格),因此前三個
sc.next()
將會閱讀每個單詞。 我想你要找的是
sc.nextLine()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.