【问题标题】:do-while loop to count digits in an inputted number. trouble shooting codedo-while 循环计算输入数字中的位数。故障排除代码
【发布时间】:2019-08-19 19:49:38
【问题描述】:

我似乎无法弄清楚这一点。它始终显示该号码有 4 位数字。我将输入限制限制在 4 位,我相信你可以看到。

我尝试过更改模数运算符和其他基本解决方案。

//2019 年 3 月 28 日 /*使用 do while 循环编写一个 Java 程序,该循环接受用户输入的正整数或负整数,并报告该数字包含多少位。 * 当用户输入 0 时,循环应该退出。 提示:使用 % 访问每个数字和 / 减少数字,这样您就可以计算所有数字。 */

import java.util.Scanner;
public class Do_While_Swigart
{
  public static void main(String [] args)
  {
    int number = 0;
    int var = 0;
    int var2, var3,var4,var5,var6 = 0;
    int count = 0;

    Scanner scan = new Scanner (System.in);

    System.out.println("Hello! Please input a positive or negative whole number. Ex: 450");

    number = scan.nextInt();



    do 
    {
      var = number % 10;

      count = (var/var);

      var2 = number % 100;

      count += (var2/var2);

      var3 = number %100;

      count += (var3/var3);

      var4 = number%1000;

      count += (var4/var4);

      var5 = number%10000;


    } while ( var5 == 0);

    System.out.println("Your number has "+count+" digits.");
  }

}

【问题讨论】:

  • 这可能是最容易做到的 (number+"").length
  • 附加调试器并逐步执行代码。密切注意分配的 var、var2、var3 和 var4 以及 (var/var) 评估的内容(提示 x/x=1 当 x != 0)
  • 另外,计算数字长度的数学方法是1 + floor(log(n)),其中log与数字在同一个基数中。如果n 可以为负数,只需添加1 + floor(log(abs(n)))
  • 你的方法行不通。以输入 1000 为例。 1000%10 = 0。哦哦哦。除以 0 错误。
  • /10 删除一个数字

标签: java do-while counting digits


【解决方案1】:

此代码将解决您的问题。此外,不需要使用 % 运算符,因为不需要提取每个数字。您只需要计算位数并使用 / 运算符即可迭代循环,当数字减少到零时,循环将退出。

import java.util.Scanner;
public class NumberLength{



    public static void main(String ar[]){

    Scanner scan = new Scanner (System.in);

    System.out.println("Hello! Please input a positive or negative whole number. Ex: 450");

    int number = scan.nextInt();
    int countDig  = calNumOfDigit(number);
    System.out.println(countDig);
    }

    public static int calNumOfDigit(int n){
                int count = 0;
        int num = Math.abs(n);
        do{
            count++;
            num = num/10;

        }while(num>0);

        return count;
    }
}

举例说明:-

假设输入数字是:450 计数:1 数量:450/10 = 45

计数:2 数量:45/10 = 4

计数:3 数量:4/10 = 0

while 条件为 num > 0 。所以现在循环将退出。

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    此代码考虑了问题的所有要求。虽然很奇怪。

    public class MyClass {
        public static void main(String args[]) {
            int n=-420; // input 
            int digits=0;
    
            do {
                if (n != 0) // quit if input should be 0
                    digits++;
            } while ((n%Math.pow(10,digits)) != n); // a=b%c --> if c > b then a = b 
    
            System.out.println(n + " has " + digits + " digits");
        }
    }
    

    【讨论】:

      【解决方案3】:

      正如乔纳森所说,最好使用类似的东西:

      Integer.toString(number).length();

      但如果您真的需要使用 do while 循环来执行此操作,这可能对您有用:

          Scanner scan = new Scanner(System.in);
      
          System.out.println("Hello! Please input a positive or negative whole number. Ex: 450");
      
          int number = scan.nextInt();
      
          do {
              int digitos = (int) (Math.log10(number) + 1);
      
              number = number / 10;
      
              System.out.println("Your number has " + digitos + " digits.");
      
          } while (number < 0);
      

      【讨论】:

      • 现在您多次打印不同的位数,因为您的打印在循环中。
      • 对负数会产生 bit 奇怪的效果(@John3136 只有当数字为 -10 或更少时,循环才会循环)
      猜你喜欢
      • 2014-03-17
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2012-12-07
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多