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


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

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

  • 相关阅读:
    scapy-python
    多进程和多线程
    Python函数
    while循环
    打印print的另一种方式sys.stdout
    python3 pickle & struct
    正则表达式
    【牛客网刷题】两种排序方法
    使用Python matplotlib做动态曲线
    【牛客网刷题】一次难忘的编程教训
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6797624.html
Copyright © 2020-2023  润新知