Jack语言Expected系列编译错误调试及Hangman游戏代码问题排查
Jack语言Hangman游戏编译错误修复方案
错误原因分析
- do-while语法误用:Jack的do-while循环要求语句必须包裹在
{}中,结构为do { ... } while(条件);。你错误地将独立的do Output.printString(displayWord);与后续while循环拼接,导致编译器无法识别合法语句结构,这是第三个错误的核心原因。实际需求是先执行一次打印再进入循环,因此应使用独立语句+普通while循环的组合,而非do-while。 - 局部变量未初始化:变量
i仅声明未赋值就进入循环,Jack不会为局部变量默认初始化,必须手动let i = 0;。 - 字符串比较逻辑错误:Jack中
!=比较的是字符串对象的引用而非内容,判断字符串不等需用!displayWord.equals(secretWord)。 - 局部变量声明违规:循环内
let char guess = ...属于重复声明类型,Jack要求局部变量必须在method开头用var声明,后续仅用let赋值。
修正后的完整代码
class HangmanGame { field String secretWord; field String guessedLetters; field int maxAttempts; field int attempts; constructor HangmanGame new(String word) { let secretWord = word; let guessedLetters = ""; let maxAttempts = 6; let attempts = 0; return this; } method void play() { var String displayWord; var char letter; var int i; var char guess; var boolean found; var int j; let displayWord = ""; let i = 0; while (i < secretWord.length()) { let letter = secretWord.charAt(i); if (guessedLetters.contains(String.valueOf(letter))) { let displayWord = displayWord + String.valueOf(letter); } else { let displayWord = displayWord + "_"; } let i = i + 1; } // 先执行一次打印,再进入循环 do Output.printString(displayWord); while (!displayWord.equals(secretWord) && attempts < maxAttempts) { do Output.printString("\nEnter a letter: "); let guess = Keyboard.readChar(); let guessedLetters = guessedLetters + String.valueOf(guess); let found = false; let j = 0; while (j < secretWord.length()) { if (secretWord.charAt(j) == guess) { let found = true; let displayWord = displayWord.substring(0, j) + String.valueOf(guess) + displayWord.substring(j + 1); } let j = j + 1; } if (!found) { let attempts = attempts + 1; do Output.printString("Incorrect guess. Attempts remaining: " + String.valueOf(maxAttempts - attempts)); } do Output.printString(displayWord); } do Output.printString("\nCongratulations! You guessed the word."); } }
额外说明
maxAttempts - attempts的结果是int类型,需要用String.valueOf()转换后才能和字符串拼接,否则会引发类型错误。- 所有局部变量都已移至method开头统一声明,符合Jack语言的语法规范。
内容的提问来源于stack exchange,提问作者user11482997
相关产品推荐
相关产品推荐

