我在比较向量时遇到了一些麻烦,方法是比较找到最小值的元素并将其放入另一个向量中,该向量将使用两个周期进行排序,特别是我一直保持ArrayIndexOutOfBoundsException。
Vector<Figure> myList = new Vector<Figure>(); //this is the vector with all the unsorted geometric shapes
Vector<Figure> listordered = new Vector<Figure>(); //the vector where i want to put them sorted
Figure x = null;
int indice = 0;
System.out.println(myList.size());
do{
for(int i=0;i<myList.size();i++) {
x = myList.get(i);
if(x.compareTo(MIN) <0)
MIN=x;
indice = myList.indexOf(MIN);
}
listordered.add(MIN);
myList.removeElementAt(indice);
System.out.println(myList.size());
}while(myList.size()!=0);
System.out.println(listordered);
我的想法是找到一个具有周期的最小值,然后将其添加到排序的向量中,并用另一个周期继续执行此操作,直到第一个向量中没有更多元素,并在每次找到新的最小元素时都将其删除。但它不起作用。
答案 0 :(得分:0)
问题在于,您的代码永远不会在外部MIN
-indice
循环的迭代之间重置do
和while
。由于代码从不更新MIN
,因此第二次迭代无意间重用了indice
的旧值,最终导致removeElementAt
中的索引超出范围异常。
解决此问题的一种方法是在进入indice
循环之前,将MIN
设置为零,将myList.get(0)
设置为for
。实际上,您应该在indice
-MIN
循环内移动do
和whole
声明,因为这是它们的适当范围。
最后,您在if
的身体上缺少大括号。这对功能没有影响,但是会导致多余的处理。
注意::我假设您正在编写自己的排序作为学习练习。否则,您应该使用Java库函数或排序集合。