(1)功能描述 有一个半采用民主投票的方法推选班长,班长候选人共4位,每个人姓名以及代号分别为“张三 1,李四 2,王五 3,赵六 4”。
程序操作员将每张选票上所填的代号(1、2、3、4)循环输入电脑,输入数字0结束输,然后将所有候选人的得分情况显示出来,并显示最终当选者结果。 (2)具体要求 要求用面向对象方法,编写学生类Student,将候选人姓名、代号与票数保存到类Student中,并实现相应的get与set方法。
输入数据前,显示出各候选人代号,知直到输入的数字为0,结束选票输入工作。
在接收每次输入的选票后要求验证该选票是否有效,即如果输入的数不是0、1、2、3、4、5之间的数字,则选票无效,提示错误信息并继续输入。
输入结束后显示所有候选人的得票情况,如参考样例。
输出最终当选择和的相关信息,如参样例所示。 (3)参考样例 张三【0】票 李四【0】票 王五【0】票 赵六【0】票 请输入班长候选人代号(数字0结束):1 请输入班长候选人代号(数字0结束):1 请输入班长候选人代号(数字0结束):7 您输入有误,请重新输入:0 结果: 张三【2】票 李四【0】票 王五【0】票 赵六【0】票 投票结果:恭喜张三同学最后以2票当选班长!
程序实现: 第一步,先把学生类给建立起来,通过阅读题目,分析所得这个类里面需要保存有候选人编号、候选人姓名、得票数,并实现对应的构造方法和相应的get\set方法。
package person.xsc.praticeIII;
public class Student implements Comparable<Student>{
private int stuId ; // 候选人编号
private String stuName ; //候选人姓名
private int vote ; // 候选人票数
public Student(int stuId, String stuName, int vote) {
this.stuId = stuId;
this.stuName = stuName;
this.vote = vote;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getVote() {
return vote;
}
public void setVote(int vote) {
this.vote = vote;
}
public int compareTo(Student o){
if(this.vote<o.vote){
return 1 ;
}else if(this.vote>o.vote){
return -1 ;
}else{
return 0 ;
}
}
@Override
public String toString() {
return "Student [stuId=" + stuId + ", stuName=" + stuName + ", vote=" + vote + "]";
}
}
第二步,定义方法接口类,阅读题目要求,总结出大致的方法,一是输出结束投票后输出候选人各自信息。一是输出投票最终结果。一是投票功能。还有就是接受控制台输入的信息处理方法。
package person.xsc.praticeIII;
import java.io.IOException;
public interface InVote {
//用于结束投票后输出候选人信息
public void printInfo();
//投票最终结果输出
public void getResult();
//投票功能
public void vote() throws IOException;
//数据接收方法
public int getInt(String info,String err) throws IOException;
}
第三步,实现接口内的方法
package person.xsc.praticeIII;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InVoteImple implements InVote{
//实例候选人
Student stu[] = {new Student(1,"张三",0),new Student(2,"李四",0),
new Student(3,"王五",0),new Student(4,"赵六",0)} ;// 侯选人信息
//中断循环
boolean flag = true ;
//用于结束投票后输出候选人信息
@Override
public void printInfo() {
// TODO Auto-generated method stub
for(int i=0;i<stu.length;i++){
System.out.println(this.stu[i].getStuId() + ":"
+ this.stu[i].getStuName() + "【"+this.stu[i].getVote()+"】") ;
}
}
//投票最终结果输出
@Override
public void getResult() {
// TODO Auto-generated method stub
java.util.Arrays.sort(stu) ; // 排序
System.out.println("投票最终结果:" + stu[0].getStuName()+"同学,最后以"+stu[0].getVote()+"票当选班长!") ;
}
//具体投票过程
@Override
public void vote() throws IOException {
// TODO Auto-generated method stub
int num = getInt("请输入班长侯选人代号(数字0结束):","此选票无效,请输入正确的侯选人代号!") ;
switch(num){
case 0:{
flag = false ; // 中断循环
break ;
}
case 1:{
stu[0].setVote(stu[0].getVote() + 1) ;
break ;
}
case 2:{
stu[1].setVote(stu[1].getVote() + 1) ;
break ;
}
case 3:{
stu[2].setVote(stu[2].getVote() + 1) ;
break ;
}
case 4:{
stu[3].setVote(stu[3].getVote() + 1) ;
break ;
}
default:{
System.out.println("此选票无效,请输入正确的候选人代号!") ;
}
}
}
@Override
public int getInt(String info, String err) throws IOException {
// TODO Auto-generated method stub
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)) ;
int temp = 0 ;
String str = null ;
boolean flag = true ; // 定义一个循环标记
while(flag){
System.out.print(info) ;//打印提示信息
str = buf.readLine() ;//接收数据
if(str.matches("\\d+")){//判断输入内容是否是数字
temp = Integer.parseInt(str) ;
flag = false ; // 更改标志位,将退出循环
}else{
System.out.println(err) ;
}
}
return temp ;
}
}
第四步,测试类
package person.xsc.praticeIII;
import java.io.IOException;
public class Test{
public static void main(String args[]) throws IOException{
InVoteImple t=new InVoteImple();
t.printInfo();// 先输出候选人信息
while(t.flag) {
t.vote();// 循环调用投票
}
t.printInfo();// 输出投票之后的侯选人信息
t.getResult();// 得到结果
}
}
第五步,输出
1:张三【0】
2:李四【0】
3:王五【0】
4:赵六【0】
请输入班长侯选人代号(数字0结束):2
请输入班长侯选人代号(数字0结束):9
此选票无效,请输入正确的候选人代号!
请输入班长侯选人代号(数字0结束):/
此选票无效,请输入正确的侯选人代号!
请输入班长侯选人代号(数字0结束):wd
此选票无效,请输入正确的侯选人代号!
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):2
请输入班长侯选人代号(数字0结束):4
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):0
1:张三【3】
2:李四【2】
3:王五【0】
4:赵六【1】
投票最终结果:张三同学,最后以3票当选班长!