Java 中的循环语句
循环语句:在某些条件满足的情况下,反复执行特定代码的功能。
循环结构分类:
- for 循环
- while 循环
- do-while 循环
循环结构四要素:
- 初始化部分
- 循环条件部分
- 循环体部分
- 迭代部分
for 循环
基本语法
语法格式:
for (1、初始化部分; 2、循环条件部分; 4、迭代部分){
3、循环体部分;
}说明:
for(;;)中的两个;不能多也不能少- 1、初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
- 2、循环条件部分为 boolean 类型表达式,当值为 false 时,退出循环。如果省略不写,那么就变成死循环。
- 4、迭代部分可以有多个变量更新,用逗号分隔
应用举例
案例 1:
使用 for 循环重复执行某些语句
题目:输出 5 行 HelloWorld
public class ForTest1 {
public static void main(String[] args) {
// 需求 1:控制台输出 5 行 Hello World!
// 写法 1:
// System.out.println("Hello World!");
// System.out.println("Hello World!");
// System.out.println("Hello World!");
// System.out.println("Hello World!");
// System.out.println("Hello World!");
// 写法 2:
for(int i = 1;i <= 5;i++){
System.out.println("Hello World!");
}
}
}案例 2:格式的多样性
public class ForTest2 {
public static void main(String[] args) {
int num = 1;
for(System.out.print("a");num < 3;System.out.print("c"),num++){
System.out.print("b");
}
}
}案例 3:累加的思想
题目:遍历 1-100 以内的偶数,并获取偶数的个数,获取所有的偶数的和
public class ForTest3 {
public static void main(String[] args) {
int count = 0; // 记录偶数的个数
int sum = 0; // 记录偶数的和
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
count++;
sum += i;
}
//System.out.println("偶数的个数为:" + count);
}
System.out.println("偶数的个数为:" + count);
System.out.println("偶数的总和为:" + sum);
}
}案例 4:结合分支结构使用
题目:输出所有的水仙花数,所谓水仙花数是指一个 3 位数,其各个位上数字立方和等于其本身。例如: 153 = 1*1*1 + 3*3*3 + 5*5*5。
public class ForTest4 {
public static void main(String[] args) {
// 定义统计变量,初始化值是 0
int count = 0;
// 获取三位数,用 for 循环实现
for(int x = 100; x < 1000; x++) {
// 获取三位数的个位,十位,百位
int ge = x % 10;
int shi = x / 10 % 10;
int bai = x / 100;
// 判断这个三位数是否是水仙花数,如果是,统计变量 ++
if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
System.out.println("水仙花数:" + x);
count++;
}
}
// 输出统计结果就可以了
System.out.println("水仙花数共有"+count+"个");
}
}拓展:
打印出四位数字中“个位 + 百位”等于“十位 + 千位”并且个位数为偶数,千位数为奇数的数字,并打印符合条件的数字的个数。
案例 5:结合 break 的使用
说明:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
比如:12 和 20 的最大公约数是 4,最小公倍数是 60。
public class ForTest5 {
public static void main(String[] args) {
// 需求 1:最大公约数
int m = 12, n = 20;
// 取出两个数中的较小值
int min = (m < n) ? m : n;
for (int i = min; i >= 1; i--) { // for(int i = 1;i <= min;i++){
if (m % i == 0 && n % i == 0) {
System.out.println("最大公约数是:" + i); // 公约数
break; // 跳出当前循环结构
}
}
// 需求 2:最小公倍数
// 取出两个数中的较大值
int max = (m > n) ? m : n;
for (int i = max; i <= m * n; i++) {
if (i % m == 0 && i % n == 0) {
System.out.println("最小公倍数是:" + i); // 公倍数
break;
}
}
}
}说明:
1、我们可以在循环中**使用 break**。一旦执行 break,就跳出当前循环结构。
2、小结:如何结束一个循环结构?
- 结束情况 1:循环结构中的**循环条件部分**返回 false。
- 结束情况 2:循环结构中执行了 break。
- 结束情况 3:return,不再往下执行代码。
3、如果一个循环结构不能结束,那就是一个死循环!我们开发中要避免出现死循环。练习
练习 1:打印 1~100 之间所有奇数的和
public class ForExer1 {
public static void main(String[] args) {
int sum = 0; // 记录奇数的和
for (int i = 1; i < 100; i++) {
if(i % 2 != 0){
sum += i;
}
}
System.out.println("奇数总和为:" + sum);
}
}练习 2:
打印 1~100 之间所有是 7 的倍数的整数的个数及总和(体会设置计数器的思想)
public class ForExer2 {
public static void main(String[] args) {
int sum = 0; // 记录总和
int count = 0; // 记录个数
for (int i = 1; i < 100; i++) {
if(i % 7 == 0){
sum += i;
count++;
}
}
System.out.println("1~100 之间所有是 7 的倍数的整数的和为:" + sum);
System.out.println("1~100 之间所有是 7 的倍数的整数的个数为:" + count);
}
}练习 3:
编写程序从 1 循环到 150,并在每行打印一个值,另外在每个 3 的倍数行上打印出“foo”,在每个 5 的倍数行上打印“biz”,在每个 7 的倍数行上打印输出“baz”。
public class ForExer3 {
public static void main(String[] args) {
for (int i = 1; i < 150; i++) {
System.out.print(i + "\t");
if(i % 3 == 0){
System.out.print("foo\t");
}
if(i % 5 == 0){
System.out.print("biz\t");
}
if(i % 7 == 0){
System.out.print("baz\t");
}
System.out.println();
}
}
}while 循环
基本语法
语法格式:
1、初始化部分
while(2、循环条件部分){
3、循环体部分;
4、迭代部分;
}说明:
while(循环条件)中循环条件必须是 boolean 类型。- 注意不要忘记声明4、迭代部分。否则,循环将不能结束,变成死循环。
- for 循环和 while 循环可以相互转换。二者没有性能上的差别。实际开发中,根据具体结构的情况,选择哪个格式更合适、美观。
- for 循环与 while 循环的区别:初始化条件部分的作用域不同。
应用举例
案例 1:输出 5 行 HelloWorld!
class WhileTest1 {
public static void main(String[] args) {
int i = 1;
while(i <= 5){
System.out.println("Hello World!");
i++;
}
}
}案例 2:
遍历 1-100 的偶数,并计算所有偶数的和、偶数的个数(累加的思想)。
class WhileTest2 {
public static void main(String[] args) {
// 初始化部分
// 遍历 1-100 的偶数,并计算所有偶数的和、偶数的个数(累加的思想)
int num = 1;
int sum = 0;// 记录 1-100 所有的偶数的和
int count = 0;// 记录 1-100 之间偶数的个数
while(num <= 100){
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
// 迭代条件
num++;
}
System.out.println("偶数的总和为:" + sum);
System.out.println("偶数的个数为:" + count);
}
}案例 3:猜数字游戏
随机生成一个 100 以内的数,猜这个随机数是多少?
从键盘输入数,如果大了,提示大了;如果小了,提示小了;如果对了,就不再猜了,并统计一共猜了多少次。
提示:生成一个 [a,b] 范围的随机数的方式:(int)(Math.random() * (b - a + 1) + a)。
public class GuessNumber {
public static void main(String[] args) {
// 获取一个随机数
int random = (int) (Math.random() * 100) + 1;
// 记录猜的次数
int count = 1;
// 实例化 Scanner
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数 (1-100):");
int guess = scan.nextInt();
while (guess != random) {
if (guess > random) {
System.out.println("猜大了");
} else if (guess < random) {
System.out.println("猜小了");
}
System.out.println("请输入一个整数 (1-100):");
guess = scan.nextInt();
//累加猜的次数
count++;
}
System.out.println("猜中了!");
System.out.println("一共猜了" + count + "次");
}
}案例 4:折纸珠穆朗玛峰
世界最高山峰是珠穆朗玛峰,它的高度是 8848.86 米,假如我有一张足够大的纸,它的厚度是 0.1 毫米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
public class ZFTest {
public static void main(String[] args) {
// 定义一个计数器,初始值为 0
int count = 0;
// 定义珠穆朗玛峰的高度
int zf = 8848860; // 单位:毫米
double paper = 0.1; // 单位:毫米
while(paper < zf){
// 在循环中执行累加,对应折叠了多少次
count++;
paper *= 2; // 循环的执行过程中每次纸张折叠,纸张的厚度要加倍
}
// 打印计数器的值
System.out.println("需要折叠:" + count + "次");
System.out.println("折纸的高度为" + paper/1000 + "米,超过了珠峰的高度");
}
}练习
从键盘输入整数,输入 0 结束,统计输入的正数、负数的个数。
import java.util.Scanner;
public class Test05While {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int positive = 0; // 记录正数的个数
int negative = 0; // 记录负数的个数
int num = 1; // 初始化为特殊值,使得第一次循环条件成立
while(num != 0){
System.out.print("请输入整数(0 表示结束):");
num = input.nextInt();
if(num > 0){
positive++;
}else if(num < 0){
negative++;
}
}
System.out.println("正数个数:" + positive);
System.out.println("负数个数:" + negative);
input.close();
}
}do-while 循环
基本语法
语法格式:
1、初始化部分;
do{
2、循环体部分
3、迭代部分
}while(3、循环条件部分);说明:
- 结尾 while(循环条件) 中循环条件必须是 boolean 类型
do{}while();最后有一个分号- do-while 结构的循环体语句是至少会执行一次,这个和 for 和 while 是不一样的
- 循环的三个结构 for、while、do-while 三者是可以相互转换的
应用举例
案例 1:
遍历 1-100 的偶数,并计算所有偶数的和、偶数的个数(累加的思想)。
class DoWhileTest1 {
public static void main(String[] args) {
// 遍历 1-100 的偶数,并计算所有偶数的和、偶数的个数(累加的思想)
// 初始化部分
int num = 1;
int sum = 0;// 记录 1-100 所有的偶数的和
int count = 0;// 记录 1-100 之间偶数的个数
do{
// 循环体部分
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++; // 迭代部分
}while(num <= 100); // 循环条件部分
System.out.println("偶数的总和为:" + sum);
System.out.println("偶数的个数为:" + count);
}
}案例 2:
体会 do-while 至少会执行一次循环体。
class DoWhileTest2 {
public static void main(String[] args) {
// while 循环:
int num1 = 10;
while(num1 > 10){
System.out.println("hello:while");
num1--;
}
// do-while 循环:
int num2 = 10;
do{
System.out.println("hello:do-while");
num2--;
}while(num2 > 10);
}
}案例 3:ATM 取款
声明变量 balance 并初始化为 0,用以表示银行账户的余额,下面通过 ATM 机程序实现存款,取款等功能。
=========ATM========
1、存款
2、取款
3、显示余额
4、退出
请选择 (1-4):import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
// 初始化条件
double balance = 0.0; // 表示银行账户的余额
Scanner scan = new Scanner(System.in);
boolean isFlag = true; // 用于控制循环的结束
do{
System.out.println("=========ATM========");
System.out.println("\t1、存款");
System.out.println("\t2、取款");
System.out.println("\t3、显示余额");
System.out.println("\t4、退出");
System.out.print("请选择 (1-4):");
int selection = scan.nextInt();
switch(selection){
case 1:
System.out.print("要存款的额度为:");
double addMoney = scan.nextDouble();
if(addMoney > 0){
balance += addMoney;
}
break;
case 2:
System.out.print("要取款的额度为:");
double minusMoney = scan.nextDouble();
if(minusMoney > 0 && balance >= minusMoney){
balance -= minusMoney;
}else{
System.out.println("您输入的数据非法或余额不足");
}
break;
case 3:
System.out.println("当前的余额为:" + balance);
break;
case 4:
System.out.println("欢迎下次进入此系统。^_^");
isFlag = false;
break;
default:
System.out.println("请重新选择!");
break;
}
}while(isFlag);
// 资源关闭
scan.close();
}
}练习
练习 1:猜数字游戏(简洁版)
随机生成一个 100 以内的数,猜这个随机数是多少?
从键盘输入数,如果大了提示,大了;如果小了,提示小了;如果对了,就不再猜了,并统计一共猜了多少次。
TIP
通过这个例子,我们发现 do-while 循环在某些情况下比 while 循环简洁。比如完成“猜数字游戏”编程。
import java.util.Scanner;
public class DoWhileExer {
public static void main(String[] args) {
// 随机生成一个 100 以内的整数
/*
Math.random() ==> [0,1) 的小数
Math.random()* 100 ==> [0,100) 的小数
(int)(Math.random()* 100) ==> [0,100) 的整数
*/
int num = (int)(Math.random()* 100);
// System.out.println(num);
// 声明一个变量,用来存储猜的次数
int count = 0;
Scanner input = new Scanner(System.in);
int guess; // 提升作用域
do{
System.out.print("请输入 100 以内的整数:");
guess = input.nextInt();
// 输入一次,就表示猜了一次
count++;
if(guess > num){
System.out.println("大了");
}else if(guess < num){
System.out.println("小了");
}
}while(num != guess);
System.out.println("一共猜了:" + count+"次");
input.close();
}
}对比三种循环结构
- 三种循环结构都具有四个要素:
- 循环变量的初始化条件
- 循环条件
- 循环体语句块
- 循环变量的修改的迭代表达式
- 从循环次数角度分析
- do-while 循环至少执行一次循环体语句。
- for 和 while 循环先判断循环条件语句是否成立,然后决定是否执行循环体。
- 如何选择
- 遍历有明显的循环次数(范围)的需求,选择 for 循环
- 遍历没有明显的循环次数(范围)的需求,选择 while 循环
- 如果循环体语句块至少执行一次,可以考虑使用 do-while 循环(猜数字游戏,一上来就请你猜数字,所以至少猜一次数字)
- 本质上:三种循环之间完全可以互相转换,都能实现循环的功能
"无限"循环
基本语法
语法格式:
- 最简单"无限"循环格式:
while(true),for(;;)
适用场景:
- 开发中,有时并不确定需要循环多少次,需要根据循环体内部某些条件,来控制循环的结束(使用 break)。
- 如果此循环结构不能终止,则构成了死循环!开发中要避免出现死循环。
应用举例
案例 1:实现爱你到永远...
public class EndlessFor1 {
public static void main(String[] args) {
for (;;){
System.out.println("我爱你!");
}
// System.out.println("end"); // 永远无法到达的语句,编译报错
}
}public class EndlessFor2 {
public static void main(String[] args) {
for (; true;){ // 条件永远成立,死循环
System.out.println("我爱你!");
}
}
}public class EndlessFor3 {
public static void main(String[] args) {
for (int i=1; i<=10; ){ // 循环变量没有修改,条件永远成立,死循环
System.out.println("我爱你!");
}
}
}思考:如下代码执行效果
public class EndlessFor4 {
public static void main(String[] args) {
for (int i=1; i>=10; ){ // 一次都不执行
System.out.println("我爱你!");
}
}
}案例 2:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为 0 时结束程序。
import java.util.Scanner;
class PositiveNegative {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int positiveNumber = 0; // 统计正数的个数
int negativeNumber = 0; // 统计负数的个数
for(;;){ // while(true){
System.out.println("请输入一个整数:(输入为 0 时结束程序)");
int num = scanner.nextInt();
if(num > 0){
positiveNumber++;
}else if(num < 0){
negativeNumber++;
}else{
System.out.println("程序结束");
break;
}
}
System.out.println("正数的个数为:"+ positiveNumber);
System.out.println("负数的个数为:"+ negativeNumber);
scanner.close();
}
}嵌套循环(或多重循环)
使用说明
- 所谓嵌套循环,是指一个循环结构 A 的循环体是另一个循环结构 B。比如,for 循环里面还有一个 for 循环,就是嵌套循环。其中,for ,while ,do-while 均可以作为外层循环或内层循环。
- 外层循环:循环结构 A
- 内层循环:循环结构 B
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。
- 设外层循环次数为
m次,内层为n次,则内层循环体实际上需要执行m*n次。 - 技巧:从二维图形的角度看,外层循环控制
行数,内层循环控制列数。 - 开发经验:实际开发中,我们最多见到的嵌套循环是两层。一般不会出现超过三层的嵌套循环。如果将要出现,一定要停下来重新梳理业务逻辑,重新思考算法的实现,控制在三层以内。否则,可读性会很差。
例如:两个 for 嵌套循环格式
for(初始化语句①; 循环条件语句②; 迭代语句⑦) {
for(初始化语句③; 循环条件语句④; 迭代语句⑥) {
循环体语句⑤;
}
}
// 执行过程:① - ② - ③ - ④ - ⑤ - ⑥ - ④ - ⑤ - ⑥ - ... - ④ - ⑦ - ② - ③ - ④ - ⑤ - ⑥ - ④..执行特点:外层循环执行一次,内层循环执行一轮。
应用举例
案例 1:打印 5 行 6 个 *
class ForForTest1 {
public static void main(String[] args) {
/*
******
******
******
******
******
*/
for(int j = 1;j <= 5;j++){
for(int i = 1;i <= 6;i++){
System.out.print("*");
}
System.out.println();
}
}
}案例 2:打印 5 行直角三角形
*
**
***
****
*****public class ForForTest2 {
public static void main(String[] args){
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}案例 3:打印 5 行倒直角三角形
*****
****
***
**
*public class ForForTest3 {
public static void main(String[] args){
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= 6 - i;j++){
System.out.print("*");
}
System.out.println();
}
}
}案例 4:打印"菱形"形状的图案
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* * *
*public class ForForTest4 {
public static void main(String[] args) {
/*
上半部分 i m(表示 - 的个数) n(表示*的个数) 关系式:2*i + m = 10 --> m = 10 - 2*i
--------* 1 8 1 n = 2 * i - 1
------* * * 2 6 3
----* * * * * 3 4 5
--* * * * * * * 4 2 7
* * * * * * * * * 5 0 9
下半部分 i m n 关系式:m = 2 * i
--* * * * * * * 1 2 7 n = 9 - 2 * i
----* * * * * 2 4 5
------* * * 3 6 3
--------* 4 8 1
*/
//上半部分
for (int i = 1; i <= 5; i++) {
//-
for (int j = 1; j <= 10 - 2 * i; j++) {
System.out.print(" ");
}
//*
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("* ");
}
System.out.println();
}
//下半部分
for (int i = 1; i <= 4; i++) {
//-
for (int j = 1; j <= 2 * i; j++) {
System.out.print(" ");
}
//*
for (int k = 1; k <= 9 - 2 * i; k++) {
System.out.print("* ");
}
System.out.println();
}
}
}案例 5:九九乘法表
public class ForForTest5 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println();
}
}
}练习
练习 1:将一天中的时间打印到控制台
public class ForForDemo {
public static void main (String[] args) {
for (int hour = 0;hour < 24 ;hour++ ) {
for (int min = 0; min < 60 ; min++) {
System.out.println(hour + "时" + min +"分");
}
}
}
}关键字 break 和 continue 的使用
break 和 continue 的说明
| 适用范围 | 适用范围 | 相同点 | |
|---|---|---|---|
| break | switch-case 和循环结构 | 一旦执行,就结束(或跳出)当前循环结构 | 此关键字的后面,不能声明语句 |
| continue | 只能用在循环结构 | 一旦执行,就结束(或跳出)当前循环结构 | 此关键字的后面,不能声明语句 |
此外,很多语言都有 goto 语句,goto 语句可以随意将控制转移到程序中的任意一条语句上,然后执行它,但使程序容易出错。Java 中的 break 和 continue 是不同于 goto 的。
应用举例
class BreakContinueTest1 {
public static void main(String[] args) {
for(int i = 1;i <= 10;i++){
if(i % 4 == 0){
// break; // 123
continue; // 123567910
// 如下的语句不可能被执行,编译不通过
// System.out.println("今晚迪丽热巴要约我吃饭");
}
System.out.print(i);
}
System.out.println("####");
// 嵌套循环中的使用
for(int i = 1;i <= 4;i++){
for(int j = 1;j <= 10;j++){
if(j % 4 == 0){
//break; // 结束的是包裹 break 关键字的最近的一层循环!
continue;// 结束的是包裹 break 关键字的最近的一层循环的当次!
}
System.out.print(j);
}
System.out.println();
}
}
}带标签的使用
break 语句用于终止某个语句块的执行
{ ……
break;
……
}
break 语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}- continue 语句出现在多层嵌套的循环语句体中时,也可以通过标签指明要跳过的是哪一层循环。
- 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
举例:
class BreakContinueTest2 {
public static void main(String[] args) {
l:for(int i = 1;i <= 4;i++){
for(int j = 1;j <= 10;j++){
if(j % 4 == 0){
// break l;
continue l;
}
System.out.print(j);
}
System.out.println();
}
}
}经典案例:找质数
题目:找出 100 以内所有的素数(质数)?100000 以内的呢?
目的:不同的代码的实现方式,效率差别很大。
什么是质数?
质数(Prime number),又称素数,指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数(也可定义为只有 1 与该数本身两个正因数的数)。
分析:只能被 1 和它本身整除的自然数。 ---> 从 2 开始,到这个数 -1 为止,此范围内没有这个数的约数。则此数是一个质数。
比如:2、3、5、7、11、13、17、19、23、...
实现方式 1:全部试除法
我们需要明确,计算机最优秀的地方在于机械地重复同一件事,针对质数的判定,正好是它的“强项”,我们只需要按照定义入手,枚举从 2 到 n 的所有数,如果能整除,就返回 false,试到最后还不能的话就返回 true。
class PrimeNumberExer {
public static void main(String[] args) {
long start = System.currentTimeMillis(); //记录当前时间距离 1970-1-1 00:00:00 的毫秒数
int count = 0; // 记录质数的个数
for(int i = 2; i <= 100000; i++){ //i
boolean isFlag = true; // 标识数字 i 是否是质数。默认假设是质数
for(int j = 2;j <= i - 1;j++){
if(i % j == 0){ // 表明 i 有约数,那么它就不是质数了
isFlag = false;
// 不用再继续往下走了
break;
}
}
// 判断 i 是否是质数
if(isFlag){ // 如果 isFlag 变量没有给修改过值,就意味着 i 没有被 j 除尽过。则 i 是一个质数
count++;
}
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:" + count);
System.out.println("执行此程序花费的秒数为:" + (end - start) / 1000.0 + " 秒"); //16628
}
}截图:

实现方式 2:质数筛选
方式一会多次判断 i 是否是质数。
我们这样来想,如果一个正整数 N 能够被一个数 a 整除(a < N),那一定还会有另外一个数 b 能整除 N,而且
class PrimeNumberExerPlus {
public static void main(String[] args) {
long start = System.currentTimeMillis(); //记录当前时间距离 1970-1-1 00:00:00 的毫秒数
int count = 0; // 记录质数的个数
for(int i = 2; i <= 100000; i++){ //i
boolean isFlag = true; // 标识数字 i 是否是质数。默认假设是质数
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){ // 表明 i 有约数,那么它就不是质数了
isFlag = false;
// 不用再继续往下走了
break;
}
}
// 判断 i 是否是质数
if(isFlag){ // 如果 isFlag 变量没有给修改过值,就意味着 i 没有被 j 除尽过。则 i 是一个质数
count++;
}
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:" + count);
System.out.println("执行此程序花费的秒数为:" + (end - start) / 1000.0 + " 秒"); //16628
}
}截图:

实现方式 3:使用 continue + 标签
class PrimeNumberExerPlusLabel {
public static void main(String[] args) {
long start = System.currentTimeMillis(); //记录当前时间距离 1970-1-1 00:00:00 的毫秒数
int count = 0; // 记录质数的个数
label: for(int i = 2; i <= 100000; i++){ // i
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){ // 表明 i 有约数,那么它就不是质数了
// 不用再继续往下走了
continue label;
}
}
// 能走到这里,说明是质数
count++;
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:" + count);
System.out.println("执行此程序花费的秒数为:" + (end - start) / 1000.0 + " 秒"); //16628
}
}截图:
