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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:35:30