Java IO操作——投票程序实例

功能描述:

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

本实例主要采用的知识

Comparable比较器
Arrays类
对象数组。

因为程序中要使用对象数组的排序方式,所以在Student类里需要实现Comparable接口,并覆写compareTo()方法,指定排序规则。
 public class Student implements Comparable<Student>{
	private int stuNo ;	// 学生编号
	private String name ;	// 学生姓名
	private int vote ;	// 学生票数
	public Student(int stuNo,String name,int vote){
		this.setStuNo(stuNo) ;
		this.setName(name) ;
		this.setVote(vote) ;
	}
	public int compareTo(Student o){
		if(this.vote<o.vote){
			return 1 ;
		}else if(this.vote>o.vote){
			return -1 ;
		}else{
			return 0 ;
		}
	}
	public void setStuNo(int stuNo){
		this.stuNo = stuNo ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setVote(int vote){
		this.vote = vote ;
	}
	public int getStuNo(){
		return this.stuNo ;
	}
	public String getName(){
		return this.name ;
	}
	public int getVote(){
		return this.vote ;
	}
 };
此类的对象数组可以使用Arrays.sort()直接排序。
import java.io.BufferedReader ;
import java.io.InputStreamReader ;
import java.io.IOException ;
public class InputData{
	private BufferedReader buf = null ;		// 接收数据
	public InputData(){
		this.buf = new BufferedReader(new InputStreamReader(System.in)) ;
	}
	public String getString(String info){	// 得到字符串
		String temp =  null ;	// 接收输入内容
		System.out.print(info) ;
		try{
			temp = this.buf.readLine() ;	// 接收数据
		}catch(IOException e){
			e.printStackTrace() ;
		}
		return temp ;
	}
	public int getInt(String info,String err){	// 得到整型数据
		int temp = 0 ;
		String str = null ;
		boolean flag = true ;	// 定义一个循环标记
		while(flag){
			str = this.getString(info) ;
			if(str.matches("\\d+")){
				temp = Integer.parseInt(str) ;
				flag = false ;	// 更改标志位,将退出循环
			}else{
				System.out.println(err) ;
			}
		}
		return temp ;
	}
};
定义操作类:
public class Operate{
	private Student stu[] = {new Student(1,"张三",0),new Student(2,"李四",0),
		new Student(3,"王五",0),new Student(4,"赵六",0)} ;// 侯选人信息
	private boolean flag = true ;
	public Operate(){
		this.printInfo() ;	// 先输出候选人信息
		while(flag){
			this.vote() ;	// 循环调用投票
		}
		this.printInfo() ;	// 输出投票之后的侯选人信息
		this.getResult() ;	// 得到结果
	}
	private void getResult(){	// 得到最终的投票结果
		java.util.Arrays.sort(this.stu) ;	// 排序
		System.out.println("投票最终结果:" + this.stu[0].getName()+"同学,最后以"+this.stu[0].getVote()+"票当选班长!") ;
	}
	public void vote(){	// 此方法完成投票功能
		InputData input = new InputData() ;	// 输入数据
		int num = input.getInt("请输入班长侯选人代号(数字0结束):","此选票无效,请输入正确的侯选人代号!") ;
		switch(num){
			case 0:{
				this.flag = false ;	// 中断循环
				break ;
			}
			case 1:{
				this.stu[0].setVote(this.stu[0].getVote() + 1) ;
				break ;
			}
			case 2:{
				this.stu[1].setVote(this.stu[1].getVote() + 1) ;
				break ;
			}
			case 3:{
				this.stu[2].setVote(this.stu[2].getVote() + 1) ;
				break ;
			}
			case 4:{
				this.stu[3].setVote(this.stu[3].getVote() + 1) ;
				break ;
			}
			default:{
				System.out.println("此选票无效,请输入正确的候选人代号!") ;
			}
		}
	}
	public void printInfo(){	
		for(int i=0;i<stu.length;i++){
			System.out.println(this.stu[i].getStuNo() + ":"
				+ this.stu[i].getName() + "【"+this.stu[i].getVote()+"】") ;	
		}
	}
};

主方法:
public class ExecDemo{
	public static void main(String args[]){
		new Operate() ;
	}
};

在实际的开发中字节流的操作是非常多的,而且还有对象序列化。



  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值