投票功能

来源:互联网 发布:地摊毛巾知乎 编辑:程序博客网 时间:2024/05/21 17:21

 

本实例主要采用的 知识点

1、Comparable比较器

2、Arrays 类

3、对象数组



因为程序中要使用对象数组的排序方式,所以在Student 类里需要实现Comparable 接口,并覆写compartTo() 方法,指定排序规则

侯选班长:Student 类:

[java] view plaincopy
  1. public class Student implements Comparable<Student>{  
  2. private int stuNo ; // 学生编号  
  3. private String name ;   // 学生姓名  
  4. private int vote ;  // 学生票数  
  5. public Student(int stuNo,String name,int vote){  
  6.     this.setStuNo(stuNo) ;  
  7.     this.setName(name) ;  
  8.     this.setVote(vote) ;  
  9. }  
  10. public int compareTo(Student o){  
  11.     if(this.vote<o.vote){  
  12.         return 1 ;  
  13.     }else if(this.vote>o.vote){  
  14.         return -1 ;  
  15.     }else{  
  16.         return 0 ;  
  17.     }  
  18. }  
  19. public void setStuNo(int stuNo){  
  20.     this.stuNo = stuNo ;  
  21. }  
  22. public void setName(String name){  
  23.     this.name = name ;  
  24. }  
  25. public void setVote(int vote){  
  26.     this.vote = vote ;  
  27. }  
  28. public int getStuNo(){  
  29.     return this.stuNo ;  
  30. }  
  31. public String getName(){  
  32.     return this.name ;  
  33. }  
  34. public int getVote(){  
  35.     return this.vote ;  
  36. }  
  37. };  

此类的对象数组可以使用Arrays.sort() 直接排序。

InputData 类:

[java] view plaincopy
  1. import java.io.BufferedReader ;  
  2. import java.io.InputStreamReader ;  
  3. import java.io.IOException ;  
  4. public class InputData{  
  5.     private BufferedReader buf = null ;     // 接收数据  
  6.     public InputData(){  
  7.         this.buf = new BufferedReader(new InputStreamReader(System.in)) ;  
  8.     }  
  9.     public String getString(String info){   // 得到字符串  
  10.         String temp =  null ;   // 接收输入内容  
  11.         System.out.print(info) ;  
  12.         try{  
  13.             temp = this.buf.readLine() ;    // 接收数据  
  14.         }catch(IOException e){  
  15.             e.printStackTrace() ;  
  16.         }  
  17.         return temp ;  
  18.     }  
  19.     public int getInt(String info,String err){  // 得到整型数据  
  20.         int temp = 0 ;  
  21.         String str = null ;  
  22.         boolean flag = true ;   // 定义一个循环标记  
  23.         while(flag){  
  24.             str = this.getString(info) ;  
  25.             if(str.matches("\\d+")){  
  26.                 temp = Integer.parseInt(str) ;  
  27.                 flag = false ;  // 更改标志位,将退出循环  
  28.             }else{  
  29.                 System.out.println(err) ;  
  30.             }  
  31.         }  
  32.         return temp ;  
  33.     }  
  34. };  
定义操作类Operate:

[java] view plaincopy
  1. public class Operate{  
  2.     private Student stu[] = {new Student(1,"张三",0),new Student(2,"李四",0),  
  3.         new Student(3,"王五",0),new Student(4,"赵六",0)} ;// 侯选人信息  
  4.     private boolean flag = true ;  
  5.     public Operate(){  
  6.         this.printInfo() ;  // 先输出候选人信息  
  7.         while(flag){  
  8.             this.vote() ;   // 循环调用投票  
  9.         }  
  10.         this.printInfo() ;  // 输出投票之后的侯选人信息  
  11.         this.getResult() ;  // 得到结果  
  12.     }  
  13.     private void getResult(){   // 得到最终的投票结果  
  14.         java.util.Arrays.sort(this.stu) ;   // 排序  
  15.         System.out.println("投票最终结果:" + this.stu[0].getName()+"同学,最后以"+this.stu[0].getVote()+"票当选班长!") ;  
  16.     }  
  17.     public void vote(){ // 此方法完成投票功能  
  18.         InputData input = new InputData() ; // 输入数据  
  19.         int num = input.getInt("请输入班长侯选人代号(数字0结束):","此选票无效,请输入正确的侯选人代号!") ;  
  20.         switch(num){  
  21.             case 0:{  
  22.                 this.flag = false ; // 中断循环  
  23.                 break ;  
  24.             }  
  25.             case 1:{  
  26.                 this.stu[0].setVote(this.stu[0].getVote() + 1) ;  
  27.                 break ;  
  28.             }  
  29.             case 2:{  
  30.                 this.stu[1].setVote(this.stu[1].getVote() + 1) ;  
  31.                 break ;  
  32.             }  
  33.             case 3:{  
  34.                 this.stu[2].setVote(this.stu[2].getVote() + 1) ;  
  35.                 break ;  
  36.             }  
  37.             case 4:{  
  38.                 this.stu[3].setVote(this.stu[3].getVote() + 1) ;  
  39.                 break ;  
  40.             }  
  41.             default:{  
  42.                 System.out.println("此选票无效,请输入正确的候选人代号!") ;  
  43.             }  
  44.         }  
  45.     }  
  46.     public void printInfo(){      
  47.         for(int i=0;i<stu.length;i++){  
  48.             System.out.println(this.stu[i].getStuNo() + ":"  
  49.                 + this.stu[i].getName() + "【"+this.stu[i].getVote()+"】") ;    
  50.         }  
  51.     }  
  52. };  
main方法 :

[java] view plaincopy
  1. public class ExecDemo{  
  2.     public static void main(String args[]){  
  3.         new Operate() ;  
  4.     }  
  5. };  
总结:

在实际开发中字节流的操作是非常多的,而且还有对象序列化

0 0