首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JAVA使用.compareTo对一个向量进行排序,并填充另一个向量

JAVA使用.compareTo对一个向量进行排序,并填充另一个向量
EN

Stack Overflow用户
提问于 2019-03-22 04:12:21
回答 1查看 126关注 0票数 1

通过比较元素找到最小值并将其放入另一个使用两个循环排序的向量中,我遇到了一些问题,特别是我一直使用ArrayIndexOutOfBoundsException。

代码语言:javascript
复制
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);

我的想法是用一个循环找到最小值,然后将它添加到排序后的向量中,然后在另一个循环中继续这样做,直到第一个向量中没有更多的元素,并在每次找到新的最小元素时将其删除。但是它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 04:19:08

问题是您的代码永远不会在外部do - while循环的迭代之间重置MINindice。由于代码从不更新MIN,第二次迭代无意中重用了indice的旧值,最终导致removeElementAt中出现索引越界异常。

解决这个问题的一种方法是在进入for循环之前将indice设置为0,将MIN设置为myList.get(0)。实际上,您应该将indiceMIN声明移到do - whole循环中,因为这是它们的正确作用域。

最后,if的主体周围缺少大括号,这对功能没有影响,但会导致冗余处理。

注:,我假设您正在编写自己的sort作为学习练习。否则,您应该使用Java库函数或对集合进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档