У меня есть программа, предназначенная для ввода данных пользователем (двузначное целое число) и вывода его обратного значения. Хотя он компилируется без ошибок, он выводит только первое целое число, но не второе.

Код программы:

  //Set variable
  int reversed = 0;
  int requiredLength = 2;
  
  //Get User Input
  Scanner sc = new Scanner(System.in);
  System.out.println("Enter a two-digit number:");

  while (sc.hasNext()) {
     //Conditional for User Input
     if (sc.hasNextInt()) {
        //Set scanner variables
        int num = sc.nextInt();
        int numLength = String.valueOf(num).length();
        if (numLength == requiredLength) {
           //Reverse integer
           int digit = num % 10;
           reversed = reversed * 10 + digit;
           num /= 10;
           System.out.println("Reversed Number: " + reversed);
           break;
        } else {
           //Error message
           System.out.println("Error: Input integer with two-digits");
           System.out.print("Please, enter a two-digit number:\n");
        }//End of conditional
     } else {
        //Error message
        System.out.println("Error: Input not an integer");
        System.out.print("Please, enter a two-digit number:\n");
        sc.next();
     }//End of conditional
  }//End of while loop

Предпочтительный вывод:

Please enter a two-digit number:
45
Reversed: 54

Фактический выход

Enter a two-digit number:
45
Reversed: 5

Что не так?

0
Limbo 4 Фев 2022 в 06:25
1
Вам не нужен цикл для продолжения вычисления обращения числа, пока вы не 0 (или что-то в этом роде?). Взгляните на Java-программу для реверсирования числа в качестве примера.
 – 
MadProgrammer
4 Фев 2022 в 06:27
Если вам нужно сделать это только для двух символов, то как насчет более простого решения путем преобразования int в строку, а затем использования charAt(x) следующим образом: String converted = num + ""; System.out.println("Reversed Number: " + converted.charAt(1) + converted.charAt(0)); в противном случае вы должны использовать цикл, как было предложено выше.
 – 
sorifiend
4 Фев 2022 в 06:50
Ваш код правильный, вы просто забыли написать там цикл ... см. мое решение, которое я разместил ниже.
 – 
Vaibhavv
4 Фев 2022 в 07:10

4 ответа

Ваша проблема здесь

   if (numLength == requiredLength) {
       //Reverse integer
       int digit = num % 10;
       reversed = reversed * 10 + digit; 
       num /= 10;
       System.out.println("Reversed Number: " + reversed);
       break;
    }

Я подозреваю, что вы хотели включить это в цикл по цифрам, а затем запутались со своим циклом по вводам. Поскольку вы знаете, что это всего две цифры, вы можете просто сделать это.

   if (numLength == requiredLength) {
       //Reverse integer
       int digit = num % 10;
       int reversed = 10 * digit + num / 10;
       System.out.println("Reversed Number: " + reversed);
       break;
    }
0
Zag 4 Фев 2022 в 06:59

Ваша проблема решена!! Вы забыли написать здесь цикл while:

 while (num!=0){
         int digit = num % 10;
         reversed = reversed * 10 + digit;
         num /= 10;
       }

Этот цикл while делит число каждый раз на 10 и добавляет цифру к обратному числу в каждом цикле, пока число будет равно 0 цикл будет разорван

Теперь это весь ваш рабочий код:

   int reversed = 0;
        int requiredLength = 2;

        //Get User Input
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a two-digit number:");

        while (sc.hasNext()) {
            //Conditional for User Input
            if (sc.hasNextInt()) {
                //Set scanner variables
                int num = sc.nextInt();
                int numLength = String.valueOf(num).length();
                if (numLength == requiredLength) {
                    //Reverse integer
                   while (num!=0){
                       int digit = num % 10;
                       reversed = reversed * 10 + digit;
                       num /= 10;
                   }
                    System.out.println("Reversed Number: " + reversed);
                    break;
                } else {
                    //Error message
                    System.out.println("Error: Input integer with two-digits");
                    System.out.print("Please, enter a two-digit number:\n");
                }//End of conditional
            } else {
                //Error message
                System.out.println("Error: Input not an integer");
                System.out.print("Please, enter a two-digit number:\n");
                sc.next();
            }//End of conditional
        }//End of while loop
0
Vaibhavv 4 Фев 2022 в 07:08

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

while(number != 0){
mod = number % 10;
number = number / 10;
result = result * 10 + mod;

}

0
Jagadeesh mano 4 Фев 2022 в 07:10

Если n — это число, то n%10 даст вам правую цифру, а n/10 даст вам левую цифру.

Чтобы объединить их в одно число, нужно сдвинуть правую цифру влево, умножив ее на 10. Затем добавьте число слева.

int n = 31;
if (n/10 < 10){
  System.out.println(n%10*10 + n/10);
}

Выход:

31
13
0
Cheng Thao 4 Фев 2022 в 08:02