Java NoTouchElement异常错误
我似乎在让我的代码在这里正常运行时遇到了一些问题。它应该做的是从一个文本文件中读取,并在每一行找到一个项目的名称、数量和价格,然后格式化结果。这里比较棘手的一点是,项目的名称由两个单词组成,因此这些字符串必须与数量整数和价格双精度字符串区分开来。虽然我能够让它工作,但我遇到的问题是,在文本文件的最末端,就在最后一个项目的价格之后,有一个单独的空间。这给了我一个Java NoTouchElement异常错误,java,Java,我似乎在让我的代码在这里正常运行时遇到了一些问题。它应该做的是从一个文本文件中读取,并在每一行找到一个项目的名称、数量和价格,然后格式化结果。这里比较棘手的一点是,项目的名称由两个单词组成,因此这些字符串必须与数量整数和价格双精度字符串区分开来。虽然我能够让它工作,但我遇到的问题是,在文本文件的最末端,就在最后一个项目的价格之后,有一个单独的空间。这给了我一个java.util.noTouchElement异常:null,我似乎无法越过它。有人能帮我想出一个解决办法吗?错误出现在.next()中
java.util.noTouchElement异常:null
,我似乎无法越过它。有人能帮我想出一个解决办法吗?错误出现在.next()中的thename=thename+“”+上代码>
您需要确保Name quantity price
字符串的格式正确。字符串中可能没有足够的标记。要检查名称是否有足够的标记,请执行以下操作:
while (!in.hasNextInt())
{
thename = thename + " ";
if (!in.hasNext())
throw new SomeKindOfError();
thename += in.next();
thename = thename.trim();
}
您不必抛出错误,但应该有某种代码根据需要正确处理此问题。问题在于内部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();
}
在调用next()之前,需要检查是否有更多令牌。
while (in.hasNext()) {
thename = thename + " " + in.next();
thename = thename.trim();
name = thename;
quantity = in.nextInt();
price = in.nextDouble();
}