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

时间:2019-07-04 18:16:27

标签: java

我正在尝试创建一个程序来查找给定数字的长度。我以为我可以通过将数字除以10然后检查数字是否小于等于0来做到这一点。我确实想编辑全局数字,因此我创建了该数字的实例版本并将其用作条件在for循环中。

很明显,这项工作很自然,所以我最终在调试器中查找了正在发生的事情。看起来该程序似乎完全跳过了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。

4 个答案:

答案 0 :(得分:6)

您正在告诉它在instanceNumber <= 0时循环播放。 for循环中的“测试”是“继续进行”测试,而不是终止测试。只要测试为 true ,循环就会继续。

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

还要注意Avinash Gupta's point,使用当前代码,您将被少计一分。我可以通过使用完全不同的循环来解决这个问题:

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

这是很好的和明确的:如果instanceNumber > 0递增numberLength,然后除以10,然后重试。

答案 1 :(得分:2)

这将打印正确的输出

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

    }

答案 2 :(得分:0)

如果对算法使用while循环,您的代码将更加全面。

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

答案 3 :(得分:0)

考虑更复杂的解决方案:

self.navigationItem.searchController
  

取自Baeldung