有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAutil。扫描器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


共 (2) 个答案

  1. # 1 楼答案

    报告指出:

    A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.

    这意味着,当您输入带有空格的文本(如示例中的“壁炉清理包”)时,它会被拆分为3个不同的输入,每个输入通过一个sc.next()调用返回

    解决方案是将delimeter模式调整为换行:

    sc.useDelimeter("\\r?\\n");
    
  2. # 2 楼答案

    扫描仪。next()获取下一个完整的标记,后跟一个分隔符,如doumentation中所述。因为您键入了三个单词(这里的分隔符是空格),所以前三个单词

    sc.next()

    我会读每一个单词。我想你要找的是

    sc.nextLine()