0

我很难弄清楚为什么会出现此错误。当我使用驱动程序文件测试程序时,它严重失败。

这是我的代码:

import java.util.Scanner;
import java.lang.Math.*;
public class Histogram
{
private int[] arrayData;
private int[] arrayRange;
private final int LOW = 1;
private final int HIGH = 100;

    public Histogram()
     {
        int[] arrayData = new int[11];
     }

    public void getInput()
    {
        int[] arrayRange = new int[11];
        for(int count = 1; count < arrayRange.length; count++)
            {
                arrayRange[count] = count * 10;
            }
        Scanner input = new Scanner(System.in);
        System.out.println("Enter numbers from 1 to 100, Type -999 to quit.");
        int nextNumb = input.nextInt();
        while(nextNumb != -999)
        {
            if(nextNumb >= LOW && nextNumb <= HIGH)
            {
                for(int i = 0; i <= arrayRange.length; i++)
                {
                if(nextNumb > arrayRange[i] && nextNumb <= arrayRange[i+1])
                    arrayData[i]++;
                }
                nextNumb = input.nextInt();
            }
            else arrayData[10]++;
            nextNumb = input.nextInt();
        }
    }

    public String starPrint(double count)
    {
        String star = "";
        count = (Math.round(count) / 5);
        for(int i = 1; i <= count; i++)
        {
            star = star + "*";
        }

        return star;
    }

    public String toString()
    {
        String results = " Range   |   Histogram"  + "\n";
        results = results + "1 - 10 | " + starPrint(arrayData[0]) + "\n";
        results = results + "11 - 20 | " + starPrint(arrayData[1]) + "\n";
        results = results + "21 - 30 | " + starPrint(arrayData[2]) + "\n";
        results = results + "31 - 40 | " + starPrint(arrayData[3]) + "\n";
        results = results + "41 - 50 | " + starPrint(arrayData[4]) + "\n";
        results = results + "51 - 60 | " + starPrint(arrayData[5]) + "\n";
        results = results + "61 - 70 | " + starPrint(arrayData[6]) + "\n";
        results = results + "71 - 80 | " + starPrint(arrayData[7]) + "\n";
        results = results + "81 - 90 | " + starPrint(arrayData[8]) + "\n";
        results = results + "91 - 100 | " + starPrint(arrayData[9]) + "\n";
        results = results + "Outliers: " + starPrint(arrayData[10]) + "\n";
        return results;
    }
}

我相信问题出在我的 getInput 方法中,确切地说:

if(nextNumb > arrayRange[i] && nextNumb <= arrayRange[i+1])
    arrayData[i]++;

我不知道它有什么问题,尽管我是一个初学者程序员并且找不到这个特定问题的解决方案。感谢您提供的任何帮助!

4

2 回答 2

2
public Histogram()
{
   int[] arrayData = new int[11];
}

您在构造函数中隐藏了您的arrayData字段。这是创建一个与类字段同名的局部变量,对其进行arrayData初始化,然后立即丢弃它。当您稍后尝试在代码中使用该字段时,它是null. 摆脱int[]部分。

请注意,您的下一个例外将是ArrayIndexOutOfBoundsException……您应该查看您的循环;)

于 2014-01-14T21:28:52.843 回答
0

这:for(int i = 0; i <= arrayRange.length; i++) 因为你试图访问arrayRange[i]arrayRange[i+1]

不存在i = arrayRange.length-1并进一步

所以将其更改为:

for(int i = 0; i < arrayRange.length-1; i++)
于 2014-01-14T21:28:43.430 回答