欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java笔记:while和do...while

程序员文章站 2024-03-22 21:04:34
...

我们知道Java中循环的方式有三种,除了标题中提到的两种,还有一种是for循环,但是在使用for循环时,我们必须要知道循环的次数,否者只能选择while或者do...while。

今天我在使用while和do...while时,发现一个有趣的事,我的代码如下:

/*Take an integer n (n >= 0) and a digit d (0 <= d <= 9) as an integer. 
 * Square all numbers k (0 <= k <= n) between 0 and n. 
 * Count the numbers of digits d used in the writing of all the k**2. 
 * Call nb_dig (or nbDig or ...) the function taking n and d as parameters 
 * and returning this count.
 * 中文描述:
 * 给一个大于等于0的整数n和一个0到9之间的整数d,计算所有在0到n之间的整数k的平方,统计d在k平方中出现的次数
 * */


public class CountDig {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(nbDig(5750, 0));
    }
    public static int nbDig(int n, int d) {
        int sum = 0;
        for (int i = 0; i <= n; i++) {
            sum += countOfDigit((int)Math.pow(i, 2), d);
        }
        return sum;
    }
    public static int countOfDigit(int n, int d) {
        int count = 0;
        /*while (n >= 0) {
            if (n % 10 == d)
                count++;
            n /= 10;
           }*/
        do {
            if (n % 10 == d)
                count++;
            n /= 10;
        }while(n>0);
        return count;
        }
}

这是我在做一个codewars上的题目时遇到的,为了便于理解,附上全部代码,注意中间被我注释掉的while循环部分。

刚开始使用的是while循环,不过判断条件是while(n>0),当传入(5750,0)两个参数时,发现程序运行结果比正确结果少1,通过检查发现没有计算当n=0时的结果,于是把条件改为while(n>=0),再次执行,程序一直不出现结果,提示timeout。

通过再次检查,发现在while循环中,无论n最初等于多少,最后它都会等于0,当他等于0时,循环就进入死循环,因此不会出现结果。

这次经历,再一次加深了对do...while的印象:无论条件是什么,do...while都会执行一次循环。