当前位置: 首页 > 知识库问答 >
问题:

JavaHangman类方法错误

越开畅
2023-03-14

我几乎完成了一个基本的刽子手游戏,但我在课堂上遇到了“makeGuess”方法的困难。我试图测试用户输入(他们的一个字符猜测)与秘密单词,并更新伪装的单词,如果他们的猜测是正确的或不正确的。任何正确方向的建议或指点都将不胜感激。每次运行时都会出现以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 11
at java.lang.String.charAt(String.java:686)
at hangmandemo.Hangman.makeGuess(Hangman.java:42)
at hangmandemo.HangmanDemo.main(HangmanDemo.java:24)
Java Result: 1

这是刽子手课:

package hangmandemo;

public class Hangman {

private String secretWord;
private String disguisedWord;
private int guesses;
private int wrongGuesses;
boolean found=false;

public String getDisguisedWord() {
    return disguisedWord;
}

public String getSecretWord() {
    return secretWord;
}

/**
 * returns number of guesses
 */
public int getGuesses() {
    return guesses;
}

/**
 * continues game until secretWord is found
 */
public boolean isFound() {
    return found;
}

/**
 * brings in a char to test against String
 */
public void makeGuess(char c) {
    for (int i = 0; i <= disguisedWord.length(); i++) {

        if (c == secretWord.charAt(i)) {
            disguisedWord = disguisedWord.substring(0, i-1) + c + disguisedWord.substring(i+1);

        }
        if (secretWord.equals(disguisedWord)) {
            found = true;
        }
    }
    wrongGuesses++;
}

/**
 * assigns secret String to secret word
 */
public void createSecretWord(String secret) {
    secretWord = secret;
}

/**
 * disguises secret word with "???"
 */
public void createDisguisedWord() {

    for (int i = 0; i < secretWord.length(); i++) {
        disguisedWord += "*";
    }
}

/**
 * returns number of wrong guesses
 */
public int getWrongGuesses() {
    return wrongGuesses;
}

}

这是我的演示课

package hangmandemo;
import java.util.Scanner;
public class HangmanDemo {
public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    Hangman game = new Hangman();
    game.createSecretWord("assessments");
    game.createDisguisedWord();
    System.out.println("This is the hangmandemo. Press the number '3' to quit.");
    System.out.println("The disguised word is..."+ game.getDisguisedWord());
    while (!game.isFound()) {
        System.out.println("Enter a one character guess");
        char c = keyboard.next().charAt(0);
        if (c == 3) {
            System.out.println("game over, the word was... " + game.getSecretWord());
            System.exit(0);
        }
        game.makeGuess(c);
        System.out.println(game.getDisguisedWord());
    }

    System.out.println("you guessed it, the word was... " + game.getSecretWord());
    System.out.println("you had " + game.getGuesses() + " guesses.");
    System.out.println("you had " + game.getWrongGuesses() + " wrong guesses.");
}

}

共有3个答案

钱震博
2023-03-14

替换为(int i=0; i

for(int i=0;i

在JAVA中,所有东西都是基于0的索引:“abc”在索引0处有字符'a''b'1处和'c'2处,其长度是3

劳夕
2023-03-14
int i = 0; i <= disguisedWord.length(); i++

这一行,您必须更改

祁承望
2023-03-14

这里有3个问题。

在你的圈子里

for (int i = 0; i <= disguisedWord.length(); i++) 

convergedword的最后一个元素是'convergedword[convergedword.length-1],因为数组的索引从0开始。

按照惯例,循环的格式如下

for (int i = 0; i < disguisedWord.length(); i++) 

但这还不够,因为

disguisedWord.substring(i+1)

会在那一点上出界。

还有这个表达

disguisedWord.substring(0, i-1)

将在i=0时引发异常;

你需要更仔细地关注你这里的边缘条件。

 类似资料:
  • 我正在使用JUnit 5,并从“软件测试”书中复制了代码,以便创建一个模拟对象进行测试。部分测试器代码是: 我有一个编译器错误,它说“方法isLeap(int)必须覆盖或实现一个超类型方法”。此错误在我覆盖isLeap()方法的行中报告。(@over下面的行) 好吧,令人惊讶的是,这就是我所做的。所以我不知道这是什么抱怨。下面是simpleDate类中的isLeap()方法: 正如您所看到的,测试

  • 在讲类方法和静态方法之前,先来看一个简单的例子: class A(object): def foo(self): print 'Hello ', self >>> a = A() >>> a.foo() Hello, <__main__.A object at 0x10c37a450> 在上面,我们定义了一个类 A,它有一个方法 foo,然后我们创建了一个对象 a,并调用

  • 问题内容: 我有一种方法来创建类的对象列表 我的产品类别是: 我收到一个错误,指出该类型的方法未定义,其他方法也是如此。请帮助我解决此错误。 我的说法正确吗? 问题答案: 我的说法正确吗? 不,这是不正确的。产品不是类的实例,而是类的实例。List没有任何称为的方法。 如果要从列表中检索元素并使用它创建另一个实例,可以执行以下操作: 但是请确保您在列表中有元素,否则您可能会遇到异常。product

  • 我得到一个错误: 错误:在类testPackage.Method1中找不到Main方法,请将Main方法定义为:public static void Main(字符串[]args)或JavaFX应用程序类必须扩展JavaFX.application.application“ 该计划是:

  • 嗨。我刚到爪哇。我正试图写一个继承程序,得到这个错误。 错误:在类myPackage.inheritage中找不到Main方法,请将Main方法定义为:public static void Main(string[]args)或JavaFX应用程序类必须扩展JavaFX.application.application