【发布时间】:2022-01-20 23:05:42
【问题描述】:
我正在研究从有序数组中删除重复元素。真的是基本问题。但是,我很沮丧,因为我以为我做错了几个小时,却发现实际上输出是正确的,而 Arrays.toString 似乎打印输出错误。见下文:
public class RemoveDuplicate {
static int[] arr = { 5, 1, 2, 6, 4, 4, 4, 4, 4, 5, 6, 8, 7 , 10, 10, 10, 11};
public static void removeDuplicateUsingSorting(int[] arrtoChg) {
//Sort an unsorted array
Arrays.sort(arrtoChg);
int len = arrtoChg.length;
int j = 0;
//Traverse an array
for (int i = 0; i < len - 1; i++) {
//if value present at i and i+1 index is not equal
if (arrtoChg[i] != arrtoChg[i + 1]) {
arrtoChg[j++] = arrtoChg[i];
}
}
arrtoChg[j++] = arrtoChg[len - 1];
for (int k = 0; k < j; k++) {
System.out.print(arrtoChg[k] + " ");
}
System.out.println();
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("arrtoChg: " + Arrays.toString(arrtoChg));
}
public static void main(String[] args) {
removeDuplicateUsingSorting(arr);
}
}
这与 Arrays.toString() 有关吗,还是我遗漏了什么?这是因为参数 int[] arrToChg 实际上是指实例变量吗?如果是这种情况,为什么手动打印会起作用?我想不出任何其他原因。
【问题讨论】:
-
定义“错误”?您只打印循环中的第一个
j元素…… -
输出是什么?
-
您可能希望将结果复制到大小为
j的数组中,否则您的数组末尾会出现垃圾。