导致java.lang.IndexOutOfBoundsException的函数

时间:2014-09-13 20:58:29

标签: java arraylist

嗯,我需要做的就是: - 我也把逻辑排序了(我想我有) 假设x = 1。 e是发生的事件数。如果e为0,则返回1。 否则,如果,e为1或任何奇数返回x * 2。 否则,如果,e是2或任何偶数返回x * 2(事件e2 -1的值)+ 1。 等等。 这是我的功能

    public int answer(int f) {
    int x = 1;
    int y = 0;
    if (f == 0) {
        y = x;
    } else if (f == 1) {
        y = x * 2;
    } else if (f == 2) {
        y = (x * 2) + 1;
    } else if (f % 2 == 0) {
        y = answer(f - 1) + 1;
    } else if (f % 2 != 0) {
        y = answer(f - 1) * 2;

    }

    return y;
}

现在,问题是,我可以有一个arraylist来决定事件的数量,并且必须为所有事件打印y的值。示例输入将是:

2  //number of events, this is the number of elements that would be in the arraylist.
2  // this event runs for 2 cycles. so the output would be (x * 2) + 1
3  // this event runs for 3 cycles. so the output would be ((x * 2) + 1)*2 (eventcycles-1*2)

错误消息 -

Exception in thread "main" 3
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at Solution.main(Solution.java:21)

这是让我更清楚的主要方法:

public static void main(String[] args) {

    int x = 1;
    Scanner input = new Scanner(System.in);
    int cases = input.nextInt();
    Solution soln = new Solution();
    ArrayList<Integer> casearray = new ArrayList<Integer>();
    ArrayList<Integer> ansarray = new ArrayList<Integer>();

    for (int i = 0; i < cases; i++) {
        int acase = input.nextInt();
        casearray.add(acase);
    }


    for (int elem : casearray) {
        int f = casearray.get(elem); ***//this is the error line***
        int z = soln.answer(f);
        System.out.println(z);
    }

    input.close();

}

问题是 - 为什么我得到indexoutofboundsexception?我的代码真的出了什么问题? 如果答案围绕着我的逻辑,如果它是正确的,那将是非常感激的。

2 个答案:

答案 0 :(得分:3)

for (int elem : casearray) {
    int f = casearray.get(elem); ***//this is the error line***
    int z = soln.answer(f);
    System.out.println(z);
}

你的for循环遍历casearray中的每个值,而不是通过索引。因此,当您执行casearray.get(elem)时,您尝试将该值用作索引,并且它已超出范围。

也许你的意思是:

for (int elem : casearray) {
    int z = soln.answer(elem);
    System.out.println(z);
}

答案 1 :(得分:2)

 for (int elem : casearray) {
        int f = casearray.get(elem); 
...}

elem是数组中的元素,它不是索引。但get(int index)期望索引。元素值可能大于arrayList的最大索引。这就是你犯这个错误的原因。

你只需要这样做:

 for (int elem : casearray) {             
        int z = soln.answer(elem);
        //print...
...}