8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

当从 Java 中的文件读取时 hasNextDouble() 返回 false

Elad Kalif 1月前

16 0

我正在尝试从文件中读取矩阵数据,但无法找出问题所在。这是不起作用的代码:protected static double[][] getArrayFromFile(int new_rows, int

我正在尝试从文件中读取矩阵数据,但无法找出问题所在。以下是无法正常工作的代码:

        protected static double[][] getArrayFromFile(int new_rows, int new_cols,
            String file) 
        {
        double[][] A = new double[new_rows][new_cols]; 
        try {
            Scanner fileReader = new Scanner(new File(file));
            for (int i = 0; i < new_rows; i++)
                for (int j = 0; j < new_cols; j++)
                {
                if(fileReader.hasNextDouble())
                    A[i][j] = fileReader.nextDouble();
                else
                    {
                    System.out.println("missing numbers in file");
                    break;
                    }
                }

            fileReader.close();
            }
        catch (FileNotFoundException e1) {
            e1.printStackTrace();
            }

        return A;
        }

此方法接收一个文件以及要读取的列数和行数。它一点也不可靠,但如果您正确输入参数,它应该可以工作。在测试它并打印矩阵后,我只得到零。我已经将绝对路径传递给数据文件,并且我很确定程序正在找到它,因为当我传递不存在的路径时它会显示错误消息。运行调试时,我发现它 fileReader.hasNextDouble() 总是返回 false,因此没有读取任何数字。为什么会这样?我有另一种从字符串读取文件的方法,它看起来就像这样并且运行完美。
这里是:

protected double[][] getArrayFromString(int new_rows, int new_cols,
            String numbers)
        {
        Scanner stringReader = new Scanner(numbers);
        stringReader.useDelimiter("[^\\p{Alnum},\\.-]");

        double[][] A = new double[new_rows][new_cols]; 

        for (int i = 0; i < new_rows; i++)
        for (int j = 0; j < new_cols; j++)
            {
            if(stringReader.hasNextDouble())
                A[i][j] = stringReader.nextDouble();
            else
                {
                stringReader.close();
                throw new RuntimeException("\n"+""
                        + "missing numbers on string");
                }
            }

        stringReader.close();
        return A;
        }

编程了很长时间 C ,但刚刚开始使用 JAVA,所以也许我做了一些愚蠢的事情。有人能看出我犯的错误吗?


编辑

这是我正在尝试读取的文件:

 23.0       0.84825
188.5       6.87425
269.0       10.9595
321.0       13.08725
帖子版权声明 1、本帖标题:当从 Java 中的文件读取时 hasNextDouble() 返回 false
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Elad Kalif在本站《file》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我使用代码设置了一个测试程序,并使用输入文件中的数据复制粘贴运行了 4 行 2 列。它运行完美。这支持了 Locale 假设。

  • 考虑到 getArrayFrom 文件本身会打开文件,Locale 建议似乎更有可能位于您认为的文件中的位置。

    我建议 fileReader.useLocale(Locale.US); 在 fileReader 的声明和初始化之后立即插入该行。这会强制将 Locale 设置为小数点为 \'.\' 的语言环境,这是解析数据所必需的。

    或者,找出默认语言环境中的小数点,然后编辑文本文件以使用该小数点。

  • rr- 1月前 0 只看Ta
    引用 4

    问题解决了。我还需要将 java.util.Locale 添加到导入的包中。谢谢大家的回答!

返回
作者最近主题: