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

Java新手编写整数数组输入程序遇错误求助

帮你修正Java输入数组的代码问题

嘿,作为Java新手碰到这种输入输出的小问题太正常啦,我帮你梳理下这段代码里的关键问题,再给你修正后的版本:

你的代码里的核心问题

  • 打印数组的方式错误:直接用System.out.println(arr)输出的是数组的内存哈希值(比如[I@1b6d3586这种格式),根本看不到数组里的整数内容。
  • 输入读取的潜在坑:用reader.nextLine()读取数组长度后,输入缓冲区里会残留一个换行符,虽然nextInt()会自动跳过空白字符,但如果后续输入格式和预期不一致,可能会触发读取异常。更稳妥的方式是用nextInt()读取长度。

修正后的完整代码

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 初始化Scanner读取控制台输入
        Scanner reader = new Scanner(System.in);
        
        // 用nextInt()读取数组长度,避免换行符残留问题
        int length = reader.nextInt();
        int[] arr = new int[length];
        
        // 循环读取数组元素
        for (int counter = 0; counter < length; counter++) {
            arr[counter] = reader.nextInt();
        }
        
        // 用Arrays.toString()把数组转为可读字符串打印
        System.out.println(Arrays.toString(arr));
        
        // 关闭Scanner,养成资源回收的好习惯
        reader.close();
    }
}

关键修改说明

  • 引入java.util.Arrays类,用Arrays.toString(arr)将数组转换成[1, 2, 3]这种直观的字符串格式,能直接看到数组里的所有元素。
  • 把读取长度的reader.nextLine()改成reader.nextInt(),彻底避免换行符留在缓冲区引发的潜在问题。
  • 增加reader.close(),用完Scanner后关闭它是规范的编程习惯,能避免不必要的资源泄漏。

如果你的场景确实需要用nextLine()读取长度(比如长度和其他文本在同一行输入),记得在读取完长度后调用reader.nextLine()清空缓冲区的换行符,再去读取数组元素,示例如下:

int length = Integer.parseInt(reader.nextLine());
// 清空缓冲区里的换行符
reader.nextLine();
// 后续正常读取数组元素...

内容的提问来源于stack exchange,提问作者Jardinn Caracas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:21