【问题标题】:Java program won't show the entire output - the reverse of an inputted integerJava 程序不会显示整个输出 - 输入整数的倒数
【发布时间】:2025-10-24 16:35:02
【问题描述】:

我有一个程序旨在接受用户的输入(一个两位整数)并输出它的倒数。虽然它编译没有错误,但它只输出第一个整数而不输出第二个。

程序代码:

  //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(或什么?)。以Java Program to Reverse a Number 为例
  • 如果您只需要对两个字符执行此操作,那么通过将 int 转换为字符串然后使用 charAt(x) 像这样更简单的解决方案呢:String converted = num + ""; System.out.println("Reversed Number: " + converted.charAt(1) + converted.charAt(0)); 否则,您应该使用如上所述的循环。
  • 你的代码是对的,你只是忘了在那里写一个循环。看看我在下面发布的解决方案。

标签: java loops if-statement integer java.util.scanner


【解决方案1】:

你的问题来了

   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;
    }

【讨论】:

    【解决方案2】:

    你的问题解决了!! 你忘了在那里写 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
    

    【讨论】:

      【解决方案3】:

      这个逻辑必须遍历输入数字的每一位,所以尝试将其添加到循环中

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

      }

      【讨论】:

        【解决方案4】:

        如果 n 是数字,则 n%10 为您提供正确的数字,n/10 将为您提供左边的数字。

        要将它们组合成一个数字,您需要将右边的数字乘以10 将其向左移动。然后从左边添加数字。

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

        输出:

        31
        13
        

        【讨论】: