如何将测试分数转换为数组?

时间:2014-12-06 19:11:11

标签: java arrays file io

我的任务是创建一个程序来读取.txt数字文件,确定数组的大小,重新打开.txt文件,并用文件的内容填充数组。我正在寻找一种只使用" import java.util。*的解决方案。 import java.io. *;"读取文件并构建没有其他类型导入的数组。也就是说,对我来说简单。我不知道足够的Java来使用任何花哨的东西。我不应该为阵列使用固定大小。大小必须由文件中的数字数决定。

我可能会以某种方式使用Arraylist,但我不具备保证成功的技能。这里的大多数问题是我的技能很少。这就是为什么我需要解决方案尽可能地愚蠢。

作业的全部细节:

当地一所高中正在对所有学生进行标准化考试。测试中有50个问题,学校希望您收集有关学生表现的统计数据。分数范围可以是0到50.所有分数都存储在您需要下载的文件(scores.txt)中。

从文件输入数据并将数据存储到数组中。为此,您必须让程序打开数据文件,计算文件中的元素数量,关闭文件,初始化数组,重新打开文件并将数据加载到数组中。

然后计算并输出以下统计数据:平均分数,分数模式和最高/最低分数。此外,输出分数列表和每个分数的学生数量。 (提示:您可能需要使用其他数组来存储信息。)

您的程序应使用方法编写,并且应在内部和外部进行详细记录。您的输出应使用消息框显示。

到目前为止我的主要方法的内容:

  int size, index = 0;
  int[] testscores;
  String input, output;

  input = JOptionPane.showInputDialog("Insert filename including extension.");

    File scores = new File(input);
    Scanner data = new Scanner(scores);

    while (data.hasNext() && index<testscores.length)
    {
        testscores[index] = data.nextInt();
        index++;
    }

我不想使用arraylists,因为这增加了我不具备处理技能的整体复杂程度。我需要知道如何使用我在这里设置的代码构建数组。我假设while循环应该构建数组,但我需要在手之前初始化数组,这是没有意义的。我有两个变量,如果需要我打算稍后再使用。如果我需要在main方法中添加其他东西以通过读取文件来创建具体大小(这是我认为循环可以做的),则可以使用大小。我发誓上课我没有给我资源来做这些事情。使用单行代码让Java做如此简单的事情有多难?应该有一个简单的扫描仪方法来同时完成所有这些。

以下是我现在的位置:

  int size = 0, index = 0;
  int[] testscores = new int[size];
  String input, output;

  input = JOptionPane.showInputDialog("Insert filename including extension.");

    File scores = new File(input);
    Scanner data = new Scanner(scores);

    while (data.hasNext())
    {
        size++;
    }

  while (data.hasNext())
    {
        testscores[index]   = data.nextInt();
     JOptionPane.showMessageDialog(null, testscores[index]);
        index++;
    }
  data.close();

这应该会返回很多带有数组条目的窗口,但程序会挂起。我希望这段代码可以正常工作,这样我就可以确定循环是否有效,但即使它们确实有效,我的程序也无法在不编辑第二个循环的情况下完成。

2 个答案:

答案 0 :(得分:0)

好吧,回答你问题的一部分。您应该使用ArrayList而不是Array。见https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

ArrayList没有固定的大小,Array在初始声明后就会这样做。

答案 1 :(得分:0)

最明显的方法是使用扫描仪读取文件的行,然后计算它们。假设行数(减去任何已知的头信息)是条目数,并声明该长度的数组。然后再次读取文件的行,使用nextDouble方法将每个项目作为数字,并将其存储在适当位置的数组中。

这显然不太理想,因为它要求您从磁盘读取文件两次,但它可能是最简单的实现,并且它肯定只使用您允许使用的语言结构。

编辑:如果您被允许使用ArrayLists,那就容易多了。创建双打的ArrayList。在文件上打开扫描仪,并使用while循环读取文件 - 使用扫描仪的hasNextDouble方法作为循环条件。在循环体中,使用scanner的nextDouble方法获取一个数字,并使用ArrayList的add()方法将其插入列表中。有关创建和添加到ArrayLists的详细信息,请参阅ArrayList documentation

请注意,您必须使用Double包装类,因为ArrayLists不能包含基元。但是,autoboxing将为您解决大部分问题。