簡體   English   中英

Java掃描程序對象跳過行?

[英]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.

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