-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

你在这里的建议是错误的。整数数组可以容纳任何整数。当您将整数存储到数组(或任何值)中时,您必须确保将其插入的索引有效。

例如

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

我怀疑你在做什么是这样的。

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

注意这里的区别。赋值运算符左侧 [] 内的数字表示您正在使用的索引。

根据您现在发布的代码,您的问题在这里:

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

简要说明发生了什么。

1)您首先将 numOccurence 初始化为 5 个整数的长度。
2)您将用户输入放入卡片 [],然后将卡片数组传递给函数 containsPair()
3)如果用户输入大于 5 的数字,假设 7 操作hands[i]将是 7。这将是和numOccurence[7]哪个越界一样

于 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 回答
1

看过您的代码后,我认为问题在于:

首先,您的numOccurence数组的长度始终为 5,但在行中

numOccurence[hand[i]]++;

您将得到OutOfBoundsExceptionifhand[i]为 5 或更大(意味着您输入了 5 或更大的值)。

要解决此问题,您应该:

  1. 限制用户可以输入的卡值
  2. numOccurence[i]++如果您要跟踪每个牌位被抽出的次数,请划出那条线
  3. 制作numOccurence一个更长的数组,这样它就可以存储每张可能的牌出现的次数(例如,从 A 到 K 的次数为 1 到 13)。
于 2013-09-15T02:15:24.437 回答
0

我肯定这个问题是错误的。你说这是不可能的

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

这显然不是真的。

如果这就是您所说的,请发布您的代码,因为您有错误。

如果你想让你的数组更大或其他东西,你应该考虑使用 ArrayList 或类似的东西。发布您的代码,以便我们为您提供帮助。

于 2013-09-15T01:56:25.150 回答