我在使用包含浮点数2.1和4.3的文本文件设置并将值放入数组时遇到了问题,每个数字都用空格分隔 - 下面是我得到的错误:
线程“main”中的异常java.util.NoSuchElementException
import java.util.*;
import java.io.*;
public class DoubleArray {
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(new FileReader("mytestnumbers.txt"));
double [] nums = new double[2];
for (int counter=0; counter < 2; counter++) {
int index = 0;
index++;
nums[index] = in.nextDouble();
}
}
}
谢谢,我确信这不是一个难以回答的问题......我很感激你的时间。
答案 0 :(得分:1)
我建议您在使用之前立即打印index
的值;你应该很快发现问题。
答案 1 :(得分:1)
您的文件似乎没有得到好的值。
Oli对你的索引有问题也是正确的,但是我会尝试这个来验证你是否从你的文件中获得了双打:
String s = in.next();
System.out.println("Got token '" + s + "'"); // is this a double??
double d = Double.parseDouble(s);
编辑:我部分回来了......
你根本没有令牌。这是下一个双重因素给你的异常:
InputMismatchException - if the next token does not match the Float
regular expression, or is out of range
NoSuchElementException - if the input is exhausted
IllegalStateException - if this scanner is closed
答案 2 :(得分:1)
在调用next *()方法
之前,应始终使用hasNext *()方法 for (int counter=0; counter < 2; counter++) {
if(in.hasNextDouble(){
nums[1] = in.nextDouble();
}
}
但我认为你没有做对,我宁愿
for (int counter=0; counter < 2; counter++) {
if(in.hasNextDouble(){
nums[counter] = in.nextDouble();
}
}
NoSuchElementException
方法@see javadoc 引发了{p> nextDouble
答案 3 :(得分:0)
我不明白你在循环中想要做什么?
for (int counter=0; counter < 2; counter++) {
int index = 0;
index++; <--------
nums[index] = in.nextDouble();
}
您声明index = 0然后将其递增为1然后再使用它。
你为什么不写int index = 1;直接?
因为每次循环运行时声明为零,然后将值更改为1。 要么你应该在循环中声明它。
答案 4 :(得分:0)
每次循环进行迭代时,它都会声明变量索引,然后使用index++
增加索引。而不是使用索引,使用计数器,如下所示:num [counter] = in.nextDouble()
。
答案 5 :(得分:0)
您应该在for循环之外初始化index
。
int index = 0;
for (int counter=0; counter < 2; counter++)
{
index++;
nums[index] = in.nextDouble();
}
您的索引在for循环的每次迭代开始时都设置为零。
编辑: 您还需要检查以确保您仍然有输入。
int index = 0;
for (int counter=0; counter < 2; counter++)
{
if(!in.hasNextDouble())
break;
index++;
nums[index] = in.nextDouble();
}
答案 6 :(得分:0)
检查 mytestnumbers.txt 文件,确保您尝试扫描的数据格式正确。你得到的例外意味着它不是。
请注意in.nextDouble()
将搜索由空格分隔的双数字。换句话说,“4.63.7”不等于“4.6 3.7” - 空间是必需的。 (我不记得我的头脑,但我相信nextDouble()
只会搜索包含小数点的数字,所以我不相信“4”等于“4.0”。如果你是使用此方法搜索十进制数,那么您的文件中应该包含十进制数。)