首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Hangman代码

Java Hangman代码
EN

Stack Overflow用户
提问于 2014-01-24 05:14:45
回答 1查看 1.2K关注 0票数 0

我已经被这个代码困住了一段时间了,我真的很想得到一些帮助。所以基本上我的吊杆代码运行得很好,但是控制台中的显示,其中的破折号应该反映哪些字母猜对了,哪些字母还有待猜测,这是完全错误的。我会把我的代码张贴在这里。由于时间很长,我只会张贴有关的方法。我觉得问题就在显示数组列表上,我无法不断更新它。

代码语言:javascript
复制
     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;
}   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 06:06:07

问题是这句话:

lettersInWord.remove(index);当您调用它时,您正在移动数组列表,这样当您获得新的索引时,它将是不正确的,因为它已经被移动了。例如,让我们假设秘密词是“测试”。首先,数组列表为t,e,s,t,当您请求第一个t的索引时,您将得到0(正确)。但打电话给arraylist.remove后你会得到e.s.t。当请求第二个t的索引时,它将返回2,而不是您正在寻找的3。

也许您应该有第二个数组列表,它可以保留用于索引查找的秘密单词,并保留第一个用来存储其余字母的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21324972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档