为啥 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭]
Posted
技术标签:
【中文标题】为啥 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭]【英文标题】:Why does Arrays.toString() give a different output to printing the array manually? [closed]为什么 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭] 【发布时间】: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
的数组中,否则您的数组末尾会出现垃圾。
这能回答你的问题吗? Is Java "pass-by-reference" or "pass-by-value"?
【参考方案1】:
您的代码很好,并且 Arrays.toString 也正确地完成了它的工作。 不正确的是
System.out.println("arrtoChg: " + Arrays.toString(arrtoChg));
因为这个新数组是输入数组的副本。 为了获得想要的结果,只需制作一个新的输出数组修剪掉不需要的值
import java.util.Arrays;
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;
int[] arrOut = new int[len];
//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])
arrOut[j++] = arrtoChg[i];
arrOut[j++] = arrtoChg[len - 1];
for (int k = 0; k < j; k++)
System.out.print(arrOut[k] + " ");
System.out.println();
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("arrtoChg: " + Arrays.toString(Arrays.copyOf(arrOut,j)));
public static void main(String[] args)
removeDuplicateUsingSorting(arr);
输出
1 2 4 5 6 7 8 10 11
arr: [1, 2, 4, 4, 4, 4, 4, 5, 5, 6, 6, 7, 8, 10, 10, 10, 11]
arrtoChg: [1, 2, 4, 5, 6, 7, 8, 10, 11]
【讨论】:
以上是关于为啥 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从一道例题谈Arrays.toString()与其他String的转换方法
如何使用 System.out.print(Arrays.toString(a)) [关闭]
Python append() 与列表上的 + 运算符,为啥这些会给出不同的结果?