You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组输出异常求助:打印数组为何出现随机字符串而非预期内容

解决Java数组打印出现[I@xxxx乱码的问题

嘿,我来帮你搞定这个问题~你遇到的情况其实是Java里两个常见的小坑,咱们一步步捋清楚:

问题根源拆解

你碰到的两个核心问题:

  • 变量作用域错误:你现在的代码里,int[] arr和HashSet<Integer> h是定义在内部for循环里的,属于局部变量,循环结束后外部的System.out.println根本访问不到它们,正常情况下这段代码连编译都通不过——你能运行应该是实际代码有调整,但不管怎样,变量的作用域必须修正。
  • 数组打印方式错误:Java的数组是对象,但它没有重写toString()方法,直接用System.out.println(arr)时,会调用Object类的默认toString逻辑,输出格式就是[类型标识@哈希码]([I代表int类型数组,后面的是对象哈希码),这就是你看到[I@59e84876的原因;而HashSet类重写了toString(),所以能正常打印出元素内容。

修正后的完整代码

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        // 将数组和HashSet移到外部循环外,保证后续代码能访问
        HashSet<Integer> h = new HashSet<>();
        int[] arr = null;
        
        for(int i = 0; i < n; i++){
            int no = s.nextInt();
            arr = new int[no];
            for(int j = 0; j < arr.length; j++){
                int x = s.nextInt();
                arr[j] = x;
                h.add(x);
            }
        }
        
        // 使用Arrays.toString()打印数组的元素内容
        System.out.println(Arrays.toString(arr));
        // HashSet可以直接打印,因为它重写了toString()
        System.out.println(h);
    }
}

额外优化:自定义数组打印格式

如果你想要完全符合预期的4 2 4 1 4 3 4(无逗号、纯空格分隔)格式,可以自己遍历数组拼接输出:

// 遍历数组,空格分隔打印
for (int num : arr) {
    System.out.print(num + " ");
}
System.out.println(); // 打印完换行

这样就能得到你想要的输出效果啦~

内容的提问来源于stack exchange,提问作者Gnani Pasupula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:42:43