要实现学生成绩的排序,要从两方面来考虑如何设计程序。
第一方面是选择存储方式
第二方面是选择什么样的排序方式

以下是三种不同类型的实现:

  • 使用对象数组存储学生信息,冒泡法实现排序
  • 使用List存储学生信息,ArrayList冒泡法实现排序
  • 利用Comparator接口和Collections类实现自动排序

成绩排序功能实现结果如下

方法一:数组排序

采用对象数组的方式来存储学生对象,定义班级类,使用数组来保存班级的学生,代码如下

//使用对象数组存储学生信息,使用冒泡排序算法实现排序
public class test {public static void main(String[] args) {// TODO Auto-generated method stub//创建班级并实例化studentclass sclass=new studentclass();//添加学生sclass.createclass();System.out.println("原始顺序:");//排序前的输出System.out.println(sclass.output());sclass.sort();System.out.println("数组冒泡排序的结果:");//冒泡排序后的输出System.out.println(sclass.output());}}class student {private String name;private int age;private double grade;public student(String name,int age,double grade) {this.name=name;this.age=age;this.grade=grade;}//置取方法public double getGrade() {return grade;}public String getName() {return name;}
}
class studentclass {private student[] stus;private int size;public studentclass(){size=0;stus=null;}//创建班级方法public void createclass() {//定义三个数组存放学生的信息String names[]= {"张三","王五","李四","赵六","孙七"};double grades[]= {67,78.5,98,76.5,90};int ages[]= {17,18,18,19,17};//把name的长度作为数组长度size=names.length;//创建班级stusstus=new student[size];for(int i=0;i<size;i++) {stus[i]=new student(names[i],ages[i],grades[i]);}}//排序方法public void sort() {student temp;//冒泡排序for(int i=0;i<size-1;i++) {for(int j=1;j<size-i;j++) {if(stus[j-1].getGrade()>stus[j].getGrade()) {temp=stus[j-1];stus[j-1]=stus[j];stus[j]=temp;}}}}//输出方法public String output() {//StringBuilder表示可变字符字符串StringBuilder studentinfo=new StringBuilder();for(int i=0;i<size;i++) {//append(方法是创建了一个新的数组,扩大了长度,将需要添加的字符串给复制到这个新的数组中。studentinfo.append("姓名:"+stus[i].getName()+"\t成绩:"+stus[i].getGrade()+"\r\n");}return studentinfo.toString();}
}

其中output()用到一个类StringBuilder类对象studentinfo的append()方法****来完成字符串的拼接操作
方法一程序当人数发生变化时,程序的变化也是很大,其次就是程序的实现方法没有充分体现Java语言的特色。

方法二:List排序

Java语言提供了List接口list是元素可以重复的线性表。
它的一个具体的实现类是ArrayList,是长度可变的数组,可以对数组中的元素随机访问、插入和删除
代码如下:

import java.util.List;
import java.util.ArrayList;
public class test {public static void main(String[] args) {// TODO Auto-generated method stubstudentclass sclass=new studentclass();sclass.createclass();//添加一个学生sclass.add(new student("杨哥",18,70));System.out.println("原始顺序:");System.out.println(sclass.output());sclass.sort();System.out.println("数组冒泡排序的结果:");System.out.println(sclass.output());}}class studentclass {//用到泛类student,stulist保存班级学生private List<student> stulist;private int size;public studentclass(){size=0;stulist=null;}public void createclass() {String names[]= {"张三","王五","李四","赵六","孙七"};double grades[]= {67,78.5,98,76.5,90};int ages[]= {17,18,18,19,17};size=names.length;//实例化类型为ArrayListstulist=new ArrayList<student>();student temp;for(int i=0;i<size;i++) {temp=new student(names[i],ages[i],grades[i]);stulist.add(temp);}}public void sort() {student temp;//冒泡排序for(int i=0;i<size;i++) {for(int j=1;j<size-i;j++) {//get获取第几个元素if(stulist.get(j-1).getGrade()>stulist.get(j).getGrade()) {temp=stulist.get(j-1);//set插入当前位置stulist.set(j-1,stulist.get(j));stulist.set(j, temp);}}}}public void add(student s) {stulist.add(s);size=stulist.size();}public String output() {StringBuilder studentinfo=new StringBuilder();for(student stu:stulist) {studentinfo.append("姓名:"+stu.getName()+"\t成绩:"+stu.getGrade()+"\r\n");}return studentinfo.toString();}
}class student {private String name;private int age;private double grade;public student(String name,int age,double grade) {this.name=name;this.age=age;this.grade=grade;}public double getGrade() {return grade;}public String getName() {return name;}
}

在createclass方法中,根据班级人数创建班级对象stulist的实例,实例类型为ArrayList,应用ArrayList的方法add()将学生对象添加到班级中。
其中sort排序过程使用到了ArrayList的两个方法
public E get(int index) 获取第index个元素
public E set(int index, E element) 将元素element插入到对象的第index的位置上

其中for(student stu: stulist)就相当于
for(int i=0;i<stulist.size;i++){
student stu=stulist.get(i);
}

输出结果如图

方法三:List自动排序

可以使用Collections类和Comparator接口实现自动排序功能
代码如下:

import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class test {public static void main(String[] args) {// TODO Auto-generated method stubstudentclass sclass=new studentclass();sclass.createclass();System.out.println("原始顺序:");System.out.println(sclass.output());sclass.sort();System.out.println("数组冒泡排序的结果:");System.out.println(sclass.output());}}//实现Comparator<T>接口
class studentComparator implements Comparator<student> {public int compare(student student1,student student2) {double grade1,grade2;grade1=student1.getGrade();grade2=student2.getGrade();if(grade1>grade2) {return 1;}else if(grade1<grade2) {return -1;}else {return 0;}}
}class studentclass {private List<student> stulist;private int size;public studentclass(){size=0;stulist=null;}public void createclass() {String names[]= {"张三","王五","李四","赵六","孙七"};double grades[]= {67,78.5,98,76.5,90};int ages[]= {17,18,18,19,17};size=names.length;stulist=new ArrayList<student>();student temp;for(int i=0;i<size;i++) {temp=new student(names[i],ages[i],grades[i]);stulist.add(temp);}}public void sort() {//创建一个比较器类对象sc,使用静态方法sort实现排序studentComparator sc=new studentComparator();Collections.sort(stulist,sc);}public String output() {StringBuilder studentinfo=new StringBuilder();for(student stu:stulist) {studentinfo.append("姓名:"+stu.getName()+"\t成绩:"+stu.getGrade()+"\r\n");}return studentinfo.toString();}
}
class student {private String name;private int age;private double grade;public student(String name,int age,double grade) {this.name=name;this.age=age;this.grade=grade;}public double getGrade() {return grade;}public String getName() {return name;}
}

Java学生成绩排序输出的三种不同方法相关推荐

  1. java 学生成绩排序

    编写一个应用程序,用户分别从两个文本框输入学术的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中. 程序运行效果如图: import java.awt.BorderLayout; i ...

  2. 数据结构java学生成绩排序_数据结构学习--Java简单排序

    冒泡排序需要元素每次遍历都从最底部向上冒泡,找到适合的位置后,该位置之后的元素继续向上冒,这样一趟排序结束后,将冒出最大或者最小值. 选择排序需要元素从0号位开始向上遍历一遍,并将最小值放到0号位上, ...

  3. 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序。

    [问题描述] 对某班学生成绩排序.从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序. [输入形式 ...

  4. java ajax 输出_正本清源:所谓Ajax输出的三种形式

    # re: 正本清源:所谓Ajax输出的三种形式  回复  更多评论 2005-12-30 23:19 by Vinson Buffolo did a great job to provide an ...

  5. php数组书写形式,php数组(array)输出的三种形式讲解

    php数组(array)输出的三种形式讲解 发布于 2015-01-30 15:57:43 | 119 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...

  6. Scala 语言输出的三种方式

    Scala 语言输出的三种方式 字符串通过+号连接(类似 java). printf 用法 (类似 C 语言)字符串通过 % 传值. 字符串通过$引用(类似 PHP).

  7. 输出学生成绩Java_学生成绩 怎么输出不来

    已结贴√ 问题点数:5 回复次数:3 学生成绩 怎么输出不来 import java.util.Scanner; public class S{ public static void main(Str ...

  8. PTA学生成绩排序-C语言详解

    7-72 学生成绩排序 (20分) 给出一组学生名单(姓名和成绩),请输出按成绩从大到小排序后的结果(名次和姓名).成绩相同的人拥有相同的名次,且按姓名的字典序从小到大排列.题目保证学生姓名没有重复. ...

  9. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...

    #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...

最新文章

  1. Generalized Linear Models
  2. 眼图在通信系统中有什么意义_悟空CRM:施行CRM系统对汽车行业有什么意义
  3. 成为阿里 P7 真的难么?
  4. 捕获异常_SpringBoot的异常处理全局异常捕获(图文资料)
  5. stm32怎么调用for循环内部的变量_循环中的异步amp;amp;循环中的闭包
  6. alientek 3.5寸tftlcd模块资料_电冰箱触摸屏提高设备档次,深圳3.5寸人机界面厂家...
  7. iis10 HTTP 错误 500.19 - Internal Server Error
  8. Md5 Loader Demo
  9. html图片浮空但占位置,求助:鼠标经过图片时,图片悬浮出现变大
  10. NGUI常见功能解释
  11. 华为悦盒EC6108V9 、EC6108V9C_1080UI_非高安版_鸿蒙动画_免拆卡刷固件
  12. goahead(嵌入式Web服务器)之cgi篇
  13. 市场车载音响麦克风摆放以及降噪解决方案
  14. Greenplum数据库故障分析——UDP Packet Lost(packet reassembles failed)
  15. 但行好事,莫问前程。
  16. SAP 小写金额转大写
  17. Day215.课程详细页面功能完善、Echarts统计分析模块[生成统计数据+生成图表]前后端整合 -谷粒学院
  18. 我为什么鼓励你读博士?
  19. linux定时打加密压缩包
  20. 大数据这么火,什么是大数据呢?

热门文章

  1. MT6572 pixel显 示错位
  2. jeremy的路径规划学习-1.三维地图定义,散点拟合插值与粒子群算法(matlab实现)
  3. dac0832控制电机驱动流程图_应用DAC0832单片机控制小直流电机转速的设计.doc
  4. 海思芯片图形层的开发指南与方案
  5. 教你如何在高铁动车高峰期购票
  6. 西门子HMI_WinCC Flexible Smart V3下载
  7. python怎么做软件程序_看 Python 超级程序员使用什么开发工具
  8. 对于nutz框架的学习入门级使用——数据库类的建立
  9. 什么是入站营销?如何向合适的受众推销
  10. 【Mysql】EVENT 使用基础 - Create Event