运行可执行文件时,我不断收到IndexOutOfBoundsException。错误之前的第一个名称和min_cost打印。我知道它可能正在尝试访问无法访问的索引。我无法弄清楚出了什么问题。
for(int j = 0; j <= no_comps-1; j++){
String line2 = in.nextLine();
Scanner compline = new Scanner(line2);
int k = j-1;
String co_name = compline.next();
int x = compline.nextInt();
int y = compline.nextInt();
int val = compute(tot_boxes,my_boxes,x,y);
List <String> names = new ArrayList <String>(500);
names.add(j,co_name);
List <Integer> min_cost = new ArrayList <Integer>(500);
min_cost.add(j,val);
while(j > 1){
if(min_cost.get(j) > min_cost.get(k)){
Collections.swap(names, j, k);
Collections.swap(min_cost, j, k);
}
else{
}
}
System.out.println(names.get(j)+ " " +min_cost.get(j));
提前感谢您的帮助!
编辑:
DHL 46
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:612)
at java.util.ArrayList.add(ArrayList.java:426)
答案 0 :(得分:1)
编辑现在您已发布堆栈跟踪,请在列表大小为{{1时尝试访问第二个元素if (min_cost.size()==0)
时检查1
}}
我建议你在0
之外宣布Lists
:
for loop
并使用里面的列表变量来访问值。
现在正在发生的是每次执行循环时都要创建新的List <String> names = new ArrayList <String>(500);
List <Integer> min_cost = new ArrayList <Integer>(500);
for (...) {
// Your code
}
。问题从Lists
的值开始。您再次创建新的j=2
并分配值。
但是对于Lists
,您的j=2
变为真,您尝试比较
if (j>1)
您已将if(min_cost.get(j) > min_cost.get(k))
初始化为:
k
对于int k = j-1;
:
j=2
k=1
- &gt; min_cost.get(k)
但是,由于您在min_cost.get(1)
内创建了新的Lists
,因此该值不存在。
因此,它会抛出for loop
。
答案 1 :(得分:0)
为什么要在循环中重新创建名称和min_cost对象?无论你添加到ArrayList中的是什么,都会在循环的每次迭代中消失。我猜你试图调用min_cost.get(k)
时会发生异常。尝试将这些行放在for循环之上:
List <String> names = new ArrayList <String>(500);
List <Integer> min_cost = new ArrayList <Integer>(500);