我正在按升序和降序对数组进行排序。我创建了两个方法并从 main 中调用它们。这些方法单独工作得很好,但是当我调用它们时,看起来最后一个方法会覆盖第一个方法的值。 我知道这应该很容易,但我不明白发生了什么。有人可以向我解释一下吗?
import java.lang.reflect.Array;
public class Test {
public static void main(String[] args) {
int[] mayor, menor;
int[] array1 = new int[] {5,3,10,8,27,4,1 };
mayor= ordenMayor(array1);
menor= ordenMenor(array1);
for(int i=0; i<mayor.length ;i++) {
System.out.print(" "+mayor[i]+" ");
}
System.out.println("");
for(int i=0; i<menor.length ;i++) {
System.out.print(" "+menor[i]+" ");
}
System.out.println("");
for(int i=0; i<array1.length ;i++) {
System.out.print(" "+array1[i]+" ");
}
}
public static int[] ordenMayor(int[] arrayM) {
int[] arrayMayor=arrayM;
int mayor;
int index;
for(int i=0; i<arrayMayor.length - 1;i++) {
mayor=arrayMayor[i];
index=i;
for(int j=i; j<arrayMayor.length ;j++) {
if(arrayMayor[j]>mayor) {
mayor=arrayMayor[j];
index=j;
}
}
arrayMayor[index]=arrayMayor[i];
arrayMayor[i]=mayor;
}
return arrayMayor;
}
public static int[] ordenMenor(int[] arraym) {
int[] arrayMenor=arraym;
int menor;
int index;
for(int i=0; i<arrayMenor.length - 1;i++) {
menor=arrayMenor[i];
index=i;
for(int j=i; j<arrayMenor.length ;j++) {
if(arrayMenor[j]<menor) {
menor=arrayMenor[j];
index=j;
}
}
arrayMenor[index]=arrayMenor[i];
arrayMenor[i]=menor;
}
return arrayMenor;
}
}
第一个应该是降序,第二个应该是升序(是正确的),最后一个应该是未排序的数组。
1 3 4 5 8 10 27
1 3 4 5 8 10 27
1 3 4 5 8 10 27
最佳答案
问题出在您的 orderMayor
和 orderMenor
方法中。我将在这里讨论 orderMayor
,因为它们都有相同的问题。
具体来说,该行
int[] arrayMayor = arrayM;
正在将arrayMayor
重新分配为对arrayM
的引用。注意!我说的是“引用”。这是因为这个赋值实际上并不复制数组的内容(更技术地说,它只复制数组对象的地址)。
您需要克隆数组,然后对其进行操作,例如:
int[] arrayMayor = arrayM.clone();
这会创建一个 shallow copy数组并将其分配给 arrayMayor
,因此当您对数组进行操作时,它不会覆盖旧数组。
关于java - 为什么数组会被最后一个方法覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56710561/