Java双数组

时间:2011-11-30 17:46:51

标签: java arrays

我在使用包含浮点数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();
        }
    }
}

谢谢,我确信这不是一个难以回答的问题......我很感激你的时间。

7 个答案:

答案 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”。如果你是使用此方法搜索十进制数,那么您的文件中应该包含十进制数。)