综合应用题:投票程序(知识点:对象,数组,循环,流,工具类的应用)

编写一个投票程序,具体如下:
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;
    }
}

运行结果:
这里写图片描述
这里写图片描述

转载于:https://www.cnblogs.com/TCB-Java/p/6797624.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值