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
相关产品推荐
相关产品推荐

