提问人:user11482997 提问时间:5/30/2023 最后编辑:Sujith Kumaruser11482997 更新时间:6/1/2023 访问量:52
如何调试 jack 编程语言中的 Expected )、Expected { 和 Expected 语句(do, let, while, return or if) 错误
how to debug the Expected ), Expected { and Expected statement(do, let, while, return or if) errors in jack Programming Language
问:
我正在研究杰克的编程语言,并试图制作一个刽子手游戏代码,我已经为游戏编写了没有图形表示的代码。但到目前为止,我找不到任何调试代码的帮助
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;
let displayWord = "";
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 != secretWord && attempts < maxAttempts) {
do Output.printString("\nEnter a letter: ");
let char guess = Keyboard.readChar();
let guessedLetters = guessedLetters + String.valueOf(guess);
let boolean found = false;
let int 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: " + (maxAttempts - attempts));
}
do Output.printString(displayWord);
}
do Output.printString("\nCongratulations! You guessed the word.");
}
}
现在在编译时。我有错误 在 HangmanGame.jack(第 34 行)中:在子程序播放中:预期 ) 在 HangmanGame.jack(第 34 行)中:在子例程播放中:预期 { 在 HangmanGame.jack(第 34 行)中: 在子例程播放中: 预期语句(do, let, while, return or if)
第 34 行是while (displayWord != secretWord && attempts < maxAttempts) {
我做错了什么
我试过加括号,它删除了 ) 和 { 错误,但 Expected 语句(do、let、while、return 或 if)保持不变,这对我来说毫无意义
答:
1赞
raphael
6/1/2023
#1
有时错误来自意想不到的地方,有时编译器会混淆错误发生的位置。我的猜测是,在这种情况下,错误与括号无关,而是与括号后面的语句有关:
let char guess = Keyboard.readChar();
let guessedLetters = guessedLetters + String.valueOf(guess);
let boolean found = false;
let int j = 0;
关键字用于为变量分配新值,而关键字用于声明变量。与 java 和许多其他语言不同,您可以同时执行这两项操作,但 jack 并非如此。在 jack 中,您必须在函数的开头声明所有变量,然后您可以为它们赋值(包括初始化变量):let
var
溶液
method void play() {
var String displayWord;
var char letter;
var int i;
// DECLARE variables here, just like you did the ones above, including the type
var char guess;
var String guessedLetters;
var boolean found;
var int j;
let displayWord = "";
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 != secretWord && attempts < maxAttempts) {
do Output.printString("\nEnter a letter: ");
// NOTE: notice that here I removed the type, since that goes with the
// declaration of the variables
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: " + (maxAttempts - attempts));
}
do Output.printString(displayWord);
}
do Output.printString("\nCongratulations! You guessed the word.");
}
那么为什么 jack 不允许你做一些看似简单的事情,比如在一行中声明和初始化一个变量。简单。这使得编写编译器变得更加困难!
评论