Оператор if / else неправильно читается программой

Это программа, которая перечисляет несколько фактов о целочисленном вводе от объекта Scanner. Однако у меня проблемы с оператором if / else в конце.

Проблема в том, что если введено положительное целое число, отличное от 0, программа всегда читает этот оператор: System.out.println("j) It is smaller than its reverse value: " + reverse);. Если это отрицательное целое число, он всегда печатает System.out.println("j) It is bigger than its reverse value: " + reverse);.

Я думаю, это потому, что данные, хранящиеся в reverse, равны 0, потому что int reverse = 0; объявлен перед циклом while. Однако программа правильно печатает обратную сторону ввода.

import java.util.Scanner;

public class Integer {

    public static void main(String[] args) {
        System.out.println("This program will:");
        System.out.println("1) Prompt you for an integer then \n2) List several facts about that integer");
        Scanner keyboard = new Scanner (System.in); // define a Scanner object attached to a keyboard
        System.out.print("\nEnter an integer: "); // prompt the user to enter an integer

        while ( ! keyboard.hasNextInt()) { // is the first input value an int?
            String badInput; // assign non-integer inputs to badInput
            badInput = keyboard.next();
            System.out.println("Error: expected an integer, encountered: " + badInput);
            System.out.print("Please enter an integer: ");
        }

        int integer = keyboard.nextInt(); // assign the input to the integer variable
        System.out.println("A list of several facts about the number: " + integer); // safe to read first input value

        System.out.println("================================================================");

        // print the input with space betweeen each digits
        System.out.print("a) The digit(s) in it is/are: ");
        String number = String.valueOf(integer);
        for ( int count = 0; count < number.length(); count++) {
            char counted = number.charAt(count); // read each digit in the input
            System.out.print(counted + " ");
        }

        System.out.println(); // skip a line

        // determine whether the input is negative or positive
        if ( integer >= 0 ) {
            System.out.println("b) It is positive");
        }
        else {
            System.out.println("b) It is negative");
        }

        // determine whether the input is even or odd
        if (integer % 2 == 0) {
            System.out.println("c) It is even");
        }
        else {
            System.out.println("c) It is odd");
        }
        int countOdd = 0;
        int countEven = 0;       
        int countDigit = 0; 
        int countZero = 0;
        int reverse = 0;
        int sum = 0;
        int product = 1;
        int readRightMost;

        while(integer != 0) {
            readRightMost = integer % 10; // read rightmost digit in the input   
            reverse = reverse * 10 + readRightMost;
            integer /= 10; // drop the rightmost digit in the input
            ++countDigit;
            sum += readRightMost;
            product *= readRightMost;                                               

            if (readRightMost % 2 == 0){ // count how many even digits are in the input
                ++countEven;
            }
            else { // count how many odd digits are in the input
                ++countOdd;
            }
            if (readRightMost == 0) { // count how many zero digits are in the input
                ++countZero;
            }              
        }
        System.out.println("d) It has " + countDigit + " digit(s)");       
        System.out.println("e) It has " + countOdd + " odd digit(s)");
        System.out.println("f) It has " + countEven + " even digit(s)");
        System.out.println("g) It has " + countZero + " zero digit(s)");
        System.out.println("h) The sum of the digits in it is " + sum);
        System.out.println("i) The product of the digits in it is " + product);

        if (integer < reverse) { // if the reverse value of an int is greater than its original value
            System.out.println("j) It is smaller than its reverse value: " + reverse);
        }
        else { // if the reverse value of an int is lesser than its original value
            System.out.println("j) It is bigger than its reverse value: " + reverse);             
        }  

        System.out.println("================================================================");
    }

}
1
0
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце вашего цикла while(integer != 0) вы знаете, что integer должен быть равен 0, и вы никогда не измените его снова до вашего if (integer < reverse), так что это также может быть if (0 < reverse), который имеет именно то поведение, которое вы наблюдаете. Чтобы исправить это, заставьте ваш цикл работать с другой переменной, чем вы проверяете позже.

Ух ты. Все это время я думал, что обратное = 0. Я совсем забыл про значение integer. Большое спасибо.

Manu 26.10.2018 04:36

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