【问题标题】:Array is giving wrong output?数组给出错误的输出?
【发布时间】:2020-04-19 09:59:27
【问题描述】:

输入:

1
7
4 2 4 1 4 3 4

输出:

[I@59e84876
4

数组的预期输出应该是 [4 2 4 1 4 3 4] 但为什么它给出了一些随机字符串作为输出,而 Hashset 却给出了完美的输出。

import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);

        int n=s.nextInt();

        for(int i=0;i<n;i++){

            int no=s.nextInt();

            HashSet<Integer> h = new HashSet<>();
            int[] arr = new int[no];

            for(int j=0;j<arr.length;j++){
                int x=s.nextInt();
                arr[j]=x;
                h.add(x);
            }
        }

           System.out.println(arr);
           System.out.println(h);
    }
}

【问题讨论】:

  • 你的代码无效,无法编译,harr定义了insidefor 但是你将它们打印在 outside for
  • 在循环内移动 2 打印时,结果不是您给出的结果,“4”被“[1,2,3,4]”替换。
  • "it give some random string" no,表示它是int(I)及其地址的数组([)
  • @SadmanSakib ,谢谢它正在工作,但为什么要转换成字符串?
  • @bruno,谢谢你我明白了

标签: java arrays hashmap integer


【解决方案1】:

首先,您的代码中存在错误。您应该在 for 循环范围之外初始化 HashSet 和 int[] 数组的实例,以便在该循环范围之外访问它。

如果你做对了,那么你的问题的答案是,当你打印一个数组时 Object.toString() 方法被调用。正如您在问题中提到的“随机字符串”,它返回一个 hashCode 值。另一方面,HashSet 覆盖 toString() 方法并返回一个字符串表示。

如文档中所述 -

返回此集合的字符串表示形式。字符串表示由集合元素的列表组成,按其迭代器返回的顺序排列,用方括号 ("[]") 括起来。相邻元素由字符“、”(逗号和空格)分隔。通过 String.valueOf(Object) 将元素转换为字符串。

因此,要在代码中打印整数数组的字符串表示形式,您可以使用 util 包中的 Arrays 类。代码是这样的-

System.out.println(Arrays.toString(arr));

如果你有一个多维数组,那么你可以使用以下-

System.out.println(Arrays.deepToString(arr));

【讨论】:

    【解决方案2】:

    首先,您需要在 for 循环之前/外部定义 arrh
    其次,如果您希望您的数组输出看起来像这样 - [4 2 4 1 4 3 4],有两种方法:
    1. 使用 ArrayList 代替原始 int 数组,即
    List&lt;Integer&gt; arr = new ArrayList&lt;Integer&gt;(); 并添加条目。
    2.不要直接用println()打印数组arr,而是使用循环:

    System.out.print("[");
    for (int i: arr)
      if (i!=arr[arr.length-1])
        System.out.print(i + ",");
      else 
        System.out.print(i + "]");
    

    【讨论】:

    • 你不需要实现它。它已经在JDK中。只需使用java.util.Arrays.toString(array)
    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 2020-09-08
    • 2015-12-02
    • 2018-04-14
    • 2021-02-11
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多