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

this: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 に答える