功能描述:
有一个班级采用民主投票的方法推选班长,班长候选人共4位,每个人姓名及代号分别为张三 1,李四 2,王五 3,赵六 4。程序操作员将每张选票上所填的代号(1、2、3、4)循环输入电脑,输入数字0结束输入,然后将所有候选人的得票情况显示出来,并显示最终当选者的信息
具体要求:
1),输入数据前,显示候选人信息
2),循环接收键盘输入的班长候选人代号,0结束
3),每次接收验证是否有效,如果输入的不是0,1,2,3,4这五个数之一,显示错误信息,继续等待输入
4),结束后显示所有人候选人信息并输出当选者的信息
Student类 实现comparable接口:
import java.util.Arrays; import java.util.Scanner; class Student implements Comparable<Student> { // 实现comparable接口用作排序 private String name; // 姓名 private int num; // 代号 private int ticket = 0; // 得票 public Student(String name, int num) { this.setName(name); this.setNum(num); } public void setName(String name) { this.name = name; } public void setNum(int num) { this.num = num; } public String getName() { // 取得姓名 return name; } public int getTicket() { // 取得票数 return ticket; } public int getNum() { // 取得代号 return num; } public void addTicket() { // 得票加1 ticket++; } public void ticketToZero() { // 得票清0 ticket = 0; } public String toString() { // 覆写toSring() return name + "【" + ticket + "】"; } public int compareTo(Student s) { // 覆写compareTo() if (this.ticket >= s.ticket) return -1; else if (this.ticket < s.ticket) return 1; else return 0; } }
主方法main:
public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); // scanner接收控制台数据 String tips = "请输入班长候选人代号(数字0结束):"; String err = "此选票无效,请输入正确的候选人代号!"; Student stu[] = { new Student("张三", 1), new Student("李四", 2), new Student("王五", 3), new Student("赵六", 4) }; for (int i = 0; i < stu.length; i++) // 输出候选人信息 System.out.println((i + 1) + ":" + stu[i]); System.out.print(tips); String temp = ""; // 接收键盘输入 boolean flag = true; // 判断是否有最大选票 while (flag) { while (true) { // 接收选票 if ((temp = in.next()).matches("^\\d$")) { // 用正则表达式判断输入是否为单个数字 if (Integer.parseInt(temp) > 0 && Integer.parseInt(temp) <= 4) { for (int i = 0; i < stu.length; i++) { // 遍历stu增加选票 if (stu[i].getNum() == Integer.parseInt(temp)) stu[i].addTicket(); } System.out.print(tips); continue; // 继续接收选票 } if (Integer.parseInt(temp) == 0) // 0退出 break; } System.out.println(err); // 输入错误,重新输入 System.out.print(tips); continue; }//结束输入while(true) Arrays.sort(stu); // 排序 if (stu[0].getTicket() > Math.max(stu[1].getTicket(), Math.max(stu[2].getTicket(), stu[3].getTicket()))) { flag = !flag; // 如果取得最大值修改标志位 } else { // 没有最大值则继续 for (int i = 0; i < stu.length; i++) // 输出候选人信息 System.out.println((i + 1) + ":" + stu[i]); System.out.println("没有最大选票,请重新投票!"); for (int i = 0; i < stu.length; i++) // 重新投票 选票清0 stu[i].ticketToZero(); System.out.print(tips); } }//结束投票while(flag) Arrays.sort(stu); // 排序 for (int i = 0; i < stu.length; i++) // 输出候选人信息 System.out.println((i + 1) + ":" + stu[i]); System.out.println("投票最终结果:" + stu[0].getName() + "同学以" + stu[0].getTicket() + "票当选班长!"); in.close(); }
输入流也可以用BufferedReader br=new BufferedReader(new InputStreamReader(System.in))