-4

整数を配列に入力するときに、整数が配列の長さよりも大きい場合、範囲外の例外がスローされることに気付きました。どうしてこれなの?配列が整数値を受け入れないのはなぜですか? 配列の長さよりも大きい整数を格納する必要がある場合、これを修正するにはどうすればよいですか。

ありがとうございました!

これがコードです。5 より大きい整数を入力すると、範囲外の例外が発生します。5 未満の整数を入力すると、コードは完全に機能します。

    public class NumOfOccur
{
    static Scanner input = new Scanner(System.in);
    static int[] cards = new int[5];
    static int[] numOccurence = new int[5];
    public static void main(String[] args)
    {
        System.out.println("Enter five values: ");

        for (int i = 0; i < 5; i++)
        {
            System.out.print("Card " + (i + 1) + " : ");
            cards[i] = input.nextInt();
        }

        containsPair(cards);
    }

    public static boolean containsPair(int hand[])
    {

        for (int i = 0; i < hand.length; i++)
            numOccurence[hand[i]]++;

        for (int i = 1; i < numOccurence.length; i++)
        {
            if (numOccurence[i] > 0)
                System.out.println("The number " + i + " occurs " + numOccurence[i] + " times.");
        }

        return false;

    }
}
4

4 に答える 4

2

What you are suggesting here is wrong. An array of integers can hold any integer. When you are storing an integer into an array (or any value for that matter) you have to make sure that the index you are inserting it into is valid.

For example

//perfectly valid
int[] foo = new int[1];
foo[0] = 500;

I suspect what you are doing is something like this.

//throws index out of bounds exception
int[] foo = new int[1];
foo[500] = 500;

Note the difference here. the number inside the [] on the left side of the assignment operator indicate the index you are working with.

Based on your now posted code, your problem is here:

for (int i = 0; i < hand.length; i++)
            numOccurence[hand[i]]++;

To briefly explain what is going on.

1) you first initialize numOccurence to a length of 5 integers.
2) You are putting user input into the cards[] then you pass the cards array into into the function containsPair()
3) If the user enters a number greater than 5, lets say 7 the operation hands[i] would be 7. This would be the same as numOccurence[7] which is out of bounds

于 2013-09-15T01:47:16.557 に答える
1

コードがなければ、配列で何をしているのかを誤解しているだけだと思います。有効なインデックスにアクセスしていることを確認する必要があります。整数配列に格納できる整数に制限はありません。

// Make an array of length ten
int[] myIntArray = new int[10];
System.out.println(myIntArray.length);

// Set the first value in the array to 99: perfectly legal
myIntArray[0] = 99;
System.out.println(myIntArray[0]);

// The following line throws ArrayIndexOutOfBoundsException
myIntArray[99] = 100; // The last index in the array is only 9, not 99!
System.out.println(myIntArray[99]); // This line would also crash, for the same reason
于 2013-09-15T01:50:03.027 に答える
0

私は間違いなく質問が間違っていると確信しています。あなたはこれが不可能だと言っています

int[] anArray = new int[10];
anArray[5] = 20;

これは明らかに真実ではありません。

それがあなたの言っていることなら、バグがあるのでコードを投稿してください。

配列を大きくしたい場合は、ArrayList などを使用することを検討してください。私たちがあなたを助けることができるようにあなたのコードを投稿してください。

于 2013-09-15T01:56:25.150 に答える