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

Java刽子手代码

郝杰
2023-03-14

我已经被这段代码困扰了一段时间,非常感谢您的帮助。因此,基本上我的刽子手代码运行良好,但控制台中的显示,破折号应该反映哪些字母猜对了,哪些字母仍然需要猜对,这是完全错误的。我将在这里发布我的代码。由于时间很长,我将只发布相关的方法。我觉得问题似乎出在显示数组列表上,我无法持续更新它。

     public void play() {

     String SecretWord = getWord();
     ArrayList <String> lettersInWord = new ArrayList <String>();
     for (int i=0;i<SecretWord.length();i++){
            lettersInWord.add(Character.toString(SecretWord.charAt(i)));
            }
     int remainingChances = getNumberGuesses();
     int noOfLetters = SecretWord.length(); 
     ArrayList<String> lowerCaseAlphabets = getAlphabetArrayList();
     ArrayList<String> display = new ArrayList<String>();
     for (int i = 0; i<noOfLetters; i++) {
         display.add("_");
     }
     System.out.println(printDisplay(display));
     Set <String> lettersGuessed = new HashSet<String>();
     while (remainingChances > 0){
         String question = readString("What letter do you want to guess?");
         if (lowerCaseAlphabets.contains(question)){
         System.out.println("Number of misses remaining equals "+remainingChances+"");
         int index = lettersInWord.indexOf(question);
            if (index== -1){
                lettersGuessed.add(question);
                remainingChances-= 1;
                if (remainingChances==0){
                    System.out.println("No "+question+". You lose! The secret word was "+SecretWord+"");
                }
                else if (remainingChances>0){
                    System.out.println("There is no "+question+" in the word");
                    System.out.println(printDisplay(display));
                    System.out.println("Guesses so Far :"+lettersGuessed+"");

                }
            }
            else if (index!=-1){
                while (index!= -1){
                    display.set(index, question);
                    System.out.println(printDisplay(display));
                    System.out.println("Guesses so Far :"+lettersGuessed+"");
                    lettersInWord.remove(index);
                    if (lettersInWord.size()==0){
                        System.out.println("You have won! Congratulations!");
                        return;
                    }
                    else if (lettersInWord.size()!=0){
                        index = lettersInWord.indexOf(question);

                    }
                }

            }
         }
         else {
             System.out.println("The letter you have chosen in invalid. You must pick a lower case letter from the alphabet!");

         }
     }
}            

    public String printDisplay(ArrayList<String> display){
    String View = "";
    for (int i =0;i<display.size();i++){
        View+= display.get(i) + " ";
    }
    return View;
}   

共有1个答案

胡元明
2023-03-14

问题在于这一行:

lettersInWord.remove(index);当你调用这个时,你正在移动数组列表,所以当你得到新的索引时,它将是不正确的,因为它已经被移动了。例如,让我们说秘密词是“测试”。起初,数组列表将是[t, e, s, t],当你要求第一个t的索引时,你会得到0(正确)。但是打电话arraylist.remove你会有[e. s. t]。当请求第二个t的索引时,它将返回2而不是您要查找的3。

也许你应该有一个第二个数组列表,它保持秘密单词不变,你将使用它进行索引查找,并保持第一个数组列表来存储剩余的字母。

 类似资料:
  • 嗨,我是编程新手,我们的任务是制作一个刽子手游戏。现在我面临的问题是猜测。程序猜对了一切,并且工作正常。虽然它不会打印出中的字母,或者它会打印出1个字母,但当我猜正确时,上一个字母会被覆盖。 那么,有谁能伸出援助之手呢? 这是我的检查代码: }

  • 我目前正在用java编写一个hangman控制台游戏,到目前为止还没有遇到任何问题。 我现在遇到了一个似乎无法解决的问题。 我有不同单词的数组容易,中等和困难,并根据选择的难度随机从他们得到一个单词。然后我把这个单词转换成*'s,这样玩家就看不到角色了。 然后向用户索要信件,程序会通知用户信件是对还是错。但问题是,如果*在单词中,我似乎无法将*改为字母。例如,如果单词是“蜜蜂”,玩家选择了b,我想

  • 在我的游戏中出现的问题是,当我试图在游戏中插入单词时,它不显示字母,它应该在正确的时候显示字母,如果它是错误的,它应该通过增加刽子手的一部分来惩罚我。 我创建了惩罚函数和函数,当它正确时显示用户输入的字母,请帮助!! 这是我的代码:http://pastebin.com/du98i88G 我认为在pygame中的函数` 中可能存在问题,而不是gameQuit:for event。事件get():i

  • 我想做一个刽子手游戏。每转一圈,用户猜一个字母。如果他们猜对了,他们可以再猜一次。否则,它们剩余的可用猜测将减少1,猜测的字母将放入一个数组中。 当用户点击零剩余猜测时,程序应该询问他们是否想再次玩。如果他们回答“是”,则应重新启动游戏;如果他们回答“否”,则程序结束。 我遇到的问题是用于猜测的数组,以及重新启动游戏。 此外,程序启动时每隔一段时间都会出错。错误是 线程“main”java中出现异

  • 我是java新手,我正在尝试创建一个基本的刽子手游戏,我已经为这一轮创建了方法,但我一直在创建一个布尔值,该值将使游戏进入下一轮(如果玩家输入了错误的字母,他将失去一次猜测字母的尝试;他可能只会出错10次;如果猜测,他将继续游戏)。我的代码到目前为止,我甚至尝试通过if/else语句排除布尔值,但对我来说它似乎非常愚蠢。任何帮助都是有用的。非常感谢。

  • 我正在做一个刽子手游戏。我几乎完成了,但我编写的代码,无论何时,只要隐藏的单词中有两个或两个以上的点需要用猜测的字母替换,都只适用于第一个。例如,如果要查找的单词是“ball”,用户输入“b”和“l”,而不是“b_ll”,那么他将返回的隐藏单词是“b_l_”。这是一种奇怪的练习,因为用户首先键入字母,每次猜测后都没有得到反馈。这是密码。 先谢谢你。