我试图读取由单个项目和回车之间的空格分隔的文件中的值。在Java中使用扫描仪来解析文本文件或控制台输入,并遇到错误
所以文本文件是一样的东西
1 lunch box 3.99
2 jelly donuts 1.99
4 cases of beer 36.99
2 chess boards 24.99
有了这些值我试图构造对象......那么该对象将被弥补了数量,上线的第一件事,一个名字 - 线上的第二件事,价格是线上的最后一件事。所以构造是这样的:
product(int x, String name, float price) {
this.x = x;
this.name = name;
this.price = price;
}
我的问题是我已经编写了扫描仪正在运行陷入困境试图解析一切,当的方式。所以我收到一个java.util.InputMismatchException。如果我使用类似的算法:
if (scannerRef.hasNextInt())
arraylistRef.intThing = scannerRef.nextInt();
if (scannerRef.hasNext())
arraylistRef.name = scannerRef.next();
if (scannerRef.hasNextFloat())
arrayListRef.price = scannerRef.nextFloat();
那么代码的方式,我把它放在每个单独的原始或字符串在自己的对象,而不是通过整条生产线循环,然后将它添加到一个对象
我的希望这是有道理的。感谢您阅读,如果你现在正在阅读。
我所关心的代码的主要部分是这样的: 我在这里用上述类型的算法注释掉了所有内容到同一个对象,但运行到java.util.InputMismatchException游戏中
// loop while there is text to read
while (s1.hasNextLine()) {
Product p = new Product(p.quantity = s1.next);
//if (s1.hasNextInt())
p.quantity = s1.nextInt();
// else
p.name = s1.next(); // to get strings
// else if(s1.hasNextFloat())
p.price = s1.nextFloat();
// now add the line to the product arraylist
foo.add(p);
}
尼克是正确的,但是,我真的会推荐使用双倍的钱。浮动不如双倍精确,最终可能导致平衡问题。 – 2013-05-08 01:12:19
谢谢你@nickecarlo。是的,这可能工作。我没有想过这个。 '饭盒'之间有空间的事实呢?这不会使解析带有多个单词的产品更加困难吗? – 2013-05-08 01:12:47
@ user2085446它会的。如果你担心这个问题,然后在逗号分割,你可以将文件改为CSV。这是一个非常简单的方式让你走,但我相信有办法让它工作。我可以从头脑中想出一些粗糙的方法(例如将字符串与中间的空格连接起来),但这会使所有这些都变得混乱。 – 2013-05-08 01:15:27