17.3.2 实例分析

【实例17.8】本小节将介绍一个比较复杂的实例,目的是结合前面的知识作一个综合性的运用。先来看看下面程序的一个流程,如图17.1所示。


为了让读者可以很好地理解这个程序,下面将分步骤去讲解。

(1)设计学生类,代码如下所示。

17.3.2 实例分析 - 图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 所在学校:重庆大学所学专业:计算机专业 所在年级:大学三年级 家庭地址:重庆市沙坪坝区


上面的实例很简单,主要目的是学习如何比较对象大小。