【问题标题】:JAVA ArrayIndexoutofBoundException issueJAVA ArrayIndexoutofBoundException 问题
【发布时间】:2015-05-27 20:49:59
【问题描述】:

一个完美的数字是它的因子的总和,不包括它自己。第一个完美数是 6,因为 6 = 1 + 2 + 3。第二个完美数是 28,等于 1 + 2 + 4 + 7 + 14。第三个是 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248。在每种情况下,数字都是除自身之外的所有因素的总和。

编写一个名为 henry 的方法,它接受两个整数参数 i 和 j,并返回第 i 个和第 j 个完美数的和。例如,henry (1, 3) 应该返回 502,因为 6 是第一个完美数,496 是第三个完美数,6 + 496 = 502。

我已经做到了这一点:: 但这在这一行显示 ArrayIndexOutOfBoundException temp[index] = j; 请帮我解决这个 OutOfBound 问题,谢谢..

public static int henry  (int a, int b){

    List<Integer> arr = new ArrayList<Integer>();
    int henryNumber = 0;

        for(int i=4;;i++){
            List<Integer> temp = new ArrayList<Integer>();
            int sum = 0;

            for(int j = 1; j<i; j++){
                if(i%j == 0 ) { temp.add(j); }
            }

            for (Integer item : temp) { sum+=item; }

            if(sum == i) arr.add(i);

            if(arr.size() == b) {
                henryNumber = arr.get(a-1) + arr.get(b-1);
                break;
            }
        }

    return henryNumber;
}

【问题讨论】:

  • 请发布确切的例外情况。它应该告诉你j 的值。另外,请提供调用的参数,这会产生异常。
  • 当然索引越界了。数组长度为0!没有索引可能在范围内!你为什么不使用这个列表?
  • 据我所知,您的数组始终为空 - 所以没有数组访问表达式不会抛出异常...
  • 我是 java 新手,不知道如何准确地使用我使用数组的列表,
  • 不要编辑更新代码的问题。相反,请保持原样并在您的解决方案中发布答案。

标签: java arrays


【解决方案1】:
int[] temp = {};

这会将 temp 设置为 0 个元素的数组。因此,当您尝试访问 index 为 0 的 temp[index] 时,它超出了范围,因为数组甚至没有单个元素

您需要通过以下操作创建一个包含 x 个数字元素的数组:

int[] temp = new int[x];

然后您可以将每个索引的值设置为您想要的任何值。

【讨论】:

    【解决方案2】:

    数组一经创建就具有固定长度,并且该长度不能更改。

    int[] temp = {};
    

    这会创建一个空数组。它的长度为零。你不能改变它,你不能向它添加任何项目。

    temp[index] = j;
    

    这试图在temp 数组中放入一些东西。然而,正如我所说,数组是空的,它的长度为零,所以index 的任何值都会超出范围。

    使用List(在您的源代码中已注释掉)将允许您创建不断增长的元素集合。或者,您必须为数组考虑一个合适的大小,该大小将容纳您将使用的所有元素,并在创建数组时使用该大小。

    【讨论】:

      【解决方案3】:

      尝试做

          int[] temp=new int[i];
      

      而不是

          int[] temp={};
      

      我以前从未分配过这样的数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-08
        相关资源
        最近更新 更多