2016-02-07 73 views
0

所以它已經有一段時間,因爲我真的寫了任何基於java的控制檯,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

+0

你是如何初始化掃描儀''sc''? – f1sh

+0

它被聲明爲類變量。我將添加初始化到問題,給我一秒鐘。另外,我只是在每次調用之間使用sc.nextLine()進行測試,並且可能已經修復了它,但是我沒有完全確定沒有檢查數據文件 –

回答

1

documentation狀態:

掃描儀打破了它的投入使用定界符模式,默認情況下與空白匹配。

這意味着,當你輸入用空格文本(如「壁爐清潔包」在你的例子),它被分成3個不同的輸入,每個由sc.next()一個調用返回。

解決的辦法是你的分隔符的圖案調整到新行:

sc.useDelimeter("\\r?\\n"); 
+0

這很好用。非常感謝你 –

+0

我想補充一點,在(System.In)之後,我可以在初始化調用結束時使用.useDelimeter(「\\ r?\\ n」),所以我不必重置分隔對方法。 –

+0

我很高興它適用於您的目的。在這種情況下,你可能會考慮接受我的回答:) – f1sh

0

Scanner.next()主罰下一個完整標記後跟一個分隔符如doumentation描述。既然你鍵入三個字(這裏的分隔符是一個空格),前三

sc.next()

會讀每一個這些話。我認爲你正在尋找的卻是

sc.nextLine()