java开发实战经典(第⼆版)P45212-10
12.10  有⼀个班采⽤民主投票⽅法推选班长,班长候选⼈共4位,每个⼈姓名及代号分别为“张三 1;李四 2;王五 3;赵六 4”。程序操作员将每张选票上所填的代号(1、2、3或4)循环输⼊电脑,输⼊数字0结束输⼊,然后将所有候选⼈的得票情况显⽰出来,并显⽰最终当选者的信息。
先定义Person类:
1package book;
2
3public class Person implements Comparable<Person>{
4 private String name;
5 private int id;
6 private int count;
7 public Person() {
8  super();
9 }
10 public Person(int id,String name,int count) {
11  super();
12  this.name = name;
13  this.id = id;
14  unt = count;
15 }
16 public String getName() {
17  return name;
18 }
19 public void setName(String name) {
20  this.name = name;
21 }
22 public int getId() {
23  return id;
24 }
25 public void setId(int id) {
26  this.id = id;
27 }
28 public int getCount() {
29  return count;
30 }
31 public void setCount(int count) {
32  unt = count;
33 }
34 @Override
35 public int compareTo(Person p) {
36  unt&unt) {
37  return -1;
38  }else unt&unt) {
39  return 1;
40  }else {
41  return 0;
42  }
43
44 }
45}
然后定义专门处理从键盘接收数据的类InputData:
2import java.io.BufferedReader;
3import java.io.IOException;
4import java.io.InputStreamReader;
5public class InputData {
6 InputStreamReader input = new InputStreamReader(System.in);
7 BufferedReader buf = new BufferedReader(input);
8 public int getInt(String msg,String err) {
9  int num = 0;
10  boolean flag = true;
11  while(flag) {
12  System.out.println(msg);
13  String str = "";
14  try {
15    str = adLine();
16  }catch(IOException e) {
17      e.printStackTrace();
18  }
19  if(str.matches("^\\d$")) {
20    num = Integer.parseInt(str);
21    flag = false;
22  }else {
23    System.out.println(err);
24  }
25  }
26  return num;
27 }
28}
然后定义操作类Operate:
4 private Person per[] = new Person[] {new Person(1,"张三",0),
5  new Person(2,"李四",0),new Person(3,"王五",0),new Person(4,"赵六",0),};
6 private InputData input = new InputData();
7 private boolean flag = true;
8 public Operate() {
9  System.out.println("张三【0票】\n李四【0票】\n王五【0票】\n赵六【0票】");
10  while(this.flag){
11  this.vote();
12  }
13  this.show();
14  sult();
15 }
16 public void show() {
17  for(int i = 0;i<per.length;i++) {
18  System.out.println(this.per[i].getId()+":"+
19  this.per[i].getName()+":【"+this.per[i].getCount()+"】票");
20  }
21 }
java编程开发高清pdf22 public void result() {
23  java.util.Arrays.sort(per);
24  if(per[0].getCount()>per[1].getCount()) {
25  System.out.println(per[0].getId()+"号:"+per[0].getName()+
26    "同学最终以:"+per[0].getCount()+"票当选班长,⼤家祝贺");
27  }else if(per[0].getCount()==per[1].getCount()&&per[1].getCount()!=per[2].getCount()) {
28  System.out.println("【"+per[0].getName()+"】同学和【"+per[1].getName()
29    +"】同学票数相等同为最⾼票,⿇烦⼤家重选⼀次!");
30  }else {
31  System.out.println("超过两个以上候选⼈的票数相等,请⼤家重新再选!");
32  }
33 }
34 public void vote(){
35  int ch  = Int("请输⼊候选⼈代号(数字0结束):"," 此选票⽆效,请重新输⼊!\n");
36  switch(ch) {
37  case 0:{
38  flag = false;
39  break;
40  }case 1:{
41  this.per[0].setCount(this.per[0].getCount()+1);
42  break;
43  }case 2:{
44  this.per[1].setCount(this.per[1].getCount()+1);
45  break;
46  }case 3:{
47  this.per[2].setCount(this.per[2].getCount()+1);
48  break;
49  }case 4:{
50  this.per[3].setCount(this.per[3].getCount()+1);
51  break;
52  }default:{
53  System.out.println("此选票⽆效,请重新输⼊");
54  }
55  }
56 }
57 }
最后写测试类Test:
4 public static void main(String args[]) {
5  new Operate();
6 }
7
8}
运⾏结果:
1张三【0票】
2李四【0票】
3王五【0票】
4赵六【0票】
5请输⼊候选⼈代号(数字0结束):
61
7请输⼊候选⼈代号(数字0结束):
81
9请输⼊候选⼈代号(数字0结束):
101
11请输⼊候选⼈代号(数字0结束):
122
13请输⼊候选⼈代号(数字0结束):
143
15请输⼊候选⼈代号(数字0结束):
164
17请输⼊候选⼈代号(数字0结束):
185
19此选票⽆效,请重新输⼊
20请输⼊候选⼈代号(数字0结束):
21hello
22此选票⽆效,请重新输⼊!
23
24请输⼊候选⼈代号(数字0结束):
250
261:张三:【3】票
272:李四:【1】票
283:王五:【1】票
294:赵六:【1】票
301号:张三同学最终以:3票当选班长,⼤家祝贺