Java 程序正在返回已排序的索引,但数组从未排序
我的程序有一个方法,允许用户搜索数组中的元素并返回其索引。出于某种原因,它返回的索引与数组排序时的索引相同,而数组从未排序过 方法如下:Java 程序正在返回已排序的索引,但数组从未排序,java,Java,我的程序有一个方法,允许用户搜索数组中的元素并返回其索引。出于某种原因,它返回的索引与数组排序时的索引相同,而数组从未排序过 方法如下: public static ArrayList elementIndex(int search) { ArrayList<Integer> index = new ArrayList<Integer>(); for (int i = 0; i<array.length; i++)
public static ArrayList elementIndex(int search) {
ArrayList<Integer> index = new ArrayList<Integer>();
for (int i = 0; i<array.length; i++)
if (search == array[i]) {
index.add(i + 1);
}
return index;
}
publicstaticarraylistelementindex(int-search){
ArrayList索引=新的ArrayList();
对于(int i=0;i最常见计数){
mostCommonCount=currentCount;
MOST公共=阵列排序[i];
}
}
其他的
currentCount=0;
}
返回最常见的;
}
arraySorted
在代码中(mostCommon
方法)是对(全局)变量array
的引用-两者都指向同一对象。因此,发生在一个数组上的情况也会发生在另一个数组上。也就是说,当你对一个数组进行排序时,另一个(相同的数组)也会被排序。Arrays.sort()
是一种变异方法——它(永久地)修改应用它的数组。如果您以前对数组进行了排序,它将在程序中保持排序状态。请使用int[]arraySorted=Arrays.copyOf(array,array.length)制作一个副本只是好奇而已。为什么在i+1
中使用+1?我认为它应该是index.add(I)
,这样它看起来更漂亮,第一个元素将返回1,而不是0@SamuelToh@EthanO可以只要你知道你在做什么就好了。因为我认为您可能忽略了以下事实:数组的第一个索引以0而不是1开始。
public static int mostCommon(int size) {
int[] arraySorted = array;
int mostCommon = 0, mostCommonCount = 0, currentCount = 0;
Arrays.sort(arraySorted);
for (int i = 1; i < size; i++) {
if (arraySorted[i - 1] == arraySorted[i]) {
currentCount++;
if (currentCount > mostCommonCount) {
mostCommonCount = currentCount;
mostCommon = arraySorted[i];
}
}
else
currentCount = 0;
}
return mostCommon;
}