Цикл while Строка не равна множеству других строк (Java) - PullRequest
0 голосов
/ 15 мая 2018

Я пишу метод и хотел бы начать метод со сравнения, чтобы увидеть, равна ли хранимая статическая строка другим словам. Вот это в psuedocode:

While (String1 is neither equal to "A" nor "B" nor "C" nor "D")
{
    Print (Please enter a correct option);
    Take input;
}

Любая помощь - большое спасибо.

Ответы [ 4 ]

0 голосов

В вашем случае у вас есть четыре допустимых входа, а именно "A", "B", "C", "D".Это легко может быть реализовано только с использованием логических операторов;а именно, условие петли - когда ваш ввод ни , ни "A", ни "B", ни "C", ни "D".

Scanner input = new Scanner(System.in);

System.out.println("Enter a selection (NOR): ");
String string1 = input.next();

while (    !string1.equals("A")
        && !string1.equals("B") 
        && !string1.equals("C") 
        && !string1.equals("D")) {
    System.out.println("Enter again (NOR): ");
    string1 = input.next();
}
input.close();

Но как насчет ситуаций, когда есть произвольно, но конечное число допустимых входных данных , например, наличие всех букв венгерского алфавита?Набор может быть лучшим вариантом.

Scanner input = new Scanner(System.in);

// Either manually or use a method to add admissible values to the set
Set<String> admissible = new HashSet<String>();
admissible.add("A");
admissible.add("B");
admissible.add("C");
admissible.add("D");
// ... and so on. You can also use helper methods to generate the list of admissibles
// in case if it is in a file (such as a dictionary or list of words).

System.out.println("Enter a selection (Set): ");
String string1 = input.next();

// If input string1 is not found anywhere in the set
while (!admissible.contains(string1))  {
    System.out.println("Enter again (Set): ");
    string1 = input.next();
} 
input.close();
0 голосов
/ 15 мая 2018
// static set at top of the class
private static final Set<String> SET = new HashSet<>
                                (Arrays.asList("A", "B", "C", "D"));

void func() {

    String input = takeInput();
    while(!SET.contains(input)) {

        input = takeInput();
    }
}
0 голосов
/ 15 мая 2018

Один из подходов состоит в создании простого регулярного выражения , соответствующего вашим строкам:

String input = "";
while (!Pattern.matches("FirstString|SecondString|ThirdString", input)) {
    ...
}

Шаблон регулярного выражения состоит из слов, которые вы хотите разрешить, разделенных вертикальной чертой | символ.

Примечание: Для использования цикла while необходимо установить input в несоответствующее String перед входом в цикл. Вы можете улучшить это, изменив цикл do / while:

String input;
do {
    System.out.println("Please enter a correct option");
    input = takeInput();
} while (!Pattern.matches("FirstString|SecondString|ThirdString", input));
0 голосов
/ 15 мая 2018

Как сказал Хемант в их комментарии , было бы разумно использовать Set для хранения любых String s, с которыми вы хотите проверить:

Set<String> words = Set.of("Hello", "World!");

while (!words.contains(string1)) {
    ...
}

Примечание : Set#of был представлен в Java 9, а string1 - это String, с которым вы проверяете.

...