java - 我的冒泡排序方法没有排序。它一遍又一遍地写同一个名字。它应该按年份对 Person(String name, int year) 进行排序
问题描述
我是编程新手,并且正在学习。
在这个任务中必须创建一个类,Person(String name, int year)。然后进行冒泡排序,按年份对 Person 对象进行排序。我需要通过在控制台中按年份排序的名称来测试它。
我被卡住了,在控制台中写了 5 次相同的名称。
public class Person {
private static String name;
private static int year;
public Person(String name, int year) {
super();
Person.name = name;
Person.year = year;
}
public static String getName() {
return name;
}
public static void setName(String name) {
Person.name = name;
}
public static int getYear() {
return year;
}
public static void setYear(int year) {
Person.year = year;
}
public static void bubbleSort(Person[] list) {
boolean undone;
do {
undone = false;
for (int i = 0; i < list.length - 1; i++) {
for (int j = 0; j < list.length - 1; j++) {
if (list[j].getYear() > list[j + 1].getYear()) {
list[j] = list[j + 1];
list[j + 1] = list[j];
undone = true;
}
}
}
} while (undone);
}
public static void printArray(Person[] myPerson) {
int n = myPerson.length;
for (int i = 0; i < n; ++i)
System.out.println(myPerson[i].getName() + " ");
}
}
public class MainPerson {
public static void main(String[] args) {
Person[] myPerson = new Person[] { new Person("Susanne Hansen", 1999), new Person("Hans Jespersen", 1896),
new Person("Eva Gylden", 2789), new Person("Anders Aage", 1786), new Person("Ane Pulsar", 1345) };
Person.bubbleSort(myPerson);
Person.printArray(myPerson);
}
}
解决方案
这是根据需要生成输出的更新代码:
class Person {
private String name;
private int year;
public Person(String name, int year) {
this.name = name;
this.year = year;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
public class Main {
public static void bubbleSort(Person[] list) {
boolean undone;
do {
undone = false;
for (int i = 0; i < list.length - 1; i++) {
for (int j = 0; j < list.length - 1; j++) {
if (list[j].getYear() > list[j + 1].getYear()) {
Person temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
undone = true;
}
}
}
} while (undone);
}
public static void printArray(Person[] myPerson) {
int n = myPerson.length;
for (int i = 0; i < n; ++i)
System.out.println(myPerson[i].getName() + " ");
}
public static void main(String[] args) {
Person[] myPerson = new Person[] { new Person("Susanne Hansen", 1999), new Person("Hans Jespersen", 1896),
new Person("Eva Gylden", 2789), new Person("Anders Aage", 1786), new Person("Ane Pulsar", 1345) };
bubbleSort(myPerson);
printArray(myPerson);
}
}
您的代码中几乎没有错误:
- 您需要将要替换的值存储在冒泡排序函数的临时变量中。
您的代码是:
if (list[j].getYear() > list[j + 1].getYear()) {
list[j] = list[j + 1];
list[j + 1] = list[j];
undone = true;
}
需要将其更新为:
if (list[j].getYear() > list[j + 1].getYear()) {
Person temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
undone = true;
}
您的代码中发生的事情是因为您没有将值存储在 list[j] 处的对象丢失的临时变量中。
- 永远不要
static
在 POJO/Data 类中使用。仅供参考 POJO 是一个仅包含数据和操作数据的函数的类。
使用static
将使 java 在内存中只创建一次对象,它们将存在于程序的整个生命周期中。
- 使用 POJO 类中的类名。
正如您使用过的那样Person.name
,否则Person.year
会产生问题,请始终使用此this.name
/this.year
关键字来引用同一类中的对象。
- 不要在 Data/Pojo 类中编写只需要调用一次或两次的函数。这将减少内存使用和运行时间。
您需要查看Static Keyword、this Keyword和POJO 类的详细信息。
推荐阅读
- java - RecyclerViewAdapter 中的设置器不起作用?
- performance - 在性能测试中,如果测试需要 10 秒,持续时间将在 5 分钟内完成,会发生什么?
- docker - 在容器中找不到 WORKDIR
- reactjs - How to test npm package shipped as .tgz file in react using jest?
- c++ - Accessing an array using a pointer in a struct
- react-native - Unhandled promise rejection: TypeError: Network request failed in react native
- powershell - What is Set-PSRepository scope effect?
- javascript - Switch Facebook Comments without reloading a website
- sql - SQL grouping sets riddle
- python - Python type annotations style for functions with long arguments