1. 三目运算符 “?:”
“式子A?式子B:式子C”:当A成立时,得到式子B的结果;当式子A不成立时,得到式子C的结果。
注:该运算符只适用于需要返回计算结果的场合。
2.switch-case的分支标记
......
System.out.println("凉风有信,秋月无边。打二字");
System.out.println("获取“凉风有信”的谜底请按1,获取“秋月无边”的谜底请按2");
Scanner scan = new Scanner(System.in); // 从控制台接收输入文本
int seq = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾
// switch允许判断某个变量的多个取值,并分别进行单独处理
switch (seq) {
case 1: // seq值为1时进入该分支
System.out.println("凉风有信的谜底是“讽”");
break; // 跳出多路分支。即跳到switch分支的右花括号之后
case 2: // seq值为2时进入该分支
System.out.println("秋月无边的谜底是“二”");
break; // 跳出多路分支。即跳到switch分支的右花括号之后
default: // seq值为其它时进入该分支
System.out.println("您的按键有误");
break; // 跳出多路分支。即跳到switch分支的右花括号之后
}
System.out.println("猜谜结束");
多路分支固然好用,但要特别注意以下几点:
(1)多路分支只能判断整型(含byte、short、int)、字符型、枚举型3种类型的变量,无法判断布尔、浮点、双精度等其他类型的变量。
(2)case语句后面的数值只能做相等判断,不能开展大于、小于等其他关系运算。
3.for循环的数组元素遍历
若不修改元素的数值,则可以运用冒号对数组进行遍历,故利用“变量类型 变量名称 : 数组名称”的形式,直接把数组元素赋值给该变量。
一维数组冒号遍历
......
int[] numbers = { 2, 3, 5, 7 };
//for (int i = 0; i < numbers.length; i++) {
//int number = numbers[i]; // 获取下标为i的元素,并赋值给名为number的变量
//System.out.println("number = " + number);
//}
// 在for循环中,可以利用“变量类型 变量名称 : 数组名称”的形式,直接把数组元素赋值给该变量
for (int number : numbers) {
System.out.println("number = " + number);
}
二维数组冒号遍历
......
int[][] numbers = {{1,3,5} , {2,4,6}};
/*for(int i = 0; i < numbers.length; i++){
* for(int j = 0; j < numbers[].length; j++){
* System.out.println("value =" + numbers[i][j]);
*/
for(int[] number_1 : numbers) {
for(int number_2 : number_1) {
System.out.println("number_2 =" + number_2);
}
}
4.多层循环的跳转标记
此处的冒号也与循环语句有关,但不限于for循环,而是与for 和 while 都有关联。然而在实际开发中常常会遇到多层循环,为了更好的达到开发目的,便利用“ 标记名称 :for / while ” 的表达式,即可给定循环起一个外号,于是语句“break 标记名称 ”便实现跳出指定循环的需求。
......
double[][] triangle = { { -2.0, 0.0 }, { 0.0, -1.0 }, { 2.0, 1.0 } };
// 下面通过多重循环依次打印二维数组里面的所有元素
for (int i = 0; i < triangle.length; i++) {
for (int j = 0; j < triangle[i].length; j++) {
System.out.println("value = " + triangle[i][j]);
}
}
// 初始:处理要求:一旦发现数组元素等于0.0,就立即从第二层循环跳出第一层循环(跳出两层循环)
for (int i = 0; i < triangle.length; i++) {
boolean isFound = false; // 该布尔变量用来标记是否找到0.0
for (int j = 0; j < triangle[i].length; j++) {
if (triangle[i][j] == 0.0) {
isFound = true; // 找到了0.0
System.out.println("simple found 0.0");
break; // 跳出第二层循环
}
}
if (isFound) { // 根据布尔变量判断是否找到了0.0
break; // 跳出第一层循环
}
}
// 优化:下面的loop1是一个记号,连同后面的冒号加在for前面,表示它指代这个for循环
loop1: for (int i = 0; i < triangle.length; i++) {
for (int j = 0; j < triangle[i].length; j++) {
if (triangle[i][j] == 0.0) { // 找到了0.0,准备跳出外层循环
System.out.println("loop1 found 0.0");
break loop1; // 跳出loop1代表的循环,也就是跳出第一层循环
}
}
}
// 最终优化:下面用到了两种冒号,一种用来标记循环,另一种用来简化数组遍历
loop2: for (double[] dot : triangle) { // dot等价于前面的triangle[i]
for (double coordinate : dot) { // coordinate等价于前面的triangle[i][j]
if (coordinate == 0.0) { // 找到了0.0,准备跳出外层循环
System.out.println("loop2 found 0.0");
break loop2; // 跳出loop2代表的循环
}
}
}
误解 :break 与 continue 区别:
a. break:跳出本次循环的循环块或者程序块;
b. continue:强迫程序跳到本次循环的起始处。