java中的智囊团游戏 包edu.blastermind.model; 导入java.util.Random; /** *基于文本的策划游戏版本。提示更简单,因为您可以 *知道正确销钉的位置(但你对销钉一无所知 *颜色正确的销钉位于错误的位置)。 * *@作者 * */ 公共类BlasterMindGame{ 私有静态最终整数=5; 私人字符串秘密; /** *创建一个包含以下内容的随机秘密的新游戏 *字母组合:A、B、C、D和/或E */ 公共BlasterMindGame(){ 随机rng=新随机(); this.secret=“ABCDE”; //TODO 7:用于创建秘密字符串的循环 StringBuffer guess=新的StringBuffer(“”); 对于(int i=0;i

java中的智囊团游戏 包edu.blastermind.model; 导入java.util.Random; /** *基于文本的策划游戏版本。提示更简单,因为您可以 *知道正确销钉的位置(但你对销钉一无所知 *颜色正确的销钉位于错误的位置)。 * *@作者 * */ 公共类BlasterMindGame{ 私有静态最终整数=5; 私人字符串秘密; /** *创建一个包含以下内容的随机秘密的新游戏 *字母组合:A、B、C、D和/或E */ 公共BlasterMindGame(){ 随机rng=新随机(); this.secret=“ABCDE”; //TODO 7:用于创建秘密字符串的循环 StringBuffer guess=新的StringBuffer(“”); 对于(int i=0;i,java,for-loop,while-loop,Java,For Loop,While Loop,大家好,我正在用java编写智囊团游戏,这是一个猜字符串的游戏。这个游戏的秘密不是数字,而是由大写字母a、B、C、D和E组成的5个字符的字符串。当我运行main方法时,我得到以下结果: package edu.blastermind.model; import java.util.Random; /** * Text-based version of the Mastermind game. The hints are simpler in that you * know the pos

大家好,我正在用java编写智囊团游戏,这是一个猜字符串的游戏。这个游戏的秘密不是数字,而是由大写字母a、B、C、D和E组成的5个字符的字符串。当我运行main方法时,我得到以下结果:

package edu.blastermind.model;

import java.util.Random;

/**
 * Text-based version of the Mastermind game. The hints are simpler in that you
 * know the position of correct pegs (but you know nothing at all about
 * correctly-colored pegs in wrong positions).
 * 
 * @author
 * 
 */
public class BlasterMindGame {

    private static final int NUM_PEGS = 5;
    private String secret;

    /**
     * Creates a new game with a randomized secret consisting of some
     * combination of the letters: A, B, C, D, and/or E
     */
    public BlasterMindGame() {
        Random rng = new Random();

        this.secret = "ABCDE";
        // TODO 7: for-loop to create the secret string
        StringBuffer guess = new StringBuffer("");
        for (int i = 0; i < NUM_PEGS - 1; i++) {
            char currentChar = guess.charAt(i);
            String cs = currentChar + "";
            currentChar = (char) ((char) (currentChar));
            Character A = guess.charAt(0);
            Character B = guess.charAt(1);
            Character C = guess.charAt(2);
            Character D = guess.charAt(3);
            Character E = guess.charAt(4);
            if (cs.matches("0")) {
                guess.append(secret.charAt(A));
            }else if (cs.matches("1")) {
                guess.append(secret.charAt(B));
            }else if (cs.matches("2")) {
                guess.append(secret.charAt(C));
            }else if (cs.matches("3")) {
                guess.append(secret.charAt(D));
            }else if (cs.matches("4")) {
                guess.append(secret.charAt(E));
            }
        }
    }

    /**
     * Tries to guess the secret.
     * 
     * @param guess
     *            a 5-character string made up of only A, B, C, D, or E. Must be
     *            exactly 5 characters long.
     * 
     * @return a 5-character string made up of the characters - and O,
     *         indicating: '-' for an incorrect match in that position 'O' for a
     *         correct match in that position
     */
    public String getEasyHint(String guess) {

        String hint = "";

        return hint;
    }

    /**
     * Lets us know if we've guessed the secret or not.
     * 
     * @param guess
     *            our guess (must be exactly 5 characters long)
     * @return true if correct, false otherwise.
     */
    public boolean isGuessCorrect(String guess) {

        return this.secret.equals(guess);
    }
}
package edu.westga.blastermind.controllers;

import java.util.Scanner;

import edu.westga.blastermind.model.BlasterMindGame;

public class BlasterMind {

    public static void main(String[] args) {

        BlasterMindGame game = new BlasterMindGame();
        Scanner kb = new Scanner(System.in);
        int turns = 1;

        while(true){
        System.out.println("Enter a guess:");
        String guess = kb.next();
        if (!game.isGuessCorrect(guess)){
            System.out.println("You guessed incorrect!");
            String input = kb.next();
            turns++;
        } else if  (game.isGuessCorrect(guess)) break;
        }
        // TODO 6: write the game simulation loop


        System.out.printf("You won in %d turns\n", turns);
    }

}
线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:0 位于java.lang.StringBuffer.charAt(未知源) 位于edu.westga.blastermind.model.BlasterMindGame.(BlasterMindGame.java:29) 位于edu.westga.blastermind.controllers.blastermind.main(blastermind.java:11) 假设while循环:•只要猜测不正确,它就会运行 在正文中:

  • 告诉用户猜测不正确
  • 从扫描仪获取下一个猜测
  • 增加圈数 我认为我有这个权利(如果我没有,请告诉我),并且for循环应该:

  • 从0迭代到桩号(注意静态常量NUM_pegs)

  • 对于每个迭代: •获取介于0和NUM_PEGS-1之间的随机数(请参阅此处的nextInt(int n)随机方法以获取帮助)
    • 如果数字为0,请将“A”附加到此.secret
    • 如果数字为1,请将“B”附加到此.secret
    • 分别为2、3、4和C、D、E等

由于某种原因,当我运行程序时,我得到了上面所述的错误,我不知道如何更改它以使其正常工作。感谢您的帮助。提前感谢。

以下是异常源:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.StringBuffer.charAt(Unknown Source)
    at edu.westga.blastermind.model.BlasterMindGame.<init>(BlasterMindGame.java:29)
    at edu.westga.blastermind.controllers.BlasterMind.main(BlasterMind.java:11)
private static final int NUM_PEGS=5;
//猜测是空的(到目前为止没有字符)
StringBuffer guess=新的StringBuffer(“”);

对于(int i=0;i
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.StringBuffer.charAt(Unknown Source)
    at edu.westga.blastermind.model.BlasterMindGame.<init>(BlasterMindGame.java:29)
    at edu.westga.blastermind.controllers.BlasterMind.main(BlasterMind.java:11)
private static final int NUM_PEGS=5;
//猜测是空的(到目前为止没有字符)
StringBuffer guess=新的StringBuffer(“”);

对于(inti=0;i
  private static final int NUM_PEGS = 5;

  // The guess is empty (has no chars so far)
  StringBuffer guess = new StringBuffer(""); 
  for (int i = 0; i < NUM_PEGS - 1; i++) { // <- NUM_PEGS == 5; so the loop runs
      // And you're trying to get a char from an empty buffer...
      char currentChar = guess.charAt(i);  

您需要将字符串传递给字符串缓冲区

  private static final int NUM_PEGS = 5;

  // The guess is empty (has no chars so far)
  StringBuffer guess = new StringBuffer(""); 
  for (int i = 0; i < NUM_PEGS - 1; i++) { // <- NUM_PEGS == 5; so the loop runs
      // And you're trying to get a char from an empty buffer...
      char currentChar = guess.charAt(i);  

我强烈建议您使用调试器进行调试。如果您这样做,我认为您的错误将变得显而易见。在我实现for循环之前,while循环执行得很好,然后我开始收到上述错误。是的,您可能想考虑一下
for
loopI strongl顶部前后的行我建议您使用调试器来完成此操作。如果您这样做,我认为您的错误将变得显而易见。在我实现for循环之前,while循环执行得很好,然后我开始收到上面所述的错误。是的,您可能会想一想
for
循环顶部前后的行感谢我刚刚尝试这似乎是有效的