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

