我已经被这个代码困住了一段时间了,我真的很想得到一些帮助。所以基本上我的吊杆代码运行得很好,但是控制台中的显示,其中的破折号应该反映哪些字母猜对了,哪些字母还有待猜测,这是完全错误的。我会把我的代码张贴在这里。由于时间很长,我只会张贴有关的方法。我觉得问题就在显示数组列表上,我无法不断更新它。
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;
} 发布于 2014-01-24 06:06:07
问题是这句话:
lettersInWord.remove(index);当您调用它时,您正在移动数组列表,这样当您获得新的索引时,它将是不正确的,因为它已经被移动了。例如,让我们假设秘密词是“测试”。首先,数组列表为t,e,s,t,当您请求第一个t的索引时,您将得到0(正确)。但打电话给arraylist.remove后你会得到e.s.t。当请求第二个t的索引时,它将返回2,而不是您正在寻找的3。
也许您应该有第二个数组列表,它可以保留用于索引查找的秘密单词,并保留第一个用来存储其余字母的数组。
https://stackoverflow.com/questions/21324972
复制相似问题