【问题标题】:How do I make an array from a file containing numbers in Java?java - 如何从包含Java数字的文件中创建一个数组?
【发布时间】:2013-12-23 04:56:34
【问题描述】:

我对 java 很陌生,我有一个项目来制作一个程序,该程序读取一个包含数字列表的文件并计算它们。我想在读取文件后创建一个数组,但似乎无法使用我在 makeArray 方法中创建的数组'scores[]'。有人可以告诉我如何解决这个错误吗?我相信这与范围有关,我只是无法弄清楚。另外,我知道列表可以代替数组工作,但我不能在这个项目中使用。谢谢! 附言对不起,如果我的代码很丑

import java.io.*;
import java.util.*;
class GradeFiles {
    public static void main(String[] args) 
            throws FileNotFoundException {
        Scanner console = new Scanner(System.in);
        Scanner input = promptUser(console);
        for(int i = 0; i<= scores.length-1; i++) {
            double[] printArray = scores[i];
            System.out.print(printArray);
        }

    }


    public static Scanner promptUser(Scanner console) 
        throws FileNotFoundException {
        Scanner isThere = null;
        while(isThere == null) {
            System.out.print("Enter name of file: ");
            String fileName = console.next();
            try {
                isThere = new Scanner(new File(fileName));
            } catch (FileNotFoundException e) {
                System.out.print("File Not Found. ");
            }
        }
        System.out.print("");
        return isThere;
    }


    public static double[] makeArray(Scanner input) {
        int length = 0;
        while(input.hasNext()) {
            double a = input.nextDouble();
            length++;
        }   
        double[] scores = new double[length-1];
        while(input.hasNext()) {
            for(int i = 0; i <= length - 1; i++) {
                double num = input.nextDouble();
                scores[i] = num;
        }


    }
    return scores;
}   

}

【问题讨论】:

  • 嗯,你的错误到底是什么?

标签: java arrays file scope project


【解决方案1】:

您将转到文件的末尾以尝试查找需要存储的双精度值的数量,以便您可以决定数组的长度。所以当你再次使用 输入.hasNext();它返回 null 因为你已经在文件的末尾了。

如果您不确定要读取多少个数字,可以使用 arrayList 来读取数字。如果你愿意,你可以将它转换回数组

 public static double[] makeArray(Scanner input) {
    int length = 0;

    ArrayList<Double> list = new ArrayList<Double>();
    while(input.hasNext()) {                           
            list.add(input.nextDouble());           
    }
    double[] scores = new double[list.size()];

    int i = 0;
    for (double e : list)  
    scores[i++] = e;    

   return scores;

}

【讨论】:

    【解决方案2】:

    查看您编写的 makeArray 方法。在第一个循环中,您将扫描仪指针前进到文件的末尾。

    如果您尝试读取额外的数据,将不会再有更多数据 (next())。

    最简单的解决方案是在完成第一个循环后重建扫描仪并传递相同的文件。

    【讨论】:

    • 谢谢!只有一个问题:我在哪里重建这个扫描仪?在我的程序中或更早的 makeArray 方法中?
    • 你应该在开始第二个循环之前重建它。我会将文件路径保存为静态变量,并在循环开始之前创建一个新的 Scanner(filepath)
    【解决方案3】:

    makeArray 将始终返回一个空数组。在您浏览input.hasNext() 后,您已经使用了所有输入。第二个 while 循环将立即退出,因为没有更多的输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 2019-12-28
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多