请问一下我的排序为什么出现了错误,重复了一个还少了一个。
public static void main(String[] args) {
Teacher teacher = new Teacher("张飞", '男', 25, 5);
teacher.printInfo(); // 封装
System.out.println("-");
Student student = new Student("小明", '男', 15, "00023102");
student.printInfo();
// 定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序。
Person[] persons = new Person[4];
persons[0] = new Student("jack", '男', 15, "0001");
persons[1] = new Student("tom", '女', 16, "0002");
persons[2] = new Teacher("关羽", '男', 29, 5);
persons[3] = new Teacher("刘备", '女', 24, 3);
// 创建对象
HomeWork13 homeWork13 = new HomeWork13();
homeWork13.bubbleSort(persons);
//输出排序后的数组
System.out.println("排序后的数组情况");
for (int i = 0; i < persons.length; i++) {
System.out.println(persons[i]);
}
}
// 方法,完成年龄从高到低排序
public void bubbleSort(Person[] persons) {
Person temp = null;
for (int i = 0; i < persons.length - 1; i++) {
for (int j = 0; j < persons.length - 1 - i; j++) {
// 判断条件,注意这里的条件可以根据需要进行变化
if (persons[j].getAge() < persons[j + 1].getAge())
temp = persons[j];
persons[j] = persons[j + 1];
persons[j + 1] = temp;
}
}
}
}
package com.edu.HomeWork.homework13;
public class Person {
private String name;
private char sex;
private int age;
public Person(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 编写一个play方法,把共有的输出内容写到父类
public String play() {
return name + "爱玩";
}
/* 父类返回一个基本信息
老师的信息: 学生的信息:
姓名:张飞 姓名:小明
年龄:30 年龄:15
性别:男 性别:男
工龄:5 学号:00023102
我承诺,我会认真教课。 我承诺,我会好好学习。
张飞爱玩象棋 小明爱玩足球
*/
public String basicInfo() {
return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex=" + sex +
", age=" + age +
'}';
}
}
package com.edu.HomeWork.homework13;
public class Student extends Person {
private String stu_id;
public Student(String name, char sex, int age, String stu_id) {
super(name, sex, age);
this.stu_id = stu_id;
}
public String getStu_id() {
return stu_id;
}
public void setStu_id(String stu_id) {
this.stu_id = stu_id;
}
public void study() {
System.out.println("我承诺,我会好好学习");
}
/**
学生爱玩足球
*/
@Override
public String play() {
return "学生" + super.play() + "足球";
}
// 编写一个输出信息的方法,这样就体现封装
public void printInfo(){
System.out.println("学生的信息:");
System.out.println(basicInfo());
System.out.println("学号:" + stu_id);
study();
System.out.println(play());
}
@Override
public String toString() {
return "Student{" +
"stu_id='" + stu_id + '\'' +
'}' + super.toString();
}
}
package com.edu.HomeWork.homework13;
public class Teacher extends Person {
private int work_age;
public Teacher(String name, char sex, int age, int work_age) {
super(name, sex, age);
this.work_age = work_age;
}
public int getWork_age() {
return work_age;
}
public void setWork_age(int work_age) {
this.work_age = work_age;
}
public void teach() {
System.out.println("我会认真教学");
}
/**
* 教师爱玩象棋
* @return
*/
@Override
public String play() {
return "教师" + super.play() + "象棋";
}
// 编写一个输出信息的方法,这样就体现封装
public void printInfo(){
System.out.println("教师的信息:");
System.out.println(basicInfo());
System.out.println("工龄:" + work_age);
teach();
System.out.println(play());
}
@Override
public String toString() {
return "Teacher{" +
"work_age=" + work_age +
'}' + super.toString();
}
}
排序后的数组情况
Teacher{work_age=3}Person{name='刘备', sex=女, age=24}
Student{stu_id='0002'}Person{name='tom', sex=女, age=16}
Student{stu_id='0002'}Person{name='tom', sex=女, age=16}
Student{stu_id='0001'}Person{name='jack', sex=男, age=15}
请看一个很简明的例子:http://t.csdn.cn/uSb1z
你的排序方法是错误的,一般的冒泡排序要么是从前往后冒泡,越小/越大的元素在每一次 “ 冒泡 ” 慢慢走到了最后,直到整个数组完全有序
;要么是从后往前循环, 越小/越大的元素在每一次“ 冒泡 ”中也会往后移动,直到元素有序。
你的排序方法有问题,内存循环中的if判断不对
改成这样就没问题了
// 判断条件,注意这里的条件可以根据需要进行变化
if (persons[j].getAge() > persons[j + 1].getAge()) {
temp = persons[j];
persons[j] = persons[j + 1];
persons[j + 1] = temp
}
完成年龄从高到低排序这个方法稍作修改即可:
// 方法,完成年龄从高到低排序
public void bubbleSort(Person[] persons) {
Person temp = null;
for (int i = 0; i < persons.length - 1; i++) {
for (int j = 0; j < persons.length - 1 - i; j++) {
// 判断条件,注意这里的条件可以根据需要进行变化
if (persons[j].getAge() > persons[j + 1].getAge()) {
temp = persons[j];
persons[j] = persons[j + 1];
persons[j + 1] = temp
}
}
}
}