【问题标题】:How can I print integer digits on separate lines using Java如何使用 Java 在单独的行上打印整数位
【发布时间】:2021-07-31 04:17:53
【问题描述】:

我已经编写了代码来在不同的行上打印整数的数字,但我没有得到预期的输出。相反,代码的输出顺序相反。如何在不使用Math.pow 方法的情况下使我的输出正确?

import java.util.Scanner;
class NumberInDigit
{
   public static void main(String[] args)
   { 
     int div;
     Scanner sc = new Scanner(System.in);
     System.out.println("enter the number");  
     int n = sc.nextInt();
     while(n>0)
     {
         div = n%10;
         n= n/10;
     }
     System.out.println(div); 
   }
}

n = 234
输出为 4,3,2
预期输出为 2,3,4

【问题讨论】:

  • 234%10 = 4,所以先返回 4,以此类推
  • Output is 4,3,2 ...我在这里看不到任何会产生任何输出的实际代码。

标签: java algorithm


【解决方案1】:

“%”是取模运算符,所以div = n%10; 取 n (234),然后找到 234 除以 10 的余数。234/10 = 23.4(即 4 是余数)。所以 div 被赋值为 4(即 div = 4)。然后将 n (234) 除以 10 并将其重新分配给 n - 所以 (234 / 10 = 23),注意余数被忽略。

循环的第一次迭代结束,它返回 div = 4。

第二次迭代(当 n = 23 时)将打印出 3(因为 23 / 10 = 2r3)——记住我们返回的是余数。然后将 N 设置为 2。

第三次迭代(当 n = 2 时)将打印出 2(因为 2/10 = 0r2) - 余数为 2。N 现在设置为 0 为 (2 / 10 = 0)。那么下一次迭代将失败 n > 0 的条件。

这就是你得到 4,3,2 的原因。

有多种方法可以获得预期的数字,但由于您使用的是 base10(即十进制系统),我认为最简单的方法是将数字转换为字符串,然后遍历字符串打印每个数字,直到您到达末尾或小数点。

【讨论】:

    【解决方案2】:

    你正在划分除法余数并再次划分它们,如果你想对字符串使用数组进行操作

    【讨论】:

    • 因为第一次我把余数打印出来,然后这个数字将除以 10,因为这个数字太小了。对于这种类型的问题,数组很重要
    【解决方案3】:

    你也可以这样做:

    int n=234,x=n,y=100;
    while(x>=0)
        {
            x=n/y;
            n=n%y;
            System.out.println(x);
            y=y/10;
        }
    

    这样输出是2,3,4。

    【讨论】:

      【解决方案4】:

      首先,您的代码存在语法和逻辑问题。 "n" 没有类型,它应该只返回 4(因为你正在执行 return 它不应该继续 while 循环)。

      要完成你需要的,你可以稍微改变你的代码:

      public static void main(String [] args){
          System.out.println(printReversedNumList(234));
      }
      
      private static List printReversedNumList(int num) {
          final List<Integer> reversedNumList = new ArrayList<>();
          while(num>0)
          {
              int remainder = num%10;
              num= num/10;
              reversedNumList.add(remainder);
          }
      
          Collections.reverse(reversedNumList);
      
          return reversedNumList;
      }
      

      【讨论】:

      • 我不想倒数也不增加代码行。 n 在上面的代码中声明。我刚刚分享了为什么数字输出处于保留顺序的逻辑。只是我必须按顺序打印拆分的数字。
      猜你喜欢
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多