无法对Arraylist进行排序

时间:2017-04-02 03:17:25

标签: java arraylist collections

尝试将输出打印为:

第一次最大

第一分钟

Second Max

第二分钟

第三马克斯......等等

这是我的代码:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;


public class Arraylist1 {
public static void main(String args[]){
 List <Integer>list= new ArrayList <Integer> ( );
 list.add(20);
 list.add(30);
 list.add(70);
 list.add(50);
 list.add(60);
 list.add(40);
 for(int i=0;i<list.size();i++) {  
  if(i%2==0){
    Object num=Collections.max(list);
    System.out.println(num);
    list.remove(num);     
  }
 else if(i%2!=0)
    {
    Object num1=Collections.min(list);
    System.out.println(num1);
    list.remove(num1);
    }
}
}
}


 70
 20
 60

为什么只打印前三个数字?

我的预期输出:

 70 20 60 30 50 40

3 个答案:

答案 0 :(得分:1)

您的问题是您的循环会一直迭代,直到到达list.size()

但是你一方面继续减小这个尺寸;但另一方面,你不断重新计算这种循环条件!

您必须将该大小分配给辅助变量(如initialSize),然后与该固定值进行比较!

答案 1 :(得分:1)

for(int i=0;i<list.size();i++)

循环条件不正确。

你不要循环6次。

您只循环3次,因为在每次迭代中从列表中删除项目时大小会发生变化。

所以你可能想要:

int max = list.size();

for(int i = 0; i < max; i++)

那就是你想把循环修复为列表中的初始条目数。

答案 2 :(得分:0)

使用每个list.remove(),列表的大小会递减。所以循环只运行3次。你可以使用while循环。

public static void main(String args[]){
    List<Integer>list= new ArrayList <Integer> ();
    list.add(20);
    list.add(30);
    list.add(70);
    list.add(50);
    list.add(60);
    list.add(40);
    int i =0;
    while(!list.isEmpty()) {  
        if(i%2==0){
            Object num=Collections.max(list);
            System.out.println(num);
            list.remove(num);
        }
        else if(i%2!=0) {
            Object num1=Collections.min(list);
            System.out.println(num1);
            list.remove(num1);
        }
        i++;
    }
}