Java开发实战经典_12.19.10 民主选票方式推选班长

功能描述:

       有一个班级采用民主投票的方法推选班长,班长候选人共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))


猜你喜欢

转载自blog.csdn.net/qq_41685398/article/details/80380499