使用nextLine和next

时间:2013-10-20 08:24:29

标签: java

我在使用nextLine()读取文本文件时遇到问题。之前,我尝试使用.next()使用这种文本文件,它工作正常。

2
3333
CookingRange
50 450.00 850.00
4444
CircularSaw
150 45.00 125.00

现在我想使用nextLine()读取文件中的输入来读取该行,即使它在字符串之间有空格也是如此。

2
3333
Cooking Range
50 450.00 850.00
4444
Circular Saw
150 45.00 125.00

我遇到了这种错误

http://i.stack.imgur.com/CHfGp.png

基本上我的代码看起来像这样

public class console {
    public static void main(String[] args) throws IOException {
        Scanner inFile = new Scanner(new FileReader("items.in"));

        //products

        int itemCount = inFile.nextInt();
        Vector<item> pList = new Vector<item>();

        double totalProfitForItem = 0.0;
        double totalSellingvalueForItem =  0.0;
        double totalAmount = 0.0;
        int totalStock = 0;

        String itemID;
        String itemName;
        int pcsInStore;
        double manufPrice;
        double sellingPrice;
        int j;

        for (int i = 0; i < itemCount; i++) {

            itemID = inFile.nextLine();
            itemName = inFile.nextLine();
            pcsInStore = inFile.nextInt();
            manufPrice = inFile.nextDouble();
            sellingPrice = inFile.nextDouble();

            item s = new item(itemID, itemName, pcsInStore, manufPrice, sellingPrice, totalSellingvalueForItem, totalProfitForItem);
            pList.addElement(s);

            totalAmount += totalSellingvalueForItem;
            totalStock += pcsInStore;
        }


        for( j = 0; j < pList.size(); j++) {
            System.out.printf("%5s %5s  %5.2f %.2f \n", pList.elementAt(j).getItemID(), pList.elementAt(j).getItemName(), pList.elementAt(j).totsell(), pList.elementAt(j).totprof());
            totalSellingvalueForItem = pList.elementAt(j).totsell();
            totalAmount += totalSellingvalueForItem ;
        }

        System.out.println("\n");
        System.out.println("Total Amount of Inventory: " + totalAmount +"0");
        System.out.println("Number of Items in the Store: " + totalStock);    
    }    
}

2 个答案:

答案 0 :(得分:1)

那是因为nextDouble / nextInt仅读取 double / int值,而不会读取'\n' / nextLine您在读取号码后按,因此将在nextLine中使用。

这方面的一个解决方案是在“真实”之前添加另一个'\n',以“吞下”nextLine,以便您可以在第二个'\n'中读取实际值。

关于InputMismatchException,这个:

  

由扫描程序抛出,表示检索到的令牌没有   匹配预期类型的​​模式

由于上面提到的内容,可能是nextIntnextDouble中{{1}}被读取的结果。

答案 1 :(得分:1)

nextDoublenextInt分别仅读取double或int值,但会忽略每行末尾的不可见“\ n”。因此,当您继续阅读下一个项目时,它会尝试将“\ n”作为int或double读取,从而导致InputMismatchException。一个解决方案是在读取一个数字并丢弃该值(不将其存储在一个变量中)后执行.nextLine(),以便读取“\ n”并在将来忽略它。