Java如何计算数组中有多少元素具有范围?

时间:2015-11-28 02:35:24

标签: java

所以我试图从文本文件中导入数据。这是文件的内容:

15
49 50 51 59 0 5 9 10 15 19 50 55 89 99 100

第一个数字应该代表测试分数。第二行数字包含单独的测试分数。

我正在使用BufferedReaderStringTokenizer来读取数据并将其放入int[] anArray;。变量int number1 = Integer.parseInt(s1);应该保存第一行文本(所有测试分数的总量)。然后我初始化anArray = new int[number1];以将所有测试分数存储在其中。我成功地完成了这项任务。因为所有数组都从[0]开始,所以我初始化变量int readnumber = number1 -1; 这是初始化int[] anArray;

的代码块
int x = readnumber;
    for (x = readnumber; x >= 0; x--)
    {
      s2 = st.nextToken();
      anArray[x] = Integer.parseInt(s2);
      countarray[x] = Integer.parseInt(s2);


      //System.out.println ("    Token is: " + s2);
      //System.out.println (anArray[x]);
    }

我应该创建一个可以通过int[] anArray;并计算测试分数的数组。我应该将这些测试分数保存在一个范围内。 0 - 9,10 - 29,30 - 39,40 - 49,50 - 59,60 - 69,70-79,80 - 89,90 - 100.

这是一种统计。我应该将int[] anArray;的各个值分开,并将它们放入新数组中的上述范围内。所以我创建了数组countarray[x] = Integer.parseInt(s2);。我制作了一个代码,根据输入找到最小和最大范围值。每次循环经过int[] anArray;并发现数组的[x]值适合范围的最小值和最大值时,应该将1添加到数组int[] countarray; 1}}然后移动到下一个。这就是它如何找到适合特定范围参数的int[] anArray;个值的方式。该循环周围的其他代码只是从输入中确定范围参数,因此它们是灵活的,而不是"硬连线"进入代码。

我不能使这个程序工作。我认为这只是int[] countarray;语法中的错误。你们可以调查一下吗?所有其他循环和计算必须保持不变。

Here is my main code:
import java.io.*;
import java.util.*;

public class GradesHistogram
{
  public static void main(String[] args)throws java.io.IOException
  {

    String s1;
    String s2;
    BufferedReader br = new BufferedReader (new FileReader ("grades.in.txt"));
    s1 = br.readLine();
    System.out.print(s1);
    System.out.println("\n");
    int number1 = Integer.parseInt(s1);
    //System.out.println("Number1 is " +number1);
    int[] anArray;           
    anArray = new int[number1];   
    anArray[0] = 1; 
    int[] countarray;
    countarray = new int[number1];   
    countarray[0] = 1; 

    System.out.println(s1);
    s2 = br.readLine();
    System.out.println(s2);
    StringTokenizer st = new StringTokenizer (s2);

    int readnumber = number1 -1;
    int x = readnumber;
    for (x = readnumber; x >= 0; x--)
    {
      s2 = st.nextToken();
      anArray[x] = Integer.parseInt(s2);
      countarray[x] = Integer.parseInt(s2);


      //System.out.println ("    Token is: " + s2);
      //System.out.println (anArray[x]);
    }
    int histogrammin = 0;
    int histogrammax = 0;
    x = readnumber;
    for (int histogramrows = 0; histogramrows < 10; histogramrows++)
    {

      histogrammin = histogramrows * 10;

      if (histogrammin == 90)
      {
      histogrammax = histogrammin + 10;


      }
      else 
      {
        histogrammax = histogrammin + 9;
        for (x = 0; x < 14; x++)
        {
          if (histogrammin <= anArray[x] && anArray[x] <= histogrammax)
          {
            countarray[x]++;
            System.out.println("countarray = "+countarray[x]);
          } 
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您已将数据正确读入anArray,错误与最终for循环有关。为什么不迭代等级范围而不是迭代等级范围,并将它们分类到一个区间?

由于它的作业,你需要尝试重写那个循环,我们不会为你做这件事。继续使用System.out.println来帮助您调试程序,并一步一步地完成。