我几乎完成了一个基本的刽子手游戏,但我在课堂上遇到了“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.");
}
}
将替换为(int i=0; i
带
for(int i=0;i
在JAVA中,所有东西都是基于0的索引:
“abc”
在索引0
处有字符'a'
,'b'
在1
处和'c'
在2
处,其长度是3
。
int i = 0; i <= disguisedWord.length(); i++
这一行,您必须更改
这里有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
下面是我的课: