17.3.2 实例分析
【实例17.8】本小节将介绍一个比较复杂的实例,目的是结合前面的知识作一个综合性的运用。先来看看下面程序的一个流程,如图17.1所示。
为了让读者可以很好地理解这个程序,下面将分步骤去讲解。
(1)设计学生类,代码如下所示。
图 17.1 排列和整理数据实例
01 ///创建一个学生类,并让其实现Comparable接口,这样就可以对类中的数据进行排列
02 ///name指学生的姓名
03 ///age指学生的 年龄
04 ///sexy指学生的 性别
05 ///code指学生的 学号
06 ///school指学生所在学校的名称
07 ///grade指学生的年级
08 ///major指学生的专业
09 ///address指学生家庭住址
10 ///set函数是一个设置器
11 ///get函数是一个访问器
12 class student implements Comparable 13{
14 String name;
15 int age;
16 String sexy;
17 String code;
18 String school;
19 String grade;
20 String major;
21 String address;
22 student x;
23 student y;
24 student(String name)
25 {
26 this. name=name;
27 }
28 public void set(int age, String sexy, String code, String school, String grade, String major, String
29 address)
30 {
31 this. age=age;
32 this. sexy=sexy;
33 this. school=school;
34 this. grade=grade;
35 this. major=major;
36 this. code=code;
37 this. address=address;
38 }
39 public String getname()
40 {
41 return name;
42 }
43 public String getcode()
44 {
45 return name;
46 }
47 public String getsexy()
48 {
49 return sexy;
50 }
51 public int getage()
52 {
53 return age;
54 }
55 public String getschool()
56 {
57 return school;
58 }
59 public String getmajor()
60 {
61 return major;
62 }
63 public String getgrade()
64 {
65 return grade;
66 }
67 public String getaddress()
68 {
69 return address;
70 }
71 public String toString()
72 {
73 String information="学生 姓名:"+name+""+" 学号:"+code+""+" 性别"+sexy+""+" 年龄:
74 "+age+""+"所在学校:"+school+""+"所学专业:"+major+""+" 所在年级:"+grade+""+" 家庭地址:75"+address;
76 return information;
77 }
78 ///通过实现compareTo这个方法,来实现排序
79 public int compareTo(Object o)
80 {
81 student st=(student)o;
82 return(age-st. age);
83 }
84 }
注意 虽然先给出了学生类代码,但在实际文件中第一次编译时,一定让该类在主运行类的后面。
(2)让这个学生类对象在主运行类中输出。详细代码如下所示。
85 import java.util.*;
86 ///主运行类
87 ///st1至st10是创建出来的学生类的十个对象
88 ///set方法设置了对象的参数值
89 ///Arrays用来排列对象中的数据
90 public class file2
91 {
92 public static void main(String[]args)
93 {
94 student st1=new student("王鹏");
95 student st2=new student("王浩");
96 student st3=new student("孙鹏");
97 student st4=new student("孙文君");
98 student st5=new student("谭妮");
99 student st6=new student("赵志强");
100 student st7=new student("王凯");
101 student st8=new student("苏瑞");
102 student st9=new student("张伟");
103 student st10=new student("张杰");
104 //通过设置器赋予多个对象参数值
105 st1.set(20,"男","10000","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
106 st2.set(22,"男","10001","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
107 st3.set(21,"男","10002","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
108 st4.set(19,"女","10003","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
109 st5.set(18,"女","10004","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
110 st6.set(24,"男","10005","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
111 st7.set(22,"男","10006","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
112 st8.set(29,"女","10007","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
113 st9.set(25,"女","10008","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
114 st10.set(28,"男","10009","重庆大学","大学三年级","计算机专业","重庆市沙坪坝区");
115 student[]a=new student[]{st1,st2,st3,st4,st5,st6,st7,st8,st9,st10};
116 try
117 {
118 Arrays.sort(a);
119 for(int i=0;i<a.length;i++)
120 {
121 System.out.println(a[i]);
122 }
123 }
124 catch(Exception e)
125 {
126 System.out.println("出错了");
127 }
128 }
129 }
【代码说明】第12~84行构建一个学生类,这个在前面多次讲过,具体属性不再介绍。要注意的是第12行中,此类实现了Comparable接口,第79~83行又实现了该接口的compareTo方法,所以通过该学生类创建的对象可以进行比较。从代码第82行可以看出,对象通过age属性进行比较。
【运行效果】
学生 姓名:谭妮 学号:10004 性别女 年龄:18 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:孙文君 学号:10003 性别女 年龄:19 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:王鹏 学号:10000 性别男 年龄:20 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:孙鹏 学号:10002 性别男 年龄:21 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:王浩 学号:10001 性别男 年龄:22 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:王凯 学号:10006 性别男 年龄:22 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:赵志强 学号:10005 性别男 年龄:24 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:张伟 学号:10008 性别女 年龄:25 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:张杰 学号:10009 性别男 年龄:28 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
学生 姓名:苏瑞 学号:10007 性别女 年龄:29 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区
上面的实例很简单,主要目的是学习如何比较对象大小。