编写一个投票程序,具体如下:
1)功能描述
a.有一个班级采用民主投票的方法推选班长,班长候选人共4位,每个人姓名、编号,分别为“张三 1;李四 2;王五 3;赵六 4”。
b.投票者通过在后台输入候选人编号(1,2,3,4)来实现投票,输入0则表示投票结束。投票结束后,将所有候选人的得票情况显示出来,并显示当选者的信息
2)具体要求
a.要求使用面向对象的方法,编写学生类Student,将候选人的信息(包括票数)作为属性写入类中
b.每次输入时,判断选票是否有效,除0~4之外的任何数字或文字都,提示“选票无效,请输入正确的候选人编号!”,并继续等待输入
c.输入结束后显示所有候选人得票情况
d.要求解决有多人获得最高票数的问题
比如:张三 3票;李四 3票;王五 1票;赵六 2票;
此时,张三和李四票数相同且最高
显示格式:
代码:
Student类
package 第十二章IO流;
public class Student {
private String name;
private int id;
private int vowNum;
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 getVowNum() {
return vowNum;
}
public void setVowNum(int vowNum) {
this.vowNum = vowNum;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + ", vowNum=" + vowNum + "]";
}
public Student(String name, int id, int vowNum) {
super();
this.name = name;
this.id = id;
this.vowNum = vowNum;
}
public Student() {
super();
}
}
测试类:
package 第十二章IO流;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) {
Student[] students=new Student[4];
students[0]=new Student("张三", 1, 0);
students[1]=new Student("李四", 2, 0);
students[2]=new Student("王五", 3, 0);
students[3]=new Student("赵六", 4, 0);
do{
chooseMonitor(students);
}while(isVowsEquals(students)[0].equals("true"));
int max=Integer.parseInt(isVowsEquals(students)[1]);
for (Student student : students) {
if(max==student.getVowNum()){
System.out.println("投票最终结果:"+student.getName()+"同学,最终以"+max+"票当选班长");
break;
}
}
}
//投票方法
public static void chooseMonitor(Student[] students){
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
while(true){
try {
//输入候选人编号投票
System.out.println("请输入班长候选人编号(数字0结束):");
String string=reader.readLine();
//匹配只能输入0~4
boolean flag=string.matches("[0-4]");
//如果输入数据符合规则,则进行票数计数
if(flag){
//如果输入的为0,结束投票
if(string.equals("0")){
System.out.println("投票结束!投票结果如下:");
for (Student student : students) {
System.out.println(student.getId()+":"+student.getName()+" 【"+student.getVowNum()+"票】");
}
break;
}
//统计候选人得票数
for(int i=0;i<students.length;i++){
//与对应的id进行匹配
if(string.equals(students[i].getId()+"")){
students[i].setVowNum(students[i].getVowNum()+1);
}
}
}else{
//如果输入数据不符合规则,则提示重新输入
System.out.println("选票无效,请输入正确的候选人编号!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//解决获得最高票数有多个人的问题
public static String[] isVowsEquals(Student[] students){
//将得票数存储在一个数组当中
int[] nums=new int[students.length];
for(int i=0;i<students.length;i++){
nums[i]=students[i].getVowNum();
}
//求最高票数
int max=nums[0];
for(int i=1;i<nums.length;i++){
max=max>nums[i]?max:nums[i];
}
//解决多个人票数最高的问题
int count=0;//获得最高票数的人数,若只有一个,则直接产生班长,若是2个及以上,需要重新投票
for(int i=0;i<nums.length;i++){
if(nums[i]==max){
count++;
}
}
String[] strings=new String[2];
strings[1]=""+max;
//count>1说明:有多个人票数相同且为最高
if(count>1){
//出现多个人票数相同且为最高票数时,需要重新投票
//此时需要将所有票数清零,否则会将上次投票的数量累加在一起
for(Student student:students){
student.setVowNum(0);
}
System.out.println("【有多个人获得最高票数!】需要重新投票");
System.out.println();
strings[0]="true";
return strings;
}
strings[0]="false";
return strings;
}
}
运行结果: