这是一个Hangman游戏.我使用SortedSet来存储用户输入的猜测.这些字母存储为char.我想要做的是将给定单词中的每个字符与SortedSet中的每个字符进行比较,并将匹配的字符附加到返回的字符串.如果不匹配,则会附加" - ".
例如:
我有一个包含猜测的集合:'a','e','t'
我有一句话:苹果
该方法应返回字符串"a --- e"
现在,我有一个方法生成一个符合我需要的格式的字符串.我不知道如何修改它,因此它适用于集合中的所有字符.
我不想为集合中的所有字符运行整个if/else结构,因为这会添加太多破折号,所以我认为我不能使用for-each循环.
private int generatePattern(String s, char guess) {
String pattern = "";
for (int i = 0; i < length; i++){
if (s.charAt(i) == guess){
pattern += guess + " ";
} else {
pattern += "- ";
}
}
return pattern;
}
Run Code Online (Sandbox Code Playgroud)
好吧,从它开始听起来你应该改变你的方法的返回类型和参数 - 毕竟你想要一组字母.而套有一个contains方法.所以我想你想要的东西:
public static String hideNonGuesses(String input, Set<Character> guesses) {
char[] result = input.toCharArray();
for (int i = 0; i < result.length; i++) {
if (!guesses.contains(result[i])) {
result[i] = '-';
}
}
return new String(result);
}
Run Code Online (Sandbox Code Playgroud)
或者换一种说法:
public static String hideNonGuesses(String input, Set<Character> guesses) {
char[] result = new char[input.length()];
for (int i = 0; i < result.length; i++) {
char c = input.charAt(i);
result[i] = guesses.contains(c) ? c : '-';
}
return new String(result);
}
Run Code Online (Sandbox Code Playgroud)
(这也可以用Java 8流完成,但这可能就是这么简单.)
示例程序:
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
Set<Character> guesses = new HashSet<>();
System.out.println(hideNonGuesses("apple", guesses));
guesses.add('p');
System.out.println(hideNonGuesses("apple", guesses));
guesses.add('o'); // No change - it's not in the word
System.out.println(hideNonGuesses("apple", guesses));
guesses.add('a');
System.out.println(hideNonGuesses("apple", guesses));
}
public static String hideNonGuesses(String input, Set<Character> guesses) {
char[] result = input.toCharArray();
for (int i = 0; i < result.length; i++) {
if (!guesses.contains(result[i])) {
result[i] = '-';
}
}
return new String(result);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然在循环输入,并且可能仍然存在循环Set.contains(取决于实现)但它获得您想要的结果...