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

