Не выполняется условие в if/else

94
17 апреля 2021, 14:10

В данной части кода пользователю необходимо ввести номер банковской карты, а программа должна проверить, чтобы он соответствовал шаблону XXXX-XXXX-XXXX-XXXX. Я разделяю строку CardNumber на 4 подстроки и проверяю, чтобы кол-во этих подстрок равнялось 4 и кол-во символов в каждой подстроке тоже равнялось 4. Если я все правильно понимаю, то кол-во подстрок - это subCardNumber.length, а сами подстроки и их длина - это элементы массива subCardNumber[]. Если хотя бы одно из этих условий неверно, должна выйти ошибка, однако, какие бы неправильные номера карт я не вводил, всегда выдается сообщение, что номер карты верный, т.е. выполняется только условие else. Вот сам код:

public static void main(String[] args) {
            System.out.println("Здравствуйте. Введите номер карты:");
            Scanner sc = new Scanner(System.in);
            String CardNumber = sc.nextLine();
            String[] subCardNumber;
            String delimeter = "-";
            subCardNumber = CardNumber.split(delimeter);
            if (subCardNumber.length != 4 & subCardNumber[0].length() != 4 & subCardNumber[1].length() != 4 & subCardNumber[2].length() != 4 & subCardNumber[3].length() != 4)
                System.out.println("Ошибка. Введите верный номер карты:");
            else System.out.println("Верный номер карты");
        }
Answer 1

Ошибка, очевидно, в логическом И, нужно использовать логическое ИЛИ, если вы ожидаете хотя бы одну ошибку. В данном случае, ваше исправление такое:

if (subCardNumber.length != 4 | subCardNumber[0].length() != 4 | subCardNumber[1].length() != 4 | subCardNumber[2].length() != 4 | subCardNumber[3].length() != 4)

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

С регулярными выражениями всё в разы упрощается и выглядит так:

public static void main(String[] args) {
    System.out.println("Здравствуйте. Введите номер карты:");
    Scanner sc = new Scanner(System.in);
    String CardNumber = sc.nextLine();
    if (Pattern.matches("^\d{4}-\d{4}-\d{4}-\d{4}$", CardNumber))
        System.out.println("Верный номер карты");
    else System.out.println("Ошибка. Введите верный номер карты:");
}

Как вам такой вариант? :)

READ ALSO
анализ работы батареи android

анализ работы батареи android

Требуется анализировать работу батареи в реальном времени так, чтобы получить предположительные сведения о том, сколько осталось времени...

111
Почему Cursor возвращает null IntentService Android

Почему Cursor возвращает null IntentService Android

При создании уведомления я получаю значение Uri такого формата

87
Подскажите как с другого класса добавить текст в TextArea JavaFX чтобы оно отобразилось в приложении?

Подскажите как с другого класса добавить текст в TextArea JavaFX чтобы оно отобразилось в приложении?

Не могу понять как это сделать, уже все перепробовалTextArea находится в классе BotOverviewController, а передаю данный с класса MainApp

115
Массив чисел в одно число через Stream

Массив чисел в одно число через Stream

Дано - входящий массив; из которого нужно убрать все дубликаты и вернуть число, состоящее из оставшихся чисел массиваРеализовать нужно через...

136