Java LinkedList抛硬币连续正面判定条件1未执行排查
功能判定规则
- 条件1:若输入序列存在连续≥10次正面(head对应布尔值true,tail对应布尔值false),程序输出
Streak is found - 条件2:若输入序列连续正面次数不足10次,程序输出
Streak is broken
现存问题
基于Java LinkedList编写实现代码后,条件1始终无法正常触发输出,完整原始代码如下:
import java.util.LinkedList; import java.util.Iterator; import java.util.Scanner; public class LinkedListProgram2 { public static void main (String [] args) { Scanner input = new Scanner (System.in); LinkedList<String> cointoss = new LinkedList<String>(); boolean head = true; boolean tail = false; boolean streak = true; int streakcount = 0; System.out.println ("Welcome to the Program #2 "); //ask for the boolean value. It can be head and tail or true and false. System.out.print ("\nEnter the boolean value (head=true, tail=false): "); for (int i = 0; i<18; i++) { cointoss.add(input.next()); } Iterator<String> it = cointoss.iterator(); while (it.hasNext()) { if(streakcount >= 10) { streak = true; System.out.println ("Streak is found! "); break; } else if(streakcount < 10) { streak = false; System.out.println ("Streak is broken! "); break; } } } }
故障原因
代码存在3个核心逻辑错误,导致条件1永远无法触发:
- 迭代器遍历时从未读取元素:整个
while循环中没有调用it.next()获取当前遍历到的掷硬币结果,根本没有对输入内容做任何判断 - 连续正面计数逻辑完全缺失:
streakcount初始化后从未更新,既没有遍历到正面时累加计数的逻辑,也没有遇到反面时重置计数的逻辑,变量值始终为0 - 判断逻辑提前终止:进入循环第一次就直接判断
streakcount大小,无论结果如何都会直接break退出循环,根本没有完成序列遍历
修复后代码
import java.util.LinkedList; import java.util.Iterator; import java.util.Scanner; public class LinkedListProgram2 { public static void main (String [] args) { Scanner input = new Scanner (System.in); LinkedList<String> cointoss = new LinkedList<String>(); int streakcount = 0; boolean hasValidStreak = false; System.out.println ("Welcome to the Program #2 "); System.out.print ("\nEnter the boolean value (head=true, tail=false): "); for (int i = 0; i<18; i++) { cointoss.add(input.next()); } Iterator<String> it = cointoss.iterator(); while (it.hasNext()) { String currentRes = it.next(); // 匹配正面输入,支持head/true两种输入格式 if ("head".equals(currentRes) || "true".equals(currentRes)) { streakcount++; if (streakcount >= 10) { hasValidStreak = true; break; } } else { // 遇到反面重置连续计数 streakcount = 0; } } System.out.println(hasValidStreak ? "Streak is found" : "Streak is broken"); input.close(); } }
内容的提问来源于stack exchange,提问作者qtoou
相关产品推荐
相关产品推荐

