Проверка пользователя в цикле Java - PullRequest
0 голосов
/ 27 сентября 2018

Я делаю один из моих первых проектов Java, проверяющих, является ли пользовательское слово ввода (без цифр или символов) палиндромом.Я использовал метод, изложенный здесь: https://stackoverflow.com/a/4139065/10421526 для логики.Код работает по запросу, но у меня возникают проблемы с повторным запросом пользователя после неверного ввода, так как кажется, что он «блокирует» способность моего кода принимать допустимый ввод, печатая мое сообщение «Повторить».Я также попробовал версию do while, но в результате я обнаружил ошибки форматирования.Я думаю, что способ определения моей переменной stringOut доставляет мне проблемы, но я не уверен, как это изменить, не создавая дубликат, как говорит Eclipse.Вот самое близкое, что я смог получить после десятков попыток, пройдя по кругу:

import java.util.Scanner;

public class PalindromTester {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);


        System.out.println("Input word to test: ");
        String stringIn = in.nextLine();
        String stringOut = new StringBuilder(stringIn).reverse().toString(); 

        while (!stringIn.matches("[a-zA-Z]+")) {
            System.out.println("Invalid input, try again.");
            in.next(); //stops infinite error loop
        }

        if ((stringIn.equalsIgnoreCase(stringOut))) {
            System.out.println("Palindrome detected");
            System.out.println("You entered: " + stringIn);
            System.out.println("Your string reversed is: " + stringOut);

}       else {
            System.out.println("Not a palindrome");
}

    }
}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

изменить in.next(); в цикле while на stringIn= in.next();, а после цикла while добавить stringOut = new StringBuilder(stringIn).reverse().toString();.

import java.util.Scanner;

    public class Test {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in = new Scanner(System.in);


            System.out.println("Input word to test: ");
            String stringIn = in.nextLine();
            String stringOut = new StringBuilder(stringIn).reverse().toString(); 

            while (!stringIn.matches("[a-zA-Z]+")) {
                System.out.println("Invalid input, try again.");
                stringIn= in.next(); //stops infinite error loop
            }
            stringOut = new StringBuilder(stringIn).reverse().toString();
            if ((stringIn.equalsIgnoreCase(stringOut))) {
                System.out.println("Palindrome detected");
                System.out.println("You entered: " + stringIn);
                System.out.println("Your string reversed is: " + stringOut);

    }       else {
                System.out.println("Not a palindrome");
    }

        }
    }
0 голосов
/ 27 сентября 2018

Очень хороший вариант использования цикла do-while.Вы используете этот цикл, когда вам необходимо убедиться, что ваши операторы выполняются хотя бы один раз.И последующее выполнение выполняется только в том случае, если оно соответствует условию.В этом случае это условие будет проверять ваш ввод .

    Scanner in = new Scanner(System.in);

    String prompt = "Input word to test: ";

    String stringIn;

    do {
        System.out.println(prompt);
        stringIn = in.nextLine();
        prompt = "Invalid input, try again.";
    }
    while (stringIn.matches("[a-zA-Z]+"));

Если вход non-numeric, то условие while будет true, и этот цикл будет запущен снова, следовательно, запрашивается новый вход.если входное значение равно numeric, то условие while будет false, поэтому выйдите из цикла while и получите пользовательский ввод в переменной stringIn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...