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

如何用Scanner输入正数并存入数组,输入负数时停止?

解决正数存入数组、输入负数终止的问题

嘿,我看你正在写一段Java代码,需求是把输入的正数存入数组,直到输入负数就停止对吧?你的现有代码还没写完,我来帮你补全并修正逻辑问题~

原代码的问题

你原来的for循环条件是基于数组长度的,这会导致不管你输入负数与否,都会循环到数组填满,不符合“输入负数就停止”的需求;而且你只在循环前读取了一次输入,后续循环里没有重新获取新的输入值。

修正后的完整代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] mas = new int[50]; // 定义最多存50个正数的数组
        System.out.println("Type positive numbers or type negative to stop the program");
        
        int index = 0; // 用来追踪数组当前存入的位置
        while (index < mas.length) { // 防止数组越界
            int n = sc.nextInt();
            if (n < 0) { // 输入负数,终止循环
                break;
            }
            mas[index] = n; // 存入正数
            index++; // 位置后移
        }
        
        // 可选:打印存入的数组内容,验证结果
        System.out.println("You entered the following positive numbers:");
        for (int i = 0; i < index; i++) {
            System.out.print(mas[i] + " ");
        }
        
        sc.close(); // 关闭Scanner资源
    }
}

关键逻辑说明

  • 用while循环替代原for循环,更贴合“直到满足终止条件才停止”的场景
  • 每次循环都读取新的输入值,判断是否为负数:如果是就break终止循环;如果是正数就存入数组,同时移动索引
  • 加入了数组越界判断(index < mas.length),避免超过数组定义的50个元素上限
  • 最后加了可选的打印逻辑,方便你验证存入的结果

比如你输入示例序列0 15 15 5 0 10 25 5 0 0 5 15 10 40 10 30 -2,程序会把前面的正数都存入数组,遇到-2就停止,然后打印出所有存入的正数。

内容的提问来源于stack exchange,提问作者Oleg Khegay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:57