Java compareTo数组排序
Java compareTo array sort
我有两个 classes Main
和 Object
。我需要根据其值按升序对数组中的对象进行排序。我从 compareTo 得到 return -1、1 和 0,我需要相应地运行一个 for 循环来对我的数组进行排序。我不想使用Arrays.sort,我需要手动完成。 Main
class 中的排序部分不起作用。任何帮助都可能有用。谢谢。
public class Main {
public static void main(String[] args) {
Object[] arr = new Object[6];
arr[0] = new Object(2);
arr[1] = new Object(5);
arr[2] = new Object(3);
arr[3] = new Object(1);
arr[4] = new Object(6);
arr[5] = new Object(4);
System.out.println("List of instances");
for (int i = 0; i < 5; i++) {
System.out.println(arr[i].getValue());
}
System.out.println();
Object tempVar;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < 5; j++) {
int result = arr[i].compareTo(arr[i]);
if (result == -1) {
tempVar = arr[j + 1];
arr[j + 1] = arr[i];
arr[i] = tempVar;
}
}
}
System.out.println("List of sorted instances");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getValue());
}
}
}
public class Object implements Comparable<Object> {
private int value;
public Object(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public int compareTo(Object o) {
int result = 0;
if (this.value > o.getValue()) {
result = 1;
} else if (this.value < o.getValue()) {
result = -1;
} else if (this.value == o.getValue()) {
result = 0;
}
return result;
}
}
如果你想遍历一个集合的所有个元素,那么不要使用像这里的5
这样的固定值:
System.out.println("List of instances");
for (int i = 0; i < 5; i++) {
改用arr.length
。
这也适用于这一行:
for (int j = 0; j < 5; j++) {
5 可能是正确的,因为数组长度是 6
并且您想在最后一个索引之前终止,但是如果您使用更大的数组,此代码将中断。使用 arr.length - 1
而不是 5
.
这一行将数组元素与其自身进行比较:
int result = arr[i].compareTo(arr[i]);
因此 result
将永远是 0
。将其更改为:
int result = arr[i].compareTo(arr[j]);
或:
int result = arr[j].compareTo(arr[i]);
尝试两种方法以了解它们之间的区别。
在上面的修复中,您比较了索引 i
和 j
上的元素。因此,您应该更改此代码:
if (result == -1) {
tempVar = arr[j + 1];
arr[j + 1] = arr[i];
arr[i] = tempVar;
}
使用 j
的正确索引:
if (result == -1) {
tempVar = arr[j];
arr[j] = arr[i];
arr[i] = tempVar;
}
您当前的代码比较 i
和 j
的元素(好吧,由于错误,不是 j
,但您是那个意思),但是由于您交换了不同的元素不同的索引 j+1
.
我有两个 classes Main
和 Object
。我需要根据其值按升序对数组中的对象进行排序。我从 compareTo 得到 return -1、1 和 0,我需要相应地运行一个 for 循环来对我的数组进行排序。我不想使用Arrays.sort,我需要手动完成。 Main
class 中的排序部分不起作用。任何帮助都可能有用。谢谢。
public class Main {
public static void main(String[] args) {
Object[] arr = new Object[6];
arr[0] = new Object(2);
arr[1] = new Object(5);
arr[2] = new Object(3);
arr[3] = new Object(1);
arr[4] = new Object(6);
arr[5] = new Object(4);
System.out.println("List of instances");
for (int i = 0; i < 5; i++) {
System.out.println(arr[i].getValue());
}
System.out.println();
Object tempVar;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < 5; j++) {
int result = arr[i].compareTo(arr[i]);
if (result == -1) {
tempVar = arr[j + 1];
arr[j + 1] = arr[i];
arr[i] = tempVar;
}
}
}
System.out.println("List of sorted instances");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i].getValue());
}
}
}
public class Object implements Comparable<Object> {
private int value;
public Object(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public int compareTo(Object o) {
int result = 0;
if (this.value > o.getValue()) {
result = 1;
} else if (this.value < o.getValue()) {
result = -1;
} else if (this.value == o.getValue()) {
result = 0;
}
return result;
}
}
如果你想遍历一个集合的所有个元素,那么不要使用像这里的5
这样的固定值:
System.out.println("List of instances");
for (int i = 0; i < 5; i++) {
改用arr.length
。
这也适用于这一行:
for (int j = 0; j < 5; j++) {
5 可能是正确的,因为数组长度是 6
并且您想在最后一个索引之前终止,但是如果您使用更大的数组,此代码将中断。使用 arr.length - 1
而不是 5
.
这一行将数组元素与其自身进行比较:
int result = arr[i].compareTo(arr[i]);
因此 result
将永远是 0
。将其更改为:
int result = arr[i].compareTo(arr[j]);
或:
int result = arr[j].compareTo(arr[i]);
尝试两种方法以了解它们之间的区别。
在上面的修复中,您比较了索引 i
和 j
上的元素。因此,您应该更改此代码:
if (result == -1) {
tempVar = arr[j + 1];
arr[j + 1] = arr[i];
arr[i] = tempVar;
}
使用 j
的正确索引:
if (result == -1) {
tempVar = arr[j];
arr[j] = arr[i];
arr[i] = tempVar;
}
您当前的代码比较 i
和 j
的元素(好吧,由于错误,不是 j
,但您是那个意思),但是由于您交换了不同的元素不同的索引 j+1
.