流程控制语句是用于控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
分支结构
分支结构根据条件,选择性地执行某段代码;有
if-else
和switch-case
两种分支语句。 凡是可以使用switch-case
的结构都可以方便地转换成if-else
结构,反之不成立。 在使得代码可读性更好、执行效率更高的条件下,优先使用switch-case
结构。
if-else
若多个条件表达式间互斥,语句的上下关系不唯一;若多个条件表达式间有交集,与要仔细判断语句的上下关系。
- if-else 结构是可以相互嵌套的;
- 如果 if-else 结构中的执行语句只有一行,对应的一对大括号可以省略,但不建议。
满足条件则执行
class IfTest{
public static void main(String[] args){
int heartBeats = 105;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("心率不正常,需要做进一步检查。");
}
System.out.println("心率检查报告结束。");
}
}
运行结果:
心率不正常,需要做进一步检查。
心率检查报告结束。
条件二选一
class IfTest{
public static void main(String[] args){
int age = 20;
if(age < 18){
System.out.println("小朋友你好!");
}else{
System.out.println("你不再是小孩子了。");
}
}
}
运行结果:
你不再是小孩子了。
条件多选一
class IfTest{
public static void main(String[] args){
int age = 20;
if(age < 0){
System.out.println("非法数据。");
}else if(age < 12){
System.out.println("你好,小朋友!");
}else if(age < 18){
System.out.println("你好,少年!");
}else if(age < 35){
System.out.println("你好,青壮年!");
}else if(age < 60){
System.out.println("你好,中年!");
}else if(age < 120){
System.out.println("你好,爷爷/奶奶!");
}else{
System.out.println("你是要成仙啊~");
}
}
}
运行结果:
你好,青壮年!
从控制台获取 3 个整数,并从小到大输出
import java.util.Scanner;
class NumbersComparing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第 1 个整数:");
int i = scanner.nextInt();
System.out.print("请输入第 2 个整数:");
int j = scanner.nextInt();
System.out.print("请输入第 3 个整数:");
int k = scanner.nextInt();
int max = (i >= j && i >= k) ? i : (j >= k) ? j : k;
int min = (i <= j && i <= k) ? i : (j <= k) ? j : k;
System.out.println("从小到大排序之后的值为:");
System.out.println("" + min + ", " + (i + j + k - max - min) + ", " + max);
}
}
输入:-9
、-67
、8
。
运行结果:
请输入第 1 个整数:-9
请输入第 2 个整数:-67
请输入第 3 个整数:8
从小到大排序之后的值为:
-67, -9, 8
彩票游戏
开发一个玩彩票的游戏:随机产生一个两位数彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能获奖。如果用户输入的数:
- 完全匹配,奖金 10,000 美元;
- 数字匹配但顺序不一致,奖金 3,000 美元;
- 只有一个数字匹配但满足顺序,奖金 1,000 美元;
- 只有一个数字匹配但不满足顺序,奖金 500 美元;
- 没有匹配任何一个数字,彩票作废。
提示:使用
Math.random()
产生 [0,1) 间的随机数。 随机数范围 [a, b]:(int) (Math.random() * (b - a + 1) + a)
原本的范围为 1,(b-a) 确定放大倍数,用乘法扩大范围,+1 弥补左闭右开,+a 移动位置。 如:随机数范围 10~99,则:(int) (Math.random() * 90 + 10)
import java.util.Scanner;
class TestCaiPiao {
public static void main(String[] args) {
//1. 随机产生一个两位数
int randomNum = (int) (Math.random() * 90 + 10);//得到[10,100),取整后为[10,99]
int tenRandom = randomNum / 10;
int singleRandom = randomNum % 10;
System.out.println(randomNum);
//2、用户输入一个两位数
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个两位数:");
int guessNum = scan.nextInt();
int tenGuess = guessNum / 10;
int singleGuess = guessNum % 10;
if (randomNum == guessNum) {
System.out.println("奖金10,000美元");
} else if (tenRandom == singleGuess && singleRandom == tenGuess) {
System.out.println("奖金3,000美元");
} else if (tenRandom == tenGuess || singleRandom == singleGuess) {
System.out.println("奖金1,000美元");
} else if (tenRandom == singleGuess || singleRandom == tenGuess) {
System.out.println("奖金500美元");
} else {
System.out.println("没中奖");
}
System.out.println("中奖号码是:" + randomNum);
}
}
switch-case
根据
switch
表达式中的值,依次匹配各个case
中的常量。 一旦匹配成功,进入相应的case
结构中,执行其中的语句。break;
语句用于跳出switch-case
结构,可选。若这个case
中没有break;
语句,将依次执行其下的case
中的语句,而不再判断case
的常量。
switch
表达式只能是如下的 6 种数据类型:
- byte 类型;
- short 类型;
- char 类型;
- int 类型;
- 枚举类型(JDK 5.0 后新增);
- String 类型(JDK 7.0 后新增)。
case
只能用于声明常量,不能用于声明范围。 如果多个 case 内的语句相同,可以直接合并。
class SwitchText {
public static void main(String[] args) {
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
}
运行结果:
夏日炎炎
输入日子,计算是该年的第几天
import java.util.Scanner;
class DateSerialNumberCalculation {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scan.nextInt();
System.out.print("请输入" + year + "年的月份:");
int month = scan.nextInt();
System.out.print("请输入" + year + "年的日期:");
int day = scan.nextInt();
int dateSerialNumber = 0;
int february = 28;
if (year % 4 == 0 & year % 100 != 0 | year % 400 == 0) {
february = 29;
}
switch (month - 1) {
case 12:
dateSerialNumber += 31;
case 11:
dateSerialNumber += 30;
case 10:
dateSerialNumber += 31;
case 9:
dateSerialNumber += 30;
case 8:
dateSerialNumber += 31;
case 7:
dateSerialNumber += 31;
case 6:
dateSerialNumber += 31;
case 5:
dateSerialNumber += 31;
case 4:
dateSerialNumber += 31;
case 3:
dateSerialNumber += 31;
case 2:
boolean isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
dateSerialNumber += isLeapYear ? 29 : 28;
case 1:
dateSerialNumber += 31;
}
dateSerialNumber += day;
System.out.println(year + "年的" + month + "月" + day + "日是这年的第" + dateSerialNumber + "天。");
}
}
运行结果 1:
请输入年份:2020
请输入2020年的月份:3
请输入2020年的日期:1
2020年的3月1日是这年的第61天。
运行结果 2:
请输入年份:2021
请输入2021年的月份:3
请输入2021年的日期:1
2021年的3月1日是这年的第60天。
运行结果 3:
请输入年份:2020
请输入2020年的月份:12
请输入2020年的日期:7
2020年的12月7日是这年的第344天。
循环结构
循环结构根据循环条件,重复性的执行某段代码;有
while
、do-while
、for
三种循环语句。JDK 1.5 提供了
foreach
循环,方便地遍历集合、数组元素。循环语句的 4 个组成部分:
- 初始化部分 (init_statement);
- 循环条件部分 (test_exp);
- 循环体部分 (body_statement);
- 迭代部分 (alter_statement)。
for (; ; )
和while (true)
结构可以不限制循环次数。
- 跳出循环的方式有:循环条件返回
false
;在循环体中执行了break;
。
for
循环
for (①<init_statement>; ②<test_exp>; ④<alter_statement>) {
③<body_statement>;
}
①-→②-→③-→④-→②-→③-→④-→②-→③-→④-→……-→②
- 循环条件部分(
test_exp
)是boolean
类型表达式。当值为true
时,执行循环体部分(body_statement
);为false
时,跳出循环;- 初始化部分(
init_statement
)可以用逗号分隔以声明多个同一类型的变量;- 迭代部分(
alter_statement
)可以有多个用逗号分隔的变量更新。
用 for 循环在控制台打印输出 5 次“Hello World!”
class LoopStructureFor {
public static void main(String[] args) {
for (int n = 1; n <= 5; n++) {
System.out.print("n = " + n);
System.out.println("\tHello World!");
}
}
}
运行结果:
n = 1 Hello World!
n = 2 Hello World!
n = 3 Hello World!
n = 4 Hello World!
n = 5 Hello World!
思考以下代码的运行结果:
class LoopStructureFor {
public static void main(String[] args) {
int num = 1;
for (System.out.print('a'); num <= 3; System.out.print('b'), num++){
System.out.print('c');
}
}
}
运行结果:
acbcbcb
遍历 0~100 以内的偶数,计数并求和
class LoopEvenNum {
public static void main(String[] args) {
int sumEvenNum = 0, countEvenNum = 0;
for (int i = 0; i <= 100; i++) {
if (i % 2 == 0) {
countEvenNum++;
System.out.printf("%d ", i);
sumEvenNum += i;
}
}
System.out.println("\nsumEvenNum = " + sumEvenNum);
System.out.println("countEvenNum = " + countEvenNum);
}
}
运行结果:
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
sumEvenNum = 2550
countEvenNum = 51
倍数判断
从 1 循环到 150,并在每行打印一个值。在每个 3、5、7 的倍数行上分别打印标记。
class MultipleJudgement {
public static void main(String[] args) {
int i;
for (i = 1; i <= 150; i++) {
String add3, add5, add7;
add3 = (i % 3 == 0) ? "[3]" : "";
add5 = (i % 5 == 0) ? "[5]" : "";
add7 = (i % 7 == 0) ? "[7]" : "";
System.out.println(i + " - " + add3 + add5 + add7);
}
}
}
运行结果:
1 -
2 -
3 - [3]
4 -
5 - [5]
6 - [3]
7 - [7]
8 -
9 - [3]
10 - [5]
11 -
12 - [3]
13 -
14 - [7]
15 - [3][5]
16 -
17 -
18 - [3]
19 -
20 - [5]
21 - [3][7]
22 -
23 -
24 - [3]
25 - [5]
26 -
27 - [3]
28 - [7]
29 -
30 - [3][5]
31 -
32 -
33 - [3]
34 -
35 - [5][7]
36 - [3]
37 -
38 -
39 - [3]
40 - [5]
41 -
42 - [3][7]
43 -
44 -
45 - [3][5]
46 -
47 -
48 - [3]
49 - [7]
50 - [5]
51 - [3]
52 -
53 -
54 - [3]
55 - [5]
56 - [7]
57 - [3]
58 -
59 -
60 - [3][5]
61 -
62 -
63 - [3][7]
64 -
65 - [5]
66 - [3]
67 -
68 -
69 - [3]
70 - [5][7]
71 -
72 - [3]
73 -
74 -
75 - [3][5]
76 -
77 - [7]
78 - [3]
79 -
80 - [5]
81 - [3]
82 -
83 -
84 - [3][7]
85 - [5]
86 -
87 - [3]
88 -
89 -
90 - [3][5]
91 - [7]
92 -
93 - [3]
94 -
95 - [5]
96 - [3]
97 -
98 - [7]
99 - [3]
100 - [5]
101 -
102 - [3]
103 -
104 -
105 - [3][5][7]
106 -
107 -
108 - [3]
109 -
110 - [5]
111 - [3]
112 - [7]
113 -
114 - [3]
115 - [5]
116 -
117 - [3]
118 -
119 - [7]
120 - [3][5]
121 -
122 -
123 - [3]
124 -
125 - [5]
126 - [3][7]
127 -
128 -
129 - [3]
130 - [5]
131 -
132 - [3]
133 - [7]
134 -
135 - [3][5]
136 -
137 -
138 - [3]
139 -
140 - [5][7]
141 - [3]
142 -
143 -
144 - [3]
145 - [5]
146 -
147 - [3][7]
148 -
149 -
150 - [3][5]
break
关键字的使用
输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
class BreakTestInForLoop {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入第 1 个正整数:");
int m = scan.nextInt();
System.out.print("请输入第 2 个正整数:");
int n = scan.nextInt();
int greatestCommonDivisor = 0;
int leastCommonMultiple = 0;
for (int i = Math.min(m, n); i >= 1; i--) {
if (m % i == 0 && n % i == 0) {
greatestCommonDivisor = i;
break;
}
}
for (int i = Math.max(m, n); i <= m * n; i++) {
if (i % m == 0 && i % n == 0) {
leastCommonMultiple = i;
break;
}
}
System.out.println("最大公约数:" + greatestCommonDivisor + "\n最小公倍数:" + leastCommonMultiple);
}
}
运行结果:
请输入第 1 个正整数:20
请输入第 2 个正整数:12
最大公约数:4
最小公倍数:60
水仙花数
所谓水仙花数是指一个 3 位数,其各个位上数字立方和等于其本身。
class GetDaffodilsNumber {
public static void main(String[] args) {
for (int i = 100; i <= 999; i++) {
int individual, ten, hundred;
individual = i % 10;
ten = i / 10 % 10;
hundred = i / 100;
if (Math.pow(individual, 3) + Math.pow(ten, 3) + Math.pow(hundred, 3) == i) {
System.out.println("i = " + i);
}
}
}
}
运行结果:
i = 153
i = 370
i = 371
i = 407
while
循环
①<init_statement>;
while (②<test_exp>) {
③<body_statement>;
④<alter_statement>;
}
①-→②-→③-→④-→②-→③-→④-→②-→③-→④-→……-→②
- 注意不要忘记声明迭代部分
④<alter_statement>
。否则将出现死循环;for
循环和while
循环都可以相互转换。- 对于
for
循环,初始化声明①<init_statement>;
中的变量是局部变量,而while
循环的可以在循环体外部被访问。它们的初始化声明变量的作用域不一样。
遍历 0~100 以内的偶数
class LoopStructureWhileTest {
public static void main(String[] args) {
int i = 0;
while (i <= 100) {
if (i % 2 == 0) {
System.out.println("i = " + i);
}
i++;
}
}
}
do-while
循环
①<init_statement>;
do {
③<body_statement>;
④<alter_statement>;
} while (②<test_exp>);
①-→③-→④-→②-→③-→④-→②-→③-→④-→……-→②do-while
循环至少执行一次循环体。
遍历 0~100 以内的偶数
class LoopStructureDoWhileTest1 {
public static void main(String[] args) {
int i = 1;
do {
if (i % 2 == 0) {
System.out.println("i = " + i);
}
i++;
} while (i <= 100);
}
}
循环语句综合练习
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为 0 时结束程序。
for
class LoopStructureExercise {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num, positiveNum = 0, negativeNum = 0;
for (; ; ) {
System.out.print("请输入一个整数(以[0]退出):");
num = scan.nextInt();
if (num > 0) {
positiveNum++;
} else if (num < 0) {
negativeNum++;
} else {
break;
}
}
System.out.println("positiveNum = " + positiveNum);
System.out.println("negativeNum = " + negativeNum);
}
}
运行结果:
请输入一个整数(以[0]退出):1
请输入一个整数(以[0]退出):2
请输入一个整数(以[0]退出):-4
请输入一个整数(以[0]退出):-6
请输入一个整数(以[0]退出):-7
请输入一个整数(以[0]退出):3
请输入一个整数(以[0]退出):0
positiveNum = 3
negativeNum = 3
while
class LoopStructureExercise {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNum = 0, negativeNum = 0;
while (true) {
System.out.print("请输入一个整数(以[0]退出):");
int num = scan.nextInt();
if (num > 0) {
positiveNum++;
} else if (num < 0) {
negativeNum++;
} else {
break;
}
}
System.out.println("positiveNum = " + positiveNum);
System.out.println("negativeNum = " + negativeNum);
}
}
运行结果:
请输入一个整数(以[0]退出):1
请输入一个整数(以[0]退出):4
请输入一个整数(以[0]退出):2
请输入一个整数(以[0]退出):-7
请输入一个整数(以[0]退出):-5
请输入一个整数(以[0]退出):22
请输入一个整数(以[0]退出):4
请输入一个整数(以[0]退出):0
positiveNum = 5
negativeNum = 2
do-while
class LoopStructureExercise3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNum = 0, negativeNum = 0;
do {
System.out.print("请输入一个整数(以[0]退出):");
int num = scan.nextInt();
if (num > 0) {
positiveNum++;
} else if (num < 0) {
negativeNum++;
} else {
break;
}
} while (true);
System.out.println("positiveNum = " + positiveNum);
System.out.println("negativeNum = " + negativeNum);
}
}
运行结果:
请输入一个整数(以[0]退出):1
请输入一个整数(以[0]退出):2
请输入一个整数(以[0]退出):3
请输入一个整数(以[0]退出):4
请输入一个整数(以[0]退出):-1
请输入一个整数(以[0]退出):-2
请输入一个整数(以[0]退出):0
positiveNum = 4
negativeNum = 2
嵌套循环
当内层循环的循环条件为
false
则跳出内层循环,才可结束外层的当次循环,开始下一次的循环; 设外层循环次数为m
次,内层为n
次,则内层循环体实际上需要执行m*n
次。
打印输出“*”型的矩形
class LoopNestingTest1 {
public static void main(String[] args) {
for (int raw = 1; raw <= 3; raw++) {
for (int column = 1; column <= 6; column++) {
System.out.print('*');
}
System.out.println();
}
}
}
运行结果:
******
******
******
打印输出直立的“-”型直角三角形
class LoopNestingTest2 {
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();
}
}
}
运行结果
-
--
---
----
-----
打印输出倒立的“·”型直角三角形
class LoopNestingTest3 {
public static void main(String[] args) {
for (int i = 6; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
System.out.print('·');
}
System.out.println();
}
}
}
运行结果
······
·····
····
···
··
·
打印输出以下形状
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
代码参考:
class LoopNestingTest4 {
public static void main(String[] args) {
int width = 4;
String mark = "* ", blank = " ";
for (int i = 1; i <= width; i++) {
for (int j = width - i + 1; j > 1; j--) {
System.out.print(blank);
}
for (int k = 1; k <= i; k++) {
System.out.print(mark);
}
System.out.println();
}
for (int i = width - 1; i >= 1; i--) {
for (int k = 1; k <= width - i; k++) {
System.out.print(blank);
}
for (int j = i; j >= 1; j--) {
System.out.print(mark);
}
System.out.println();
}
}
}
打印输出九九乘法表
class ChineseMultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + i * j);
System.out.print((i == j) ? "" : "\t");
}
System.out.println();
}
}
}
运行结果:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
试除法判断 100 以内的所有质数
基本策略
class GetPrimeNumber {
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) { // 遍历自然数范围:[2,100]
boolean isPrimeNumber = true;
for (int j = 2; j <= i - 1; j++) {
if (i % j == 0) {
isPrimeNumber = false;
}
}
System.out.print(isPrimeNumber ? i + "\t" : "");
}
}
}
运行结果:
2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97、
优化方案
使用
System.currentTimeMillis();
获取一个`long型`时间戳,表示从 _1970-01-01 00:00:00 至此刻的毫秒数。 在程序执行前后两次调用这个语句,作差可求得程序运行历时。
class GetPrimeNumber {
/**
* 质数:在大于 1 的自然数中,除了 1 和该数本身,无法被其他自然数整除的数。
*
* @implNote 从 n 开始(n>=2),对于每一个待检测的数 N,如果在范围 [n, N-1] 内,
* 没有任何一个数可以将 N 整除,那么数字 N 就是质数;
* 只要有一个可以将 N 整除,那么数字 N 就是合数。
* <p>
* 范围 [n, N-1] 可以进一步缩小至 [n, √N]:任何一个合数 M 都可以表示为 a×b,其中 a>=b。
* 当 a==b 时,n、a、b 的跨度范围最小。
*/
public static void main(String[] args) { // 程序的入口地址
System.out.print("求质数:范围 2~");
Scanner scan = new Scanner(System.in);
int maximum = scan.nextInt(), primeCounter = 0;
long begin = System.currentTimeMillis();
for (int i = 2; i <= maximum; i++) { // 遍历自然数范围:[2, maximum]
boolean isPrimeNumber = true; // 为每一个参与遍历的数初始化一个标识符:isPrimeNumber,默认是质数
for (int j = 2; j <= Math.sqrt(i); j++) { // 若参与遍历的这个数是 N,需要从 2 开始比较。【优化二】缩减跨度范围
if (i % j == 0) { // 取余,看是否除尽
isPrimeNumber = false; // 可以被除了 1 和它本身的其他数整除 —— 不是质数
break; // 【优化一】只要不是质数就跳出对这个数的循环判断
}
}
if (isPrimeNumber) {
primeCounter++; // 是质数 -> 给 primeCounter 加 1
}
}
long end = System.currentTimeMillis();
System.out.println("共计 " + primeCounter + " 个质数。"); // 【优化三】取消输出打印值的过程,只输出范围内的质数个数,提高效率
System.out.println("耗时 (ms):" + (end - begin));
}
}
运行结果:
求质数:范围 2~10000000
共计 664579 个质数。
耗时 (ms):5422
求“完数”
public class GetPerfectNumber {
/**
* 若一个数恰好等于其因子之和,则为 “完数” (6 = 1+2+3=1×2×3)
* 注:
* 因子:除去该数本身的其他约数
*/
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
int factor = 0;
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) {
factor += j;
}
}
if (i == factor) {
System.out.print("\t" + i);
}
}
}
}
运行结果:
6 28 496
特殊关键字的使用
关键字 | 使用范围 | 在循环结构中的作用 |
---|---|---|
break | switch-case 结构、循环 结构 |
结束当前循环 |
continue | 循环结构 | 结束当次循环 |
break
和continue
默认只作用于内层的循环。通过在循环结构前加标识的方式可以作用于指定循环。
return
关键字也可以用于结束循环,但主要用于对方法的结束。
break
class BreakTest1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 4 == 0) {
break;
}
System.out.print(" " + i);
}
}
}
运行结果:
1 2 3
嵌套:
class BreakTest2 {
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 10; j++) {
if (j % 4 == 0) {
break;
}
System.out.print(j);
}
System.out.println();
}
}
}
运行结果:
123
123
123
123
加标识
class BreakTest3 {
public static void main(String[] args) {
breakTest3:
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 10; j++) {
if (j % 4 == 0) {
break breakTest3;
}
System.out.print(j);
}
System.out.println();
}
}
}
运行结果:
123
continue
class ContinueTest1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 4 == 0) {
continue;
}
System.out.print(" " + i);
}
}
}
运行结果:
1 2 3 5 6 7 9 10
嵌套
class ContinueTest2 {
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 10; j++) {
if (j % 4 == 0) {
continue;
}
System.out.print(j);
}
System.out.println();
}
}
}
运行结果:
123567910
123567910
123567910
123567910
加标识
class ContinueTest3 {
public static void main(String[] args) {
continueTest3:
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 10; j++) {
if (j % 4 == 0) {
continue continueTest3;
}
System.out.print(j);
}
System.out.println();
}
}
}
运行结果:
123123123123
试除法判断质数(改进)
class GetPrimeNumberPro {
public static void main(String[] args) {
System.out.print("求质数:范围 2~");
Scanner scan = new Scanner(System.in);
int maximum = scan.nextInt(), primeCounter = 0;
long begin = System.currentTimeMillis();
loopTest:
for (int i = 2; i <= maximum; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
continue loopTest; // 不是质数,直接测试下一个数
}
}
primeCounter++; // 只有是质数的时候才 +1
}
long end = System.currentTimeMillis();
System.out.println("共计 " + primeCounter + " 个质数。");
System.out.println("耗时 (ms):" + (end - begin));
}
}