当我两次使用sortAsc_byPosition函数
public class stringArraySort {
public static String[] sortAsc_byPosition(String[] str, int charPosition) {
for(int r=0; r<str.length-1; r++) {
for(int i=r+1; i<str.length; i++) {
int j=charPosition;
while (str[r].charAt(j)==str[i].charAt(j)) {
j++;
}
if (str[r].charAt(j)>str[i].charAt(j)) {
String tmp=str[i];
str[i]=str[r];
str[r]=tmp;
}
}
}
return str;
}
public static void main(String[] args) {
String[] productID= {"Xcra-S1836", "Zkda-D3426", "Ypdu-B5654", "Akdr-Z5075", "Jhbd-K4051"};
String[] result1=sortAsc_byPosition(productID, 5);
String[] result2=sortAsc_byPosition(productID, 6);
System.out.println("Result of array sorted by character position at 5 :" + Arrays.toString(result1));
System.out.println("Result of array sorted by character position at 6 :" + Arrays.toString(result2));
}
要获得所需的结果,该功能无法实现。
但是,当我只使用一次该功能时,它就可以工作。
public static void main(String[] args) {
String[] productID= {"Xcra-S1836", "Zkda-D3426", "Ypdu-B5654", "Akdr-Z5075", "Jhbd-K4051"};
String[] result1=sortAsc_byPosition(productID, 5);
System.out.println("Result of array sorted by character position at 5 :" + Arrays.toString(result1));
}
此问题的主要原因是什么?正确的制作方法是什么?感谢您的回答...
答案 0 :(得分:3)
您的sortAsc_byPosition
方法接受一个数组,对该数组进行更改并返回相同的数组。这意味着result1 == result2
(两个变量都是对同一数组对象的引用)。
因此,当您两次执行该方法时,最后将看到的结果是第二个调用使用的排序顺序。
如果要具有两个不同顺序的不同数组,则应返回该数组的副本。
例如:
public static String[] sortAsc_byPosition(String[] str, int charPosition) {
String[] result = Arrays.copy(str,str.length);
for(int r=0; r<result.length-1; r++) {
for(int i=r+1; i<result.length; i++) {
int j=charPosition;
while (result[r].charAt(j)==result[i].charAt(j)) {
j++;
}
if (result[r].charAt(j)>result[i].charAt(j)) {
String tmp=result[i];
result[i]=result[r];
result[r]=tmp;
}
}
}
return result;
}