有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

string Java:在不使用循环的情况下将输入与列表中的所有内容进行比较?

这是一个刽子手游戏。 我使用SortedSet存储用户输入的猜测。这些字母存储为字符。我试图做的是将给定单词中的每个字符与SortedSet中的每个字符进行比较,并将匹配的字符附加到返回的字符串中。如果不匹配,则添加“-”

例如:

我有一组猜测:“a”,“e”,“t”

我有一个词:苹果

该方法应返回字符串“a--e”

现在,我有一个方法可以生成一个字符串,它符合我需要的一个字符的格式。我不知道如何修改它,使其适用于集合中的所有角色

我不想为集合中的所有字符运行整个if/else结构,因为这会添加太多破折号,所以我不认为我可以为每个循环使用一个

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;
}

共 (2) 个答案

  1. # 1 楼答案

    首先,听起来您应该更改方法的返回类型和参数——毕竟,您需要一组字母。而集合有一个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);
    }
    

    或者换一种说法:

    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);
    }
    

    (这也可以通过Java8流实现,但这可能同样简单。)

    示例程序:

    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);
        }
    
    }
    

    请注意,您仍然在输入上循环,并且Set.contains中可能仍然存在循环(取决于实现),但它会得到您想要的结果

  2. # 2 楼答案

    你的问题在哪里

    在您的代码中,我认为它只剩下一个循环,可能是guess,应该是猜测字母的数组,您可以在第一个循环中对其进行迭代。相反,你可以每次都用每一个猜测的字母给你的生成模式打电话