尝试将输出打印为:
第一次最大
第一分钟
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
答案 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++;
}
}