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

