【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20 [duplicate]线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:20 [重复]
【发布时间】:2016-10-23 10:32:19
【问题描述】:

我有一份学校工作,我需要使用 int 类型数字制作数组。 我已经分配了每个值。 如果我尝试运行它,它表明存在 - 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 20.

   if (K==0) {
        Random r = new Random();
        for (i = 0; i < 20; i++)
            A[i] = r.nextInt() * 100 - 50;
    }
    else {
        for (i=0; i < 20; i++) { // It shows that problem is somewhere in 
            A[i] = A[i + 1] + K; // these 2 lines.
        }
        System.out.println("A:");
        for (i = 0; i < 20; i++)

【问题讨论】:

  • 我看不出你有多大 A 数组,但我猜它的长度为 20(其中最大索引为 19)。所以 A[i+1] 会导致最后一次迭代溢出(当 i=19 你会调用 A[19+1] )
  • @reijatsu 您的代码不完整,因此我们无法为您提供帮助

标签: java arrays int


【解决方案1】:

这意味着您尝试访问A[20],即使它不存在

i 等于 19 时,下面这行就成了问题:

A[i] = A[i + 1] + K;

在您的循环中使用 19 个而不是 20 个,应该没问题。您需要决定如何处理 A[19],因为它的值不会改变。

【讨论】:

  • int A[] = new int[20];整数 K,我;诠释C;扫描仪 sc = new Scanner(System.in);
  • 就像我说的,我已经分配并创建了数组。
  • @reijatsu:是的。您已经创建了一个数组,其有效索引为 019,包括在内。上面指出您正在尝试使用A[20],这是超出范围的。
  • 当人们回答明显是骗人的问题时也会发生这种情况。
  • 感谢大家的帮助,不胜感激。现在明白了重点。 :)
【解决方案2】:

该错误表示您正在尝试访问不存在的索引。 数组是 A[0]...[1]...[lastIndex]。 但是您正在尝试访问一个不存在的索引。

A[0]...[1]...[lastIndex]。 [anIndexThatDoesntExist]

如果您想为 A 的(最后一个)索引分配一个新值,即 A[20].. 然后执行 A[i] = A[i] + K

【讨论】:

    【解决方案3】:
        for (i=0; i < 20; i++) { // It shows that problem is somewhere in 
            A[i] = A[i + 1] + K; // these 2 lines.
    

    i=19时i+1的结果是什么?

    如果您想在循环中访问当前索引后面,您必须将循环迭代计数减少访问偏移量(在这种情况下为 1)。

    【讨论】:

      【解决方案4】:

      您正在尝试访问该行中的 A[20];

      A[i] = A[i + i] + K;
      

      这就是引发异常的原因。

      【讨论】:

      • 为了说明清楚,当 'i' 的值达到 19 时,A[i+1] 将是 A[20]。但是A[0]到A[19]只存在。
      猜你喜欢
      • 2013-12-18
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2011-07-07
      • 2016-01-27
      相关资源
      最近更新 更多