Java, сравнивающий 10<-5, становится правдой

Я изучаю java и столкнулся с проблемой, у меня есть упражнение max/min, и я попробовал приведенный ниже код, для положительных чисел он работает нормально, но когда я пробую отрицательные числа, все становится грязным.

Если вы введете 5, вы получите min = 5 и max = 5, если вы введете 10 после, вы получите min = 5 max = 10, пока все хорошо, но если вы наберете -5, вы получите min = -5 и max = -5, и все становится еще более странным, если вы наберете 7, вы получите min = -5 и max = 7.

Может кто-нибудь объяснить, почему это происходит?

public static void main(String[] args) {
    int ctrl;
    int min = 0;
    int max = 0;
    boolean hasNextInt;
    Scanner scanner = new Scanner(System.in);
    int counter = 0;
    while (true) {
        System.out.println("Enter your number:");
        hasNextInt = scanner.hasNextInt();  
        if (hasNextInt) {
            ctrl = scanner.nextInt();
            if (counter == 0) {
                min = ctrl;
                max = ctrl;
                counter ++;
            }
            if (min>ctrl)
                min = ctrl;
            if (max<ctrl);
                max = ctrl;
            System.out.println("Minimum Number entered: " + min);
            System.out.println("Maximum Number entered: " + max);
            System.out.println("");
            scanner.nextLine();
        }else {
            System.out.println("Invalid Number. Program stop working.");
            break;
        }
    }
    scanner.close();
}

Дубликат: stackoverflow.com/questions/14112515/…

Tom 18.02.2019 14:03
if (max<ctrl); точно ничего не делает, а это означает, что следующая строка (max = ctrl;) всегда выполняется.
Thomas Kläger 18.02.2019 14:03

Уберите ; после if (max<ctrl)

Chris623 18.02.2019 14:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
if (max<ctrl);
  max = ctrl;

Этот отступ вводит в заблуждение.

Используйте IDE, которая выполняет форматирование кода. То, что вы действительно написали,

if (max<ctrl){}
max = ctrl;

Также избегайте if/else/for и т. д. без {}.

Другие вопросы по теме