嗯,我需要做的就是: - 我也把逻辑排序了(我想我有) 假设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?我的代码真的出了什么问题? 如果答案围绕着我的逻辑,如果它是正确的,那将是非常感激的。
答案 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...
...}