流程控制(1)
- java中流程控制关键词:
- if-else:
- while
- do-while
- for
- return
- break
- switch
⚠️java不支持goto
流程控制(2)
- 所有条件语句都使用条件表达式的真或假(true或false)来决定执行路径,例:
x == y
⚠️java不允许将数字作为boolean表达式。
流程控制(3)
- if-else,例:
if(Boolean-expression)
statement
或者
if(Boolean-expression)
statement
else
statement
- 代码示例
package operators;
import static net.mindview.util.Print.print;
/**
* @author vincient
* @create 2020-01-19 10:12 AM
*/
public class IfElse {
static int result = 0;
static void test(int testval, int target) {
if (testval > target) {
result = +1;
} else if (testval < target) {
result = -1;
} else {
result = 0;
}
}
public static void main(String[] args) {
test(10, 5);
print(result);
test(5, 10);
print(result);
test(5, 5);
print(result);
}
}
/**
* 输出
* 1
* -1
* 0
*/
流程控制(4)
- while循环语句,例:
while(Boolean-expression)
statement
while型式的表达式,在每次循环前先计算Boolean-expression
代码示例:
package operators;
/**
* @author vincient
* @create 2020-01-19 10:30 AM
*/
public class WhileTest {
static boolean condition(){
boolean result = Math.random() <0.99;
System.out.print(result + ", ");
return result;
}
public static void main(String[] args) {
while (condition()) {
System.out.println("Inside 'while'");
System.out.println("Exited 'while'");
}
}
}
// 结果示例
// true, Inside 'while'
// Exited 'while'
// true, Inside 'while'
// Exited 'while'
// true, Inside 'while'
// ···
// false,
- do-while循环语句,例:
do
statement
while(Boolean-expression);
do-while和while的区别,do-while中的statement至少执行一次,不管Boolean-expression第一次计算结果是否为false,while的话,如果一开始Boolean-expression计算结果为false,statement不会执行。
3. for循环语句,例:
for(initialization; Boolean-expression; step)
statement
initialization,Boolean-expression和step都可以为空。布尔表达式在每次迭代之前执行。在布尔表达式计算为false以前,会一直执行for语句之后的代码行。在每次循环之后,执行step。
代码示例:
package operators;
/**
* @author vincient
* @create 2020-01-19 11:05 AM
*/
public class ListCharacters {
public static void main(String[] args) {
for (char c = 0; c < 128; c++) {
if (Character.isLowerCase(c)) {
System.out.println("value: " + (int) c + " character: " + c);
}
}
}
}
// 输出结果
// value: 97 character: a
// value: 98 character: b
// value: 99 character: c
// value: 100 character: d
// value: 101 character: e
// value: 102 character: f
// value: 103 character: g
// value: 104 character: h
// value: 105 character: i
// value: 106 character: j
// value: 107 character: k
// value: 108 character: l
// value: 109 character: m
// value: 110 character: n
// value: 111 character: o
// value: 112 character: p
// value: 113 character: q
// value: 114 character: r
// value: 115 character: s
// value: 116 character: t
// value: 117 character: u
// value: 118 character: v
// value: 119 character: w
// value: 120 character: x
// value: 121 character: y
// value: 122 character: z
- 逗号运算符,仅用于for循环中,可以用来定义多个变量,但是每个变量必须是相同类型的。
代码示例:
package operators;
/**
* @author vincient
* @create 2020-01-19 11:23 AM
*/
public class CommaOperator {
public static void main(String[] args) {
for (int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
System.out.println("i = " + i + " j = " + j);
}
}
}
// 输出结果:
// i = 1 j = 11
// i = 2 j = 4
// i = 3 j = 6
// i = 4 j = 8
流程控制(5)
- Foreach语法:更简明的for语法。
代码示例:
package operators;
import java.util.Random;
/**
* @author vincient
* @create 2020-01-19 12:49 PM
*/
public class ForEachFloat {
public static void main(String[] args) {
Random rand = new Random(47);
float f[] = new float[10];
for (int i = 0; i < 10; i++) {
f[i] = rand.nextFloat();
}
for (float x : f) {
System.out.println(x);
}
}
}
// 输出结果
// 0.72711575
// 0.39982635
// 0.5309454
// 0.0534122
// 0.16020656
// 0.57799757
// 0.18847865
// 0.4170137
// 0.51660204
// 0.73734957
- 任何返回数组的方法都可以使用foreach
代码示例:
package operators;
/**
* @author vincient
* @create 2020-01-19 12:58 PM
*/
public class ForEachString {
public static void main(String[] args) {
for (char c : "An African Swallow".toCharArray()) {
System.out.print(c + " ");
}
}
}
// 输出结果
// A n A f r i c a n S w a l l o w
- foreach还适用于任何可迭代的对象
- for语句需要在整数值序列中步进,例如:
for(int i = 0; i < 100; i++)
流程控制(6)
- return: 无条件分支关键词。
- 其他无条件分支关键词包括break,continue,以及类似goto功能的语句
- 无条件分支:无需测试即可发生的分支
- return有两个用途:
- 表明不使用void作为返回值的方法的返回值,
- 结束当前方法。
流程控制(7)
- break和continue:控制循环流程
- break离开循环
- continue离开当前循环,开始下一轮循环
代码示例:
package operators;
import static net.mindview.util.Range.range;
/**
* @author vincient
* @create 2020-01-19 3:37 PM
*/
public class BreakAndContinue {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 74) break;
if (i % 9 != 0) continue;
System.out.print(i + " ");
}
System.out.println();
for (int i : range(100)) {
if (i == 74) break;
if (i % 9 != 0) continue;
System.out.print(i + " ");
}
System.out.println();
int i = 0;
while (true) {
i++;
int j = i * 27;
if (j == 1269) break;
if (i % 10 != 0) continue;
System.out.print(i + " ");
}
}
}
// 输出结果
// 0 9 18 27 36 45 54 63 72
// 0 9 18 27 36 45 54 63 72
// 10 20 30 40
- 无限循环:
- while(thue)
- for(;😉
流程控制(8)
- goto:汇编语言中流程控制的起源。
- goto是源码级别的跳转。
- java中的goto和break和continue关键词有关,都使用label机制。例如
label1:
outer-iteration{
inner-iteration{
//...
break; // (1)
//...
continue; // (2)
//...
continue label1; // (3)
//...
break label1; // (4)
}
}
- 意义:中断循环,回到标签所指定的地方
- 语句(1):跳出内部迭代,执行外部迭代
- 语句(2):开始下一轮内部迭代
- 语句(3):中断内外迭代,转到label1,然后从外部迭代开始
- 语句(4):中断内外迭代,转到label1,不再重新进入迭代
代码示例:
package operators;
import static net.mindview.util.Print.print;
/**
* @author vincient
* @create 2020-01-19 4:50 PM
*/
public class LabeledFor {
public static void main(String[] args) {
int i = 0;
outer:
for (; true; ) {
inner:
for (; i < 10; i++) {
print("i = " + i);
if (i == 2) {
print("continue");
continue;
}
if (i == 3) {
print("break");
i++;
break;
}
if (i == 7) {
print("continue outer");
i++;
continue outer;
}
if (i == 8) {
print("break outer");
break outer;
}
for (int k = 0; k < 5; k++) {
if (k == 3) {
print("continue inner");
continue inner;
}
}
}
}
}
}
// 输出结果
//i = 0
//continue inner
//i = 1
//continue inner
//i = 2
//continue
//i = 3
//break
//i = 4
//continue inner
//i = 5
//continue inner
//i = 6
//continue inner
//i = 7
//continue outer
//i = 8
//break outer
package operators;
import static net.mindview.util.Print.print;
/**
* @author vincient
* @create 2020-01-19 5:09 PM
*/
public class LabeledWhile {
public static void main(String[] args) {
int i = 0;
outer:
while (true) {
print("Outer while loop");
while (true) {
i++;
print("i = " + i);
if (i == 1) {
print("continue");
continue;
}
if (i == 3) {
print("continue outer");
continue outer;
}
if (i == 5) {
print("break");
break;
}
if (i == 7) {
print("break outer");
break outer;
}
}
}
}
}
//输出结果:
//Outer while loop
//i = 1
//continue
//i = 2
//i = 3
//continue outer
//Outer while loop
//i = 4
//i = 5
//break
//Outer while loop
//i = 6
//i = 7
//break outer
- 原则:
- continue回到最内层循环的开始继续执行
- 带标签的continue回到label标记处并重新进入label所标记的循环
- break弃用当前循环后面的部分
- 带标签的break弃用标签标记的循环后面的部分
- 使用labels的唯一理由是当循环嵌套时break或continue一层内循环以上
流程控制(9)
- switch:选择语句
- switch语句的常见格式:
switch(integral-selector){
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
case integral-value4 : statement; break;
case integral-value5 : statement; break;
// ...
default: statement;
}
- integral-selector用于生成整数值
- 当integral-selector生成的整数值和某个integral-value相匹配时,相关的语句就会执行。如果没有匹配上,则执行default语句
- break是可选的。break使代码执行跳转到switch主体的末尾。如果break丢失了,则依序执行剩余case语句,直到遭遇某个break。
示例代码:
package operators;
import java.util.Random;
import static net.mindview.util.Print.print;
import static net.mindview.util.Print.printnb;
/**
* @author vincient
* @create 2020-01-19 5:56 PM
*/
public class VowelsAndConsonants {
public static void main(String[] args) {
Random rand = new Random(47);
for (int i = 0; i < 100; i++) {
int c = rand.nextInt(26) + 'a';
printnb((char) c + ", " + c + ": ");
switch (c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
print("vowel");
break;
case 'y':
case 'w':
print("Sometimes a vowel");
break;
default:
print("consonant");
}
}
}
}
//输出结果:
//y, 121: Sometimes a vowel
//n, 110: consonant
//z, 122: consonant
//b, 98: consonant
//r, 114: consonant
//n, 110: consonant
//y, 121: Sometimes a vowel
//g, 103: consonant
//c, 99: consonant
//f, 102: consonant
//o, 111: vowel
//w, 119: Sometimes a vowel
//z, 122: consonant
//...
来源:CSDN
作者:vincient爱游戏
链接:https://blog.csdn.net/weixin_42908976/article/details/104043862