Java Scanner输入整数需输入两次才生效的原因与修复方法
问题产生原因
- 重复调用
Scanner.nextInt()消费输入:你在while的循环条件!(scan.nextInt() <= 0)里调用了一次nextInt(),这一步会直接读取用户输入的第一个整数,但读出来的值没有保存到变量里直接丢弃。进入循环体后你又调用了一次scan.nextInt()读取第二个整数,才会把值存到input变量做判断,直接导致每轮循环需要输入两次值才能触发输出逻辑。 - 输出逻辑不符合预期:原代码判断分支里下降场景输出的是
Not Increasing,和预期的Decreasing不一致;额外打印的Input Number:提示语也不在预期输出范围内。
修复方案
- 移除循环条件里的
nextInt()调用,把读取输入的逻辑统一放到循环体内,每轮循环只读取一次用户输入,先判断输入值是否<=0,满足则直接终止循环,不做后续判断。 - 修正判断分支的输出文本:当前输入大于上一次输入时打印
Increasing,否则打印Decreasing。 - 删除多余的
Input Number:打印语句,对齐预期的输入输出效果。
修复后完整代码
import java.util.Scanner; public class Prob1 { public static void main(String[] args) { System.out.println("Starting..."); int input; int previousInput = 0; Scanner scan = new Scanner(System.in); while (true) { input = scan.nextInt(); // 输入小于等于0时退出程序 if (input <= 0) { break; } if (input > previousInput) { System.out.println("Increasing"); } else { System.out.println("Decreasing"); } // 更新上一次输入的值,供下一轮对比 previousInput = input; } scan.close(); } }
修复后的代码运行时,每输入一个整数按回车就会立刻返回对比结果,输入小于等于0的数时程序自动退出,完全匹配预期的输入输出效果。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

