问题:
1、用面向对象方法
2、输入数据前就显示候选人信息
3、循环接受 直到为0时结束
4、错误提示
5、比较器来实现比较
Student
package lynu.edu.cn; public class Student implements Comparable<Student> { private int id; private String name; private int count; public Student(int id,String name,int count){ this.setId(id); this.setCount(count); this.setName(name); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String toString(){ return this.name+this.count; } @Override public int compareTo(Student student) { if (this.count>student.count) { return -1; }else if (this.count<student.count) { return 1; } return 0; } }
Test
import java.util.Scanner; public class Test01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Student student1 =new Student(01, "张三", 0); Student student2 =new Student(02, "李四", 0); Student student3 =new Student(03, "王五", 0); Student student4 =new Student(04, "赵六", 0); Student students[]={student1,student2,student3,student4}; for (Student student : students) { System.out.println(student.getId()+":"+student.getName()+"【" +student.getCount()+"票】"); } int a = 1; int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; while (a!=0) { String str = scanner.next(); if (str.matches("\\d+")) { a = Integer.parseInt(str); System. out .println("请输入班长候选人代号(数字0结束):" +a); if (a==1) { num1++; students[a-1].setCount(num1); }else if (a==2) { num2++; students[a-1].setCount(num2); }else if (a==3) { num3++; students[a-1].setCount(num3); }else if (a==4) { num4++; students[a-1].setCount(num4); }if (a>4) { System.out.println("对不起 你输入的不是有效编号 请重新输入!"); }if (a==0) { for (Student student : students) { System.out.println(student.getId()+":"+student.getName()+"【" +student.getCount()+"票】"); } System.out.println(); java.util.Arrays.sort(students); System.out.println("投票最终结果:"+students[0].getName()+"同学以"+students[0].getCount()+"票最终当选"); return; } }else { System.out.println("对不起 你输入的不是数字 请重新输入!"); System. out .println("请输入班长候选人代号(数字0结束):" +str); } } } }
后期修改:
本来候选人的信息是由编码时实例化产生。现在改成由控制台输入,
投票改成先输入有多少票(有多少人参与投票)
import java.util.Scanner; /* * 1、如何设计实例化数组,将候选人的信息添加进去: * * 2、假设投票的人数假设不固定,如何确定票数的增加? * * 3、如何解决比较器对于相同的无法比较 * * */ public class Test01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = null; System.out.print("请输入您要录入的候选人个数:"); int num = sc.nextInt(); //输入有多少位候选人 Student students[] = new Student[num]; //用students数组来实例化学生对象 for (int i = 0; i < students.length; i++) { students[i] = new Student((i+1), name, 0); System.out.println("请输入第"+(i+1)+"位候选人的信息"); name = sc.next(); students[i].setName(name); } System.out.println("\t编号\t姓名\t得票数"); //将候选人信息进行展示 for (int i = 0; i < students.length; i++) { System.out.println("编号: "+students[i].getId()+"姓名:"+students[i].getName() +"选票:"+students[i].getCount()); } System.out.println("开始投票 请按照"); System.out.println("请输入投票的人数:"); int number = sc.nextInt(); int numbers[] =new int[number]; //开辟一个数组 用来判断票数是否超出 int a = 1; int nums[] = new int[num]; //开辟一个的票的数组,每一个nums[i]就是对应的候选人的得票数 while (a!=0) { int err = 0; //如果输入的投票号无效,记录下来,增加次数,防止numbers数组是否超标 for (int i = 0; i < (numbers.length+err); i++) { String str = sc.next(); //输入投票代码 if (str.matches("\\d+")) { a = Integer.parseInt(str); System. out .println("请输入班长候选人代号(数字0结束):" +a); if (a>nums.length) //判断多少票有问题 { err++; System.out.println("对不起 你输入的无效 请重新输入!"); } else if (a==students[(a-1)].getId()) //统计有效票的个数 { nums[(a-1)]++; students[a-1].setCount(nums[(a-1)]); } }else { System.out.println("对不起 你输入的不是数字 请重新输入!"); err++; } } System.out.println(); java.util.Arrays.sort(students); //用比较器来实现获选者 System.out.println("投票最终结果:"+students[0].getName()+"同学以"+students[0].getCount()+"票最终当选"); return; } } }