【问题标题】: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"?

标签: java arrays integer


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2014-05-25
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    相关资源
    最近更新 更多