Testing...

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 }

 

posted on 2013-08-08 23:17  左思  阅读(731)  评论(1)    收藏  举报

导航

Testing...