Java之冒号的用法

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:强迫程序跳到本次循环的起始处。

posted on 2021-01-03 12:59  code->  阅读(1851)  评论(0编辑  收藏  举报

导航