Реверсивные цифры в Java. Начальные и конечные нули не будут печататься

Проблема была в том, чтобы поменять введенные пользователем цифры. У меня это работает, но во время тестирования я понял, что он не будет печатать ни начальные, ни конечные нули.

Например, если я ввожу 10, в результате отображается только 1.

Если я введу 0110, я получу результат 11.

Вот мой код:

public class ReversingDigits {

int value;
int reverse;

public ReversingDigits() {
    value = 10;
    reverse = 0;
}// end constructor

public void reverse() {
    System.out.println("Enter a valid 2-4 digit number: ");
    Scanner input = new Scanner(System.in);
    value = input.nextInt();
    if (value < 10 || value > 9999){
        System.out.print("Please enter a valid 2-4 digit number: ");
       value = input.nextInt();
    }

    while (value > 0) {
        reverse *= 10;
        reverse += value % 10;
        value /= 10;

    }
    System.out.println("Reversed numbers are: " + reverse);

}

}//end class

Любые идеи о том, как получить нули для печати?

Спасибо

2 ответа

Решение

Убедитесь, что вы работаете со строкой, изменяя свой номер. Это сохранит ведущие нули. Как вы знаете, 00001 совпадает с 1, когда в int представление и, следовательно, преобразование этого в строку удалит все ведущие нули.

Вот ваш пример кода, модифицированный для чтения строки из входных данных и преобразования ее в int только тогда, когда вам нужно проверить диапазон.

public void reverse() {
    System.out.println("Enter a valid 2-4 digit number: ");
    Scanner input = new Scanner(System.in);
    String value = input.next();
    int valueInt = Integer.parseInt(value);

    if (valueInt < 10 || valueInt > 9999){
        System.out.print("Please enter a valid 2-4 digit number: ")
        value = input.next();
    }

    String valueReversed = new StringBuilder(value).reverse().toString();

    System.out.println("Reversed numbers are: " + valueReversed);

}

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

do {
    System.out.print("Please enter a valid 2-4 digit number: ")
    value = input.next();
    int valueInt = Integer.parseInt(value);
} while (valueInt < 10 || valueInt > 9999);
//only get here when inputted value finally within target range.

Редактировать: как уже упоминалось @Levenal, вы также можете обернуть Integer.parseInt в try/catch блок для NumberFormatException в случае, если пользователь передает нечисловой ввод.

Как уже указывалось, при изменении чисел вам гораздо лучше перевернуть строку. Если вам разрешено отклоняться от консольного ввода, JOptionPane вполне подходит для простого ввода строк, например:

    while(true){
        String input = JOptionPane.showInputDialog("Please anter a number between 10 & 9999: ");
        if(input == null){//If input cancelled
            break; //Exit loop
        } else if(input.matches("\\d{2,4}")){//Regex for at least 2 but no more than 4 numbers
            System.out.println(new StringBuilder(input).reverse().toString());//Reverse
            break;
        }
    }

Удачи!

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