-5

У меня есть конструтор в который значения я буду вводить с клавиатуры, и например я проверяю переменную waga на значение, переменая должна быть в нужном диапазоне, и проверка здесь работает отлично. Но я хочу проверить еще одну переменную bluetooth, и он должен быть равен только t или n, в противной случае, должно быть поймано исключение. Но сейчас что бы я не вводил у меня выскакивает это исключение, почему так? И еще такой вопрос почему после первого исключение я должен писать scanner.nextLine(), для того что бы оно сьело пустую строку, как она там появляеться?

    public KomputerPrzenosny() {
        super();
        this.waga = scanner.nextDouble();
        if (this.waga < 1.2 || this.waga > 3.5)
            throw new IllegalArgumentException("Waga musi byc z przedzialu 1.2kg do 3.5kg");
        scanner.nextLine();
        this.bateria = scanner.nextLine();
        this.bluetooth = scanner.nextLine();
        if (!this.bluetooth.equals("t") || !this.bluetooth.equals("n"))
            throw new IllegalArgumentException("Bluetooth powinien przyjac wartosc: t lub n");
    }
kaban.of
  • 149

1 Answers1

0

Проблема в последнем условии:

if (!this.bluetooth.equals("t") || !this.bluetooth.equals("n"))

В данном случае оно может вернуть false только тогда, когда bluetooth одновременно и t и n, что довольно тяжело реализовать.

Для решения достаточно заменить || на &&, в этом случае проверяется, что значение и не t и не n, что и требовалось по условию.

Grundy
  • 81,538
  • я сделал так boolean flag = true; if (this.bluetooth.equals("t") || this.bluetooth.equals("n")) flag = true; else throw new IllegalArgumentException("Bluetooth powinien przyjac wartosc: t lub n"); Тоже работает, сойдет? – kaban.of Aug 02 '21 at 20:01
  • @kaban.of, здесь добавлена лишняя переменная flag, ее можно было не добавлять. А почему просто не заменить || на &&? – Grundy Aug 02 '21 at 20:06
  • Ну я теперь заменю, просто раньше не знал как исправить, и придумал так сделать – kaban.of Aug 02 '21 at 20:11