У меня есть программа, предназначенная для ввода данных пользователем (двузначное целое число) и вывода его обратного значения. Хотя он компилируется без ошибок, он выводит только первое целое число, но не второе.
Код программы:
//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
Что не так?
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;
}
Ваша проблема решена!! Вы забыли написать здесь цикл 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
Эта логика должна повторяться для каждой цифры входного числа, поэтому попробуйте добавить ее в цикл.
while(number != 0){
mod = number % 10;
number = number / 10;
result = result * 10 + mod;
}
Если n
— это число, то n%10 даст вам правую цифру, а n/10
даст вам левую цифру.
Чтобы объединить их в одно число, нужно сдвинуть правую цифру влево, умножив ее на 10
. Затем добавьте число слева.
int n = 31;
if (n/10 < 10){
System.out.println(n%10*10 + n/10);
}
Выход:
31
13
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
0
(или что-то в этом роде?). Взгляните на Java-программу для реверсирования числа в качестве примера.String converted = num + ""; System.out.println("Reversed Number: " + converted.charAt(1) + converted.charAt(0));
в противном случае вы должны использовать цикл, как было предложено выше.