【发布时间】:2021-09-14 04:07:27
【问题描述】:
import java.util.*;
class stockbuysell{
//Function to find the days of buying and selling stock for max profit.
public static void main(String []args){
int A[] = {100,180,260,310,40,535,695};
ArrayList<ArrayList<Integer>> al = stockBuySell(A,7);
}
static ArrayList<ArrayList<Integer> > stockBuySell(int A[], int n) {
// code here
// buy = 0;
//sell = 1
ArrayList<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>();
int flag = 0;
int idx = 0;
for(int i=1;i<n;i++){
if(i==n-1 && flag==1){
al.get(idx).add(i);
flag = 0;
}
if(flag == 0 && A[i]>A[i-1]){//
al.add(new ArrayList<Integer>());
al.get(idx).add(i-1);
flag = 1;
}
if(flag == 1 && A[i]<A[i-1]){//
al.get(idx).add(i-1);
flag = 0;
idx++;
}
}
for(int i=0;i<al.size();i++){
System.out.println(al.get(i).get(0)+" "+al.get(i).get(1));
}
return al;
}
}
我不知道哪里出错了。编译成功,运行时显示:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at stockbuysell.stockBuySell(stockBuySell.java:32)
at stockbuysell.main(stockBuySell.java:6)
【问题讨论】:
-
我认为这对你有好处,如果你调试它。这将帮助您更好地理解它。你想在代码中做什么?
-
al.get(i).get(0)是罪魁祸首。从视觉上看,这是您发布的第 32 行。 al 的第 i 个元素是一个空数组。 for 循环中的 3 个 if 语句不保证添加任何内容。 -
不确定你的算法是做什么的,但问题是最后一次循环。它设置flag=0但不增加
idx,并且紧接着它会向arraylist添加一个新元素,但idx仍然引用之前的条目,并且没有添加到最后一个arraylist -
在最后一个 for 循环中从
al.size()中减去一个单位:for(int i=0;i<al.size()-1;i++)...