list 的remove方法该如何使用
// 原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。那怎么解决这个问题呢?
//
// 方式一:倒过来遍历 for (int j = listInfo.size()-1; i > =0; i--)
//
// 方式二: 在listInfo.remove(info); 后面加一句i--;
//
// ok,问题得到了解决!
1 package com.qianfeng.homework; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.util.ArrayList; 7 import java.util.Collections; 8 import java.util.List; 9 10 public class Task04 { 11 12 public static List<Hou> list = new ArrayList<Hou>(); 13 14 public void sleep() { 15 String s = ""; 16 for (int i = 0; i < 200; i++) { 17 s += "sdklgjdfklgj"; 18 System.gc(); 19 } 20 21 } 22 23 public static void main(String[] args) throws IOException { 24 Hou mon1 = new Hou("张三", 0); 25 Hou mon2 = new Hou("李四", 0); 26 Hou mon3 = new Hou("王五", 0); 27 Hou mon4 = new Hou("赵六", 0); 28 list.add(mon1); 29 list.add(mon2); 30 list.add(mon3); 31 list.add(mon4); 32 System.out.println("======开始投票====="); 33 boolean flag = false; 34 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 35 String s = ""; 36 Task04 task04 = new Task04(); 37 task04.checkPiao(); 38 39 while (!flag) 40 41 { 42 System.out.print("请输入班长候选人代号(数字0结束):"); 43 s = br.readLine(); 44 try { 45 46 int n = Integer.parseInt(s); 47 flag = task04.settle(n - 1); 48 49 } catch (NumberFormatException e) { 50 System.out.println("输入有误,请重新选择."); 51 } 52 } 53 54 } 55 56 public boolean settle(int n) { 57 if (n == -1) { 58 checkPiao(); 59 return suan(); 60 } 61 62 try { 63 list.get(n).setPiao(list.get(n).getPiao() + 1); 64 65 return false; 66 } catch (Exception e) { 67 System.out.println("选票无效,请输入正确候选人的编号。"); 68 return false; 69 } 70 71 } 72 73 private void checkPiao() { 74 for (int i = 0; i < list.size(); i++) { 75 System.out.println(i + 1 + ":" + list.get(i)); 76 } 77 78 } 79 80 // 原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。那怎么解决这个问题呢? 81 // 82 // 方式一:倒过来遍历 for (int j = listInfo.size()-1; i > =0; i--) 83 // 84 // 方式二: 在listInfo.remove(info); 后面加一句i--; 85 // 86 // ok,问题得到了解决! 87 // 88 89 public boolean suan() { 90 Collections.sort(list); 91 // Collections.reverse(list);尼玛 在comparable中已经反转了 在这怎么还能反转。。。。。。 92 for (int i = 1; i < list.size(); i++) { 93 94 if (list.get(i).getPiao() < list.get(0).getPiao()) { 95 list.remove(i); 96 i--; 97 // System.out.println("----------------->" + list.size()); 98 } 99 100 } 101 102 if (list.size() > 1) { 103 System.out.println("由于有人得票相同,请再次进行投票:"); 104 checkPiao(); 105 return false; 106 } else { 107 System.out.println("投票最终结果," + list.get(0).getName() + "同学,最后以" 108 + list.get(0).getPiao() + "票当选班长!"); 109 return true; 110 } 111 112 } 113 }
浙公网安备 33010602011771号