天天看点

Java笔记:while和do...while

我们知道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都会执行一次循环。