我似乎在让代码在这里正常运行时遇到了一些麻烦。这应该做的是它应该从文本文件中读取并找到每行上项目的名称,数量和价格,然后格式化结果。这里棘手的一点是项目的名称由两个单词组成,因此这些字符串必须与数量整数和价格双倍区分开来。虽然我能够使这个工作,但我遇到的问题是在文本文件的最末端有一个单独的空间,就在最后一个项目的价格之后。这给了我一个java.util.NoSuchElement Exception: null
,我似乎无法超越它。有人可以帮我找出解决方案吗?错误发生在thename = thename + " " + in.next();
while (in.hasNextLine())
{
String thename = "";
while (!in.hasNextInt())
{
thename = thename + " " + in.next();
thename = thename.trim();
}
name = thename;
quantity = in.nextInt();
price = in.nextDouble();
}
答案 0 :(得分:0)
您需要确保Name quantity price
字符串格式正确。字符串中可能没有足够的令牌。要检查名称是否有足够的令牌:
while (!in.hasNextInt())
{
thename = thename + " ";
if (!in.hasNext())
throw new SomeKindOfError();
thename += in.next();
thename = thename.trim();
}
您不必抛出错误,但您应该根据自己的需要使用某种代码来正确处理此问题。
答案 1 :(得分:0)
问题出在内部while
循环的逻辑中:
while (!in.hasNextInt()) {
thename = thename + " " + in.next();
}
在英语中,这表示“虽然不一个int可用,但请阅读下一个标记”。该测试无助于检查下一步操作是否成功。
您没有检查是否有下一个令牌可供阅读。
考虑将您的测试更改为使操作安全的测试:
while (in.hasNext()) {
thename = thename + " " + in.next();
thename = thename.trim();
name = thename;
quantity = in.nextInt();
price = in.nextDouble();
}