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都会执行一次循环。
推荐阅读
-
Java笔记:while和do...while
-
B站400万播放量的Java教程都讲了什么-学习笔记03-变量赋值和作用域
-
Java笔记(8)——多态和对象实例化
-
Java 循环结构 - for, while 及 do...while
-
JAVA 系列——>循环语句for,while,do...while,break,continue
-
《Java8实战》-第八章笔记(重构、测试和调试)
-
[Java]详解Socket和ServerSocket学习笔记
-
[Java]详解Socket和ServerSocket学习笔记
-
Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包
-
详解Java中的do...while循环语句的使用方法