有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么整数长度程序中的循环代码会跳过

我正在尝试创建一个程序来计算给定数字的长度。我想我会这样做,把数字除以10,然后检查数字是否为<;=0.我不想编辑全局编号,所以我创建了该编号的实例版本,并将其用作for循环中的条件

所以很明显,这并没有很自然地起作用,我最终在调试器中查找,以找出发生了什么。看起来这个程序似乎完全跳过了这个循环,如果有任何帮助,我们将不胜感激

public static void sumFirstAndLastDigit(int number) {
        int numberLength = 0;
        int instanceNumber = number;
        for(int i = 0; instanceNumber <= 0; i++) {
            instanceNumber /= 10;
            numberLength = i;   
        }
        System.out.println("Number length = " + numberLength);
        // to find length of number loop division by 10
    }
}

程序应该使用for循环不断除以10,直到数字=到或小于零,循环运行的次数应该存储在数字长度整数中。在本例中,数字12321的答案应该是6,但打印的是0


共 (3) 个答案

  1. # 1 楼答案

    <> P>考虑更复杂的解决方案:

    public static void sumFirstAndLastDigit(int number) {
        int numberLength = (int) (Math.log10(number) + 1);
        System.out.println("Number length = " + numberLength);
    }
    

    Taken from Baeldung

  2. # 2 楼答案

    你让它在^{时循环。循环中的“测试”是“持续”测试,而不是终止测试。只要测试为真,循环就会继续

    根据您的描述,您需要instanceNumber > 0

    还要注意Avinash Gupta's point使用当前代码,您将少记一次。我会使用一个完全不同的循环来解决这个问题:

    int numberLength = 0;
    int instanceNumber = number;
    while (instanceNumber > 0) {
        ++numberLength;
        instanceNumber /= 10;
    }
    

    这很好,也很明确:如果instanceNumber > 0,它会增加numberLength,然后除以10,然后再试一次

  3. # 3 楼答案

    这将打印正确的输出

    public static void sumFirstAndLastDigit(int number) {
        int numberLength = 0;
        int instanceNumber = number;
        for(int i = 0; instanceNumber > 0; i++) {
             instanceNumber /= 10;
             numberLength = i;   
         }
         System.out.println("Number length = " + (numberLength + 1));
    
        }