Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoTouchElement异常错误_Java - Fatal编程技术网

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();
}