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

Java中按下回车键时如何设置循环终止条件?

问题分析与解决方案

原代码的核心问题是循环终止条件逻辑错误:先调用sc.next()读取单词,再用sc.hasNext()判断是否存在下一个输入。当读取到最后一个单词后,sc.hasNext()会一直阻塞等待新输入(因为它无法确定是否还有后续内容),导致程序无法正常终止。

修正后的代码

import edu.princeton.cs.algs4.StdRandom;
import java.util.Scanner;

public class RandomWord {

    public static void main(String[] args) {
        String winner = null;
        Scanner sc = new Scanner(System.in);
        int i = 1;
        // 先判断是否有可读取的单词,再执行读取操作
        while (sc.hasNext()) {
            String x = sc.next();
            // 蓄水池抽样算法:以1/i的概率选中当前单词作为winner
            if (StdRandom.bernoulli(1.0 / i)) {
                winner = x;
            }
            i++;
        }
        sc.close();
        System.out.println(winner);
    }
}

关键修正点

  • 将循环条件改为while(sc.hasNext()),每次迭代先检查是否存在下一个可读取的单词,无输入时直接退出循环,避免阻塞。
  • 调整概率计算为1.0 / i,避免整数除法导致概率始终为0,确保蓄水池抽样逻辑正确。
  • 移除原代码中多余的输出语句,若需要打印每个读取的单词,可重新添加System.out.println(x)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:07:04