java开发实战经典(第二版)P452 12-10

12.10   有一个班采用民主投票方法推选班长,班长候选人共4位,每个人姓名及代号分别为“张三 1;李四 2;王五 3;赵六 4”。程序操作员将每张选票上所填的代号(1、2、3或4)循环输入电脑,输入数字0结束输入,然后将所有候选人的得票情况显示出来,并显示最终当选者的信息。

先定义Person类:

package book;

public class Person implements Comparable<Person>{
	private String name;
	private int id;
	private int count;
	public Person() {
		super();
	}
	public Person(int id,String name,int count) {
		super();
		this.name = name;
		this.id = id;
		this.count = count;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public int compareTo(Person p) {
		if(this.count>p.count) {
			return -1;
		}else if(this.count<p.count) {
			return 1;
		}else {
			return 0;
		}
		
	}
}

 

然后定义专门处理从键盘接收数据的类InputData:

package book;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputData {
	InputStreamReader input = new InputStreamReader(System.in);
	BufferedReader buf = new BufferedReader(input);
	public int getInt(String msg,String err) {
		int num = 0;
		boolean flag = true;
		while(flag) {
			System.out.println(msg);
			String str = "";
			try {
				str = this.buf.readLine();
			}catch(IOException e) {
				e.printStackTrace();
			}
			if(str.matches("^\\d$")) {
				num = Integer.parseInt(str);
				flag = false;
			}else {
				System.out.println(err);
			}
		}
		return num;
	}
}

 

然后定义操作类Operate:

package book;

public class Operate {
	private Person per[] = new Person[] {new Person(1,"张三",0),
			new Person(2,"李四",0),new Person(3,"王五",0),new Person(4,"赵六",0),};
	private InputData input = new InputData();
	private boolean flag = true;
	public Operate() {
		System.out.println("张三【0票】\n李四【0票】\n王五【0票】\n赵六【0票】");
		while(this.flag){
			this.vote();
		}
		this.show();
		this.result();
	}
	public void show() {
		for(int i = 0;i<per.length;i++) {
			System.out.println(this.per[i].getId()+":"+
		this.per[i].getName()+":【"+this.per[i].getCount()+"】票");
		}
	}
	public void result() {
		java.util.Arrays.sort(per);
		if(per[0].getCount()>per[1].getCount()) {
			System.out.println(per[0].getId()+"号:"+per[0].getName()+
					"同学最终以:"+per[0].getCount()+"票当选班长,大家祝贺!!!");
		}else if(per[0].getCount()==per[1].getCount()&&per[1].getCount()!=per[2].getCount()) {
			System.out.println("【"+per[0].getName()+"】同学和【"+per[1].getName()
					+"】同学票数相等同为最高票,麻烦大家重选一次!");
		}else {
			System.out.println("超过两个以上候选人的票数相等,请大家重新再选!");
		}
	}
	public void vote(){
		int ch  = input.getInt("请输入候选人代号(数字0结束):"," 此选票无效,请重新输入!\n");
		switch(ch) {
		case 0:{
			flag = false;
			break;
		}case 1:{
			this.per[0].setCount(this.per[0].getCount()+1);
			break;
		}case 2:{
			this.per[1].setCount(this.per[1].getCount()+1);
			break;
		}case 3:{
			this.per[2].setCount(this.per[2].getCount()+1);
			break;
		}case 4:{
			this.per[3].setCount(this.per[3].getCount()+1);
			break;
		}default:{
			System.out.println("此选票无效,请重新输入!!!");
		}
		}
	}
	}

 

最后写测试类Test:

package book;

public class Test {
	public static void main(String args[]) {
		new Operate();
	}

}

 

运行结果:

张三【0票】
李四【0票】
王五【0票】
赵六【0票】
请输入候选人代号(数字0结束):
1
请输入候选人代号(数字0结束):
1
请输入候选人代号(数字0结束):
1
请输入候选人代号(数字0结束):
2
请输入候选人代号(数字0结束):
3
请输入候选人代号(数字0结束):
4
请输入候选人代号(数字0结束):
5
此选票无效,请重新输入!!!
请输入候选人代号(数字0结束):
hello
 此选票无效,请重新输入!

请输入候选人代号(数字0结束):
0
1:张三:【3】票
2:李四:【1】票
3:王五:【1】票
4:赵六:【1】票
1号:张三同学最终以:3票当选班长,大家祝贺!!!

原文地址:http://www.docin.com/p-2020950518.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值