Java数组输出空白、输入异常问题求助及代码修正
修正后的Java代码:将负数移至数组末尾并保持原有顺序
问题根源分析
- 输入无法停止:原代码未限制输入次数,导致Scanner持续等待输入
- 输入越界异常:未严格按照指定的数组大小
N控制输入元素数量 - 输出空白:未正确生成并输出处理后的数组
完整修正代码
import java.util.Scanner; public class MoveNegativesToEnd { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取数组大小N System.out.print("请输入数组大小N: "); int N = scanner.nextInt(); // 初始化指定大小的数组 int[] arr = new int[N]; // 读取N个元素,严格控制输入数量 System.out.println("请输入" + N + "个整数(可正可负):"); for (int i = 0; i < N; i++) { // 检查是否还有有效输入,避免阻塞 if (scanner.hasNextInt()) { arr[i] = scanner.nextInt(); } else { System.out.println("输入无效,使用默认值0填充"); arr[i] = 0; } } scanner.close(); // 关闭Scanner,释放资源 // 处理数组:先收集正数,再收集负数,保持原有顺序 int[] result = new int[N]; int index = 0; // 先存入所有非负数 for (int num : arr) { if (num >= 0) { result[index++] = num; } } // 再存入所有负数 for (int num : arr) { if (num < 0) { result[index++] = num; } } // 输出结果 System.out.println("处理后的数组:"); for (int num : result) { System.out.print(num + " "); } } }
关键改进点
- 输入控制:通过
for (int i = 0; i < N; i++)严格限制读取N个元素,读取完成后关闭Scanner,彻底避免持续等待输入的问题 - 越界防护:数组初始化大小为N,输入循环次数不超过N,从根源上杜绝数组越界异常
- 输出修复:通过两次遍历原数组,分别收集正数和负数,保证两类元素各自的原有顺序,最后遍历输出处理后的数组
测试示例
输入:
8 1 -1 3 2 -7 -5 11 6
输出:
处理后的数组: 1 3 2 11 6 -1 -7 -5
内容的提问来源于stack exchange,提问作者Uday Deshmukh
相关产品推荐
相关产品推荐

