Java基础:程序流程控制

1 程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

1)顺序控制
2)分支控制
3)循环控制

2 顺序控制

在这里插入图片描述

3 分支控制if-else

3.1 分支控制if-else介绍

让程序有选择的的执行,分支控制有三种
1)单分支if
2)双分支if-else
3)多分支if-else if -...-else

3.2 单分支

基本语法
if(条件表达式){
	执行代码块;(可以有多条语句.)
}
说明:当条件表达式为ture时,就会执行{}的代码。如果为false ,就不执行.特别说明,如果{}中只有一条语句,则可以不用{},韩老师建议写上{}
//if的快速入门
import java.util.Scanner;//导入
public class If01 { 

	//编写一个main方法
	public static void main(String[] args) {
		//编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,
		//则输出 "你年龄大于18,要对自己的行为负责,送入监狱"	
		//
		//思路分析
		//1. 接收输入的年龄, 应该定义一个Scanner 对象
		//2. 把年龄保存到一个变量 int age
		//3. 使用 if 判断,输出对应信息
		
		//应该定义一个Scanner 对象
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄");
		//把年龄保存到一个变量 int age
		int age = myScanner.nextInt();
		//使用 if 判断,输出对应信息
		if(age > 18) {
			System.out.println("你年龄大于18,要对自己的行为负责,送入监狱");
		}

		System.out.println("程序继续...");


	}
}

在这里插入图片描述

4 双分支

基本语法
if(条件表达式){
	执行代码块1;
}
else {
	执行代码块2;
}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2.如果执行代码块只有一条语句,则{}可以省略,否则,不能省略
//if-else的快速入门
import java.util.Scanner;//导入
public class If02 { 

	//编写一个main方法
	public static void main(String[] args) {
		//编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,
		//则输出 "你年龄大于18,要对
		//自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了."

		//
		//思路分析
		//1. 接收输入的年龄, 应该定义一个Scanner 对象
		//2. 把年龄保存到一个变量 int age
		//3. 使用 if-else 判断,输出对应信息
		
		//应该定义一个Scanner 对象
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄");
		//把年龄保存到一个变量 int age
		int age = myScanner.nextInt();
		//使用 if-else 判断,输出对应信息
		if(age > 18) {
			System.out.println("你年龄大于18,要对自己的行为负责,送入监狱");
		} else {//双分支
			System.out.println("你的年龄不大这次放过你了");
		}

		System.out.println("程序继续...");


	}
}

4.1 双分支

在这里插入图片描述

4.2 单分支和双分支练习

//单分支和双分支的练习
//
public class IfExercise01 { 

	//编写一个main方法
	public static void main(String[] args) {

		//编写程序,声明2个double型变量并赋值。
		//判断第一个数大于10.0,且第2个数小于20.0,打印两数之和
		
		//思路分析
		
		double d1 = 33.5;
		double d2 = 2.6;
		if(d1 > 10.0 && d2 < 20.0) {
			System.out.println("两个数和=" + (d1 + d2));
		}

		//定义两个变量int,判断二者的和,
		//是否能被3又能被5整除,打印提示信息
		//
		//思路分析
		//1. 定义两个变量int num1, num2
		//2. 定义一个变量 int sum = num1 + num2;
		//3. sum % 3 , 5 后 等于0 说明可以整除
		//4. 使用 if - else 来提示对应信息
		//走代码
		int num1 = 10;
		int num2 = 1;
		int sum = num1 + num2;
		if(sum % 3 == 0 && sum % 5 == 0) {
			System.out.println("和可以被3又能被5整除");
		} else {
			System.out.println("和不能被3和5整除..");
		}

		//判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
		//(1)年份能被4整除,但不能被100整除;(2)能被400整除
		//
		//思路分析
		//1. 定义 int year 保存年
		//2. 年份能被4整除,但不能被100整除, 
		//   => year % 4 == 0 && year % 100 != 0 
		//3. 能被400整除 => year % 400 == 0
		//4. 上面的 2 和  3 是 或的关系 
		//代码实现
		int year = 2028;
		if( (year % 4 == 0 && year % 100 != 0) ||  year % 400 == 0 ) {
			System.out.println(year + " 是 闰年");
		} else {
			System.out.println(year + " 不是 闰年");
		}
	}
}

4.3 多分支

基本语法
if(条件表达式1){
	执行代码块1;
}
else if(条件表达式2){
	执行代码块2;
}
......
else{
执行代码块n;
}

特别说明:(1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有(2)如果有else ,如果所有的条件表达式都不成立,则默认执行else代码块
在这里插入图片描述

4.4 多分支练习

import java.util.Scanner;
public class If03 { 

	//编写一个main方法
	public static void main(String[] args) {
		/*
		输入张三的芝麻信用分:
		如果:
		信用分为100分时,输出 信用极好;
		信用分为(80,99]时,输出 信用优秀;
		信用分为[60,80]时,输出 信用一般;
		其它情况 ,输出 信用 不及格 
		请从键盘输入保国的芝麻信用分,并加以判断
		假定信用分数为int
		 */
		
		Scanner myScanner = new Scanner(System.in);
		//接收用户输入
		System.out.println("请输入信用分(1-100):");
		//请思考:如果小伙伴输入的不是整数,而是hello..
		//==>这里我们后面可以使用异常处理机制搞定-》老师点一下
		int grade = myScanner.nextInt();

		//先对输入的信用分,进行一个范围的有效判断 1-100, 否则提示输入错误

		if(grade >=1 && grade <= 100) {
			//因为有4种情况,所以使用多分支
			if(grade == 100) {
				System.out.println("信用极好");
			} else if (grade > 80 && grade <= 99) { //信用分为(80,99]时,输出 信用优秀;
				System.out.println("信用优秀");
			} else if (grade >= 60 && grade <= 80) {//信用分为[60,80]时,输出 信用一般
				System.out.println("信用一般");
			} else {//其它情况 ,输出 信用 不及格 
				System.out.println("信用不及格");
			}

		} else {
			System.out.println("信用分需要在1-100,请重新输入:)");
		}

	}
}

5 嵌套分支

5.1 基本介绍

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。
人生建议:不要超过3层(可读性不好)

5.2 基本语法

if(){
	if(){
		
	}else{}
}

5.3 案例

参加歌手比赛,如果初赛成绩大于8.0进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。

import java.util.Scanner;
public class NestedIf { 

	//编写一个main方法
	public static void main(String[] args) {
		/*
		参加歌手比赛,如果初赛成绩大于8.0进入决赛,
		否则提示淘汰。并且根据性别提示进入男子组或女子组。
		输入成绩和性别,进行判断和输出信息。

		提示: double score; char gender; 
		接收字符: char gender = scanner.next().charAt(0)

		 */
		//思路分析
		//1. 创建Scanner对象,接收用户输入
		//2. 接收 成绩保存到 double score
		//3. 使用 if-else 判断 如果初赛成绩大于8.0进入决赛,否则提示淘汰
		//4. 如果进入到 决赛,再接收 char gender, 使用 if-else 输出信息
		//代码实现 => 思路 --> java代码
		
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入该歌手的成绩");
		double score = myScanner.nextDouble();
		if( score > 8.0 ) {
			System.out.println("请输入性别");
			char gender = myScanner.next().charAt(0); 
			if( gender == '男' ) {
				System.out.println("进入男子组");
			} else if(gender == '女') {
				System.out.println("进入女子组");
			} else {
				System.out.println("你的性别有误,不能参加决赛~");
			}
		} else {
			System.out.println("sorry ,你被淘汰了~");
		}
	}
}

6 switch分支结构

6.1 基本语法

在这里插入图片描述
在这里插入图片描述

6.2 案例

import java.util.Scanner;
public class Switch01 { 

	//编写一个main方法
	public static void main(String[] args) {
		/*
		请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g  
		a表示星期一,b表示星期二 …  
		根据用户的输入显示相应的信息.要求使用 switch 语句完成

		思路分析
		1. 接收一个字符 , 创建Scanner对象
		2. 使用switch 来完成匹配,并输出对应信息
		代码

		 */
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个字符(a-g)");
		char c1 = myScanner.next().charAt(0);//
		//在java中,只要是有值返回,就是一个表达式
		switch(c1) {
			case 'a' : 
				System.out.println("今天星期一,猴子穿新衣");
				break;
			case 'b' : 
				System.out.println("今天星期二,猴子当小二");
				break;
			case 'c' : 
				System.out.println("今天星期三,猴子爬雪山..");
				break;
			//.....
			default:
				System.out.println("你输入的字符不正确,没有匹配的");

		}

		System.out.println("退出了switch ,继续执行程序");
	}
}

6.3 switch注意事项和细节讨论

在这里插入图片描述


public class SwitchDetail { 

	//编写一个main方法
	public static void main(String[] args) {
		
		//细节1
		//表达式数据类型,应和case 后的常量类型一致,
		//或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
		
		//细节2
		//switch(表达式)中表达式的返回值必须是:
		//(byte,short,int,char,enum[枚举],String)

		//细节3
		//case子句中的值必须是常量(1,'a')或者是常量表达式,而不能是变量
		//
		//细节4
		//default子句是可选的,当没有匹配的case时,执行default
		//如果没有default 子句,有没有匹配任何常量,则没有输出
		//
		//细节5
		//break语句用来在执行完一个case分支后使程序跳出switch语句块;
		//如果没有写break,程序会顺序执行到switch结尾,除非执行到break
		char c = 'b';
		char c2 = 'c';
		switch(c) {
			case 'a' :
				System.out.println("ok1");
				break;
			case 'b'  :
				System.out.println("ok2");
				break;
			default :
				System.out.println("ok3");
		}

		System.out.println("退出了switch,继续执行..");
	}
}

6.4 案例


import java.util.Scanner;
public class SwitchExercise { 

	//编写一个main方法
	public static void main(String[] args) {

		//使用 switch 把小写类型的 
		//char型转为大写(键盘输入)。只转换 a->A, b->B, c, d, e. 
		//其它的输出 "other"。
		
		//创建Scanner对象
		// Scanner myScanner = new Scanner(System.in);
		// System.out.println("请输入a-e");
		// char c1 = myScanner.next().charAt(0);
		// switch(c1) {
		// 	case 'a' :
		// 		System.out.println("A");
		// 		break;
		// 	case 'b' :
		// 		System.out.println("B");
		// 		break;
		// 	case 'c' :
		// 		System.out.println("C");
		// 		break;
		// 	case 'd' :
		// 		System.out.println("D");
		// 		break;
		// 	case 'e' :
		// 		System.out.println("E");
		// 		break;
		// 	default :
		// 		System.out.println("你的输入有误~");

		// }

		//对学生成绩大于60分的,输出"合格"。低于60分的,
		//输出"不合格"。(注:输入的成绩不能大于100), 提示 成绩/60
		//思路分析
		//1. 这道题,可以使用 分支来完成, 但是要求使用switch
		//2. 这里我们需要进行一个转换, 编程思路 : 
		//   如果成绩在 [60,100] , (int)(成绩/60) = 1 
		//   如果成绩在 [0,60) , (int)(成绩/60) = 0 
		
		//代码实现
		
		double score = 1.1;

		//使用if-else 保证输入的成绩有有效的 0-100
		//看了当老师的分析和代码演示后,自己一定要独立完成(不看老韩代码,也能写)
		if( score >= 0 && score <= 100) {
			switch ((int)(score / 60)) {
				case 0 :
					System.out.println("不合格");
					break;
				case 1 :
					System.out.println("合格");
					break;
				// default :
				// 	System.out.println("输入有误");
			}
		} else {
			System.out.println("输入的成绩在0-100");
		}

		//根据用于指定月份,
		//打印该月份所属的季节。
		//3,4,5 春季 6,7,8 夏季  9,10,11 秋季 12, 1, 2 冬季 
		//[课堂练习, 提示 使用穿透 ] 
		//
		//思路分析
		//1. 创建Scanner对象, 接收用户输入
		//2. 使用 int month 接收
		//3. 使用switch 来匹配 ,使用穿透来完成,比较简洁
		
		Scanner myScanner = new Scanner(System.in);
		System.out.println("输入月份");
		int month = myScanner.nextInt();
		switch(month) {
			case 3:
			case 4:
			case 5: 
				System.out.println("这是春季");
				break;
			case 6:
			case 7:
			case 8: 
				System.out.println("这是夏季");
				break;
			case 9:
			case 10:
			case 11: 
				System.out.println("这是秋季");
				break;
			case 1:
			case 2:
			case 12: 
				System.out.println("这是冬季");
				break;
			default :
				System.out.println("你输入的月份不对(1-12)");
		}


	}
}

6.5 switch和if的比较

1)如果判断的具体数值不多,而且符合byte、short 、 int、char, enum[枚举], String这6种类型。虽然两个语句都可
以使用,建议使用swtich语句。
2)其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广

7 for循环

7.1 基本语法

在这里插入图片描述
1.for关键字,表示循环控制
2.for有四要素:(⑴)循环变量初始化(⑵)循环条件(3)循环操作(4)循环变量迭代3.循环操作,这里可以有多条语句,也就是我们要循环执行的代码
4.如果惇循环操作(语句)只有一条语句,可以省略书,建议不要省略


//演示for的使用细节

public class ForDetail { 

	//编写一个main方法
	public static void main(String[] args) {

		//for(;循环判断条件;) 
		//中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略
		
		// 使用for循环控制
		// int i = 1;//循环变量初始化
		// for( ; i <= 10 ; ) {
		// 	System.out.println("hello,world" + i);
		// 	i++;
		// }

		// System.out.println("i=" + i);//11 ok
		

		// int j = 1;
		// //补充
		// for(;;) { //表示一个无限循环,死循环
		// 	System.out.println("ok~" + (j++));
		// }

		//循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,
		//循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
		//老师使用内存分析法,看看下面代码输出什么?
		int count = 3;
		for (int i = 0,j = 0;  i < count; i++, j += 2) {
			System.out.println("i=" + i + " j=" + j);
		}

	}
}

7.3 练习



public class ForExercise { 

	//编写一个main方法
	public static void main(String[] args) {
		//打印1~100之间所有是9的倍数的整数,统计个数  及 总和.[化繁为简,先死后活]
		//老韩的两个编程思想(技巧)
		//1. 化繁为简 : 即将复杂的需求,拆解成简单的需求,逐步完成
		//2. 先死后活 : 先考虑固定的值,然后转成可以灵活变化的值
		//
		//思路分析
		//打印1~100之间所有是9的倍数的整数,统计个数  及 总和
		//化繁为简
		//(1) 完成 输出 1-100的值
		//(2) 在输出的过程中,进行过滤,只输出9的倍数  i % 9 ==0
		//(3) 统计个数 定义一个变量 int count = 0; 当 条件满足时 count++;
		//(4) 总和 , 定义一个变量 int sum = 0; 当条件满足时累积 sum += i;
		//先死后活
		//(1) 为了适应更好的需求,把范围的开始的值和结束的值,做出变量
		//(2) 还可以更进一步 9 倍数也做成变量 int t = 9;

		int count = 0; //统计9的倍数个数 变量
		int sum = 0; //总和
		int start = 10;
		int end = 200;
		int t = 5; // 倍数
		for(int i = start; i <= end; i++) {
			if( i % t == 0) {
				System.out.println("i=" + i);
				count++;
				sum += i;//累积
			}
		}

		System.out.println("count=" + count);
		System.out.println("sum=" + sum);

	}
}

2)完成下面的输出
在这里插入图片描述




public class ForExercise02 { 

	//编写一个main方法
	public static void main(String[] args) {

		//化繁为简
		//先死后活 
		int n = 9;
		for( int i = 0; i <= n; i++) {
			System.out.println(i + "+" + (n-i) + "=" + n);
		}
	}
}

8 while循环控制

8.1 基本语法

在这里插入图片描述

//while循环的案例
//
public class While01 { 

	//编写一个main方法
	public static void main(String[] args) {
		int i = 1; //循环变量初始化
		while( i <= 10 ) {//循环条件
			System.out.println("你好,世界" + i);//执行语句
			i++;//循环变量迭代
		}

		System.out.println("退出while ,继续.." + i); // 11
	}
}

8.2 注意事项和细节说明

1)循环条件是返回一个布尔值的表达式
2) while循环是先判断再执行语句

8.3 练习

1)打印1—100之间所有能被3整除的数
2)打印40——200之间所有的偶数


public class WhileExercise { 

	//编写一个main方法
	public static void main(String[] args) {

		// 打印1—100之间所有能被3整除的数
		// 化繁为简, 先死后活
		
		int i = 1;
		int endNum = 100;
		while( i <= endNum) {
			if( i % 3 == 0) {
				System.out.println("i=" + i);
			}

			i++;//变量自增
		}

		// 打印40—200之间所有的偶数 
		// 化繁为简, 先死后活(利于思考)
		//
		System.out.println("========");
		int j = 40; //变量初始化
		while ( j <= 200) {
			//判断
			if( j % 2 == 0) {
				System.out.println("j=" + j);
			}
			j++;//循环变量的迭代
		}

	}
}

9 do…while循环控制

9.1 基本语法

循环变量初始化;
do{
	循环体(语句);
	循环变量迭代;
}while(循环条件);

9.2 说明:

1. do while是关键字
1.也有循环四要素,只是位置不一样
2.先执行,再判断,也就是说,一定会至少执行一次3.最后有一个分号﹔
4.while和 do..while区别举例:要账

9.3 练习



public class DoWhileExercise01 { 

	//编写一个main方法
	public static void main(String[] args) {
		//统计1---200之间能被5整除但不能被3整除的 个数
		//化繁为简
		//(1) 使用do-while输出 1-200
		//(2) 过滤 能被5整除但不能被3整除的数 %
		//(3) 统计满足条件的个数 int count = 0; 
		//先死后活
		//(1) 范围的值 1-200 你可以做出变量
		//(2) 能被5整除但不能被3整除的 , 5 和 3 可以改成变量 
		int i = 1;
		int count = 0; //统计满足条件的个数
		do {
			if( i % 5 == 0 && i % 3 != 0 ) {
				System.out.println("i=" + i);
				count++;
			}
			i++;
		}while(i <= 200);

		System.out.println("count=" + count);
	}
}
import java.util.Scanner;
public class DoWhileExercise02 { 
	//编写一个main方法
	public static void main(String[] args) {
		//[System.out.println("问:还钱吗?y/n")]   do...while ..
		//
		//化繁为简
		//(1) 不停的问还钱吗?
		//(2) 使用char answer 接收回答, 定义一个Scanner对象
		//(3) 在do-while 的while 判断如果是 y 就不在循环
		//一定自己动脑筋..
		Scanner myScanner  = new Scanner(System.in);
		char answer = ' ';
		do {
			System.out.println("使出五连鞭~");
			System.out.println("问:还钱吗?y/n");
			answer = myScanner.next().charAt(0);
			System.out.println("他的回答是" + answer);
		}while(answer != 'y');//判断条件很关键

		System.out.println("李三还钱了");
	}
}

10 多循环控制(重点!!!)

10.1 介绍

1) 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do...while均可以作为外层循环和内层循环。
【建议一般使用两层,最多不要超过3层,否则,代码的可读性很差】
2) 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内
层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
3)设外层循环次数为m次,内层为n 次,则内层循环体实际上需要执行m*n次。

在这里插入图片描述

10.2 多重循环执行步骤分析:


public class MulFor { 

	//编写一个main方法
	public static void main(String[] args) {

		for(int i = 0; i < 2; i++) { //先思考
		    for( int j = 0; j < 3; j++) { 
		        System.out.println("i=" + i + "j=" + j);
		    }
		}

	}
}

10.3 练习

  1. 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
    2)统计三个班及格人数,每个班有5名同学。

import java.util.Scanner;
public class MulForExercise01 { 

	//编写一个main方法
	public static void main(String[] args) {
		//统计3个班成绩情况,每个班有5名同学,
		//求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
		//统计三个班及格人数,每个班有5名同学。
		//
		//思路分析:
		//化繁为简
		//(1) 先计算一个班 , 5个学生的成绩和平均分 , 使用for
		//1.1 创建 Scanner 对象然后,接收用户输入
		//1.2 得到该班级的平均分 , 定义一个 doubel sum 把该班级5个学生的成绩累积 
		
		//(2) 统计3个班(每个班5个学生) 平均分
		//(3) 所有班级的平均分
		//3.1 定义一个变量,double totalScore 累积所有学生的成绩
		//3.2 当多重循环结束后,totalScore / (3 * 5) 
		//(4) 统计三个班及格人数
		//4.1 定义变量 int passNum = 0; 当有一个学生成绩>=60, passNum++
		//4.2 如果 >= 60 passNum++
		//(5) 可以优化[效率,可读性, 结构]
		
		//创建 Scanner 对象
		Scanner myScanner = new Scanner(System.in);
		double totalScore = 0; //累积所有学生的成绩
		int passNum = 0;//累积 及格人数
		int classNum = 3; //班级个数
		int stuNum = 5;//学生个数
		for( int i = 1; i <= classNum; i++) {//i 表示班级

			double sum = 0; //一个班级的总分
			for( int j = 1; j <= stuNum; j++) {//j 表示学生
				System.out.println("请数第"+i+"个班的第"+j+"个学生的成绩");
				double score = myScanner.nextDouble();
				//当有一个学生成绩>=60, passNum++
				if(score >= 60) {
					passNum++;
				}
				sum += score; //累积
				System.out.println("成绩为" + score);
			}
			//因为sum 是 5个学生的总成绩
			System.out.println("sum=" + sum + " 平均分=" + (sum / stuNum));
			//把 sum 累积到 totalScore
			totalScore += sum;

		}
		System.out.println("三个班总分="+ totalScore 
			+ " 平均分=" + totalScore / (classNum*stuNum));
		System.out.println("及格人数=" + passNum);

	}
}

10.4 打印金字塔



public class Stars { 

	//编写一个main方法
	public static void main(String[] args) {

		/*
		
			    *
			  *  *
			 *    *
			********

		思路分析
		化繁为简
		1. 先打印一个矩形
		*****
		*****
		*****
		*****
		*****
		2. 打印半个金字塔

		*    	//第1层 有 1个*
		**   	//第2层 有 2个*
		***		//第3层 有 3个*
		****    //第4层 有 4个*
		*****   //第5层 有 5个*
		
		3. 打印整个金字塔
		*       //第1层 有 1个*   2 * 1 -1   有4=(总层数-1)个空格
	   ***      //第2层 有 3个*   2 * 2 -1   有3=(总层数-2)个空格
	  *****     //第3层 有 5个*   2 * 3 -1   有2=(总层数-3)个空格
	 *******    //第4层 有 7个*   2 * 4 -1   有1=(总层数-4)个空格
	*********   //第5层 有 9个*   2 * 5 -1   有0=(总层数-5)个空格

		4. 打印空心的金字塔 [最难的]
	    *       //第1层 有 1个*   当前行的第一个位置是*,最后一个位置也是*
	   * *      //第2层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
	  *   *     //第3层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
	 *     *    //第4层 有 2个*   当前行的第一个位置是*,最后一个位置也是*
	*********   //第5层 有 9个*   全部输出*
	
		先死后活
		5 层数做成变量 int totalLevel = 5;
	
	//小伙伴 技术到位,就可以很快的把代码写出
		 */
		int totalLevel = 20; //层数
		for(int i = 1; i <= totalLevel; i++) { //i 表示层数

			//在输出*之前,还有输出 对应空格 = 总层数-当前层
			for(int k = 1; k <= totalLevel - i; k++ ) {
				System.out.print(" ");
			}

			//控制打印每层的*个数
			for(int j = 1;j <= 2 * i - 1;j++) {
				//当前行的第一个位置是*,最后一个位置也是*, 最后一层全部 *
				if(j == 1 || j == 2 * i - 1 || i == totalLevel) {
					System.out.print("*");
				} else { //其他情况输出空格
					System.out.print(" ");
				}
			}
			//每打印完一层的*后,就换行 println本身会换行
			System.out.println("");
		}
	}
}

11 跳转控制语句-break

11.1 看下面一个需求

随机生成1-100的一个数,直到生成了97这个数,看看你一共用了几次?提示使用(int)(Math.random() *100)+1
思路分析:
循环,但是循环的次数不知道.-> break ,当某个条件满足时,终止循环通过该需求可以说明其它流程控制的必要性,比如 break

11.2 基本介绍:

break语句用于终止某个语句块的执行,一般使用在 switch或者循环[for , while , do-while]中

11.3 练习


public class BreakExercise { 

	//编写一个main方法
	public static void main(String[] args) {
		//1-100以内的数求和,求出 当和 第一次大于20的当前数 【for + break】

		//思路分析
		//1. 循环 1-100, 求和 sum  
		//2. 当 sum > 20 时,记录下当前数,然后break
		//3. 在for循环外部,定义变量 n , 把当前i 赋给 n
		int sum = 0; //累积和

		//注意i 的作用范围在 for{}
		int n = 0;
		for(int i = 1; i <= 100; i++) {
			sum += i;//累积
			if(sum > 20) {
				System.out.println("和>20时候 当前数i=" + i);
				n = i;
				break;
			} 
		}

		System.out.println("当前数=" + n);
	}
}

2)实现登录验证,有3次机会,如果用户名为"张三" ,密码"666"提示登录成功,否则提示还有几次机会,请使用for+break完成

import java.util.Scanner;
public class BreakExercise02 { 

	//编写一个main方法
	public static void main(String[] args) {

		//实现登录验证,有3次机会,如果用户名为"张三" ,密码"666"提示登录成功,
		//否则提示还有几次机会,请使用for+break完成
		//
		// 思路分析
		// 1. 创建Scanner对象接收用户输入  
		// 2. 定义 String name ; String passwd; 保存用户名和密码
		// 3. 最多循环3次[登录3次],如果 满足条件就提前退出
		// 4. 定义一般变量 int chance 记录还有几次登录机会
		// 
		// 代码实现
		
		Scanner myScanner  = new Scanner(System.in);
		String name = "";
		String passwd = "";
		int chance = 3; //登录一次 ,就减少一次
		for( int i = 1; i <= 3; i++) {//3次登录机会
			System.out.println("请输入名字");
			name = myScanner.next();
			System.out.println("请输入密码");
			passwd = myScanner.next();
			//比较输入的名字和密码是否正确
			//补充说明字符串 的内容 比较 使用的 方法 equals
			if("丁真".equals(name) && "666".equals(passwd)) {
				System.out.println("恭喜你,登录成功~");
				break;
			}

			//登录的机会就减少一次
			chance--;
			System.out.println("你还有" + chance + "次登录机会");

		}


	}
}

12 跳转控制语句 -continue

12.1 基本介绍:

1) continue语句用于结束本次循环,继续执行下一次循环。
2) continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环﹐这个和前面的标签的
使用的规则一样.

12.2 使用案例


public class Continue01 { 

	//编写一个main方法
	public static void main(String[] args) {
		//代码
		int i = 1;
		while( i <= 4) {
			i++;
			if( i == 2) {
				continue;
			}
			System.out.println("i=" + i);
		}
	}
}

12.3 细节案例


public class ContinueDetail { 

	//编写一个main方法
	public static void main(String[] args) {

		label1:
		for(int j = 0; j < 2; j++){
			label2:
			for(int i = 0; i < 10; i++){
				if(i == 2){
					//看看分别输出什么值,并分析
					//continue ; //等价于 continue label2
					//continue label2;//等价 continue;
					continue label1; //输出 2次[0,1]
				}
				System.out.println("i = " + i);//输出2次[0,1,3,4,5,6,7,8,9]
	        }
	     }

	}
}

13 跳转控制语句-return


public class Return01 { 

	//编写一个main方法
	public static void main(String[] args) {

		for(int i=1;i<=5;i++){

			if(i==3) {
		        System.out.println("张三 "+i);
				return; //当return用在方法时,表示跳出方法,如果使用在main,表示退出程序
				
			}
			System.out.println("Hello World!");
		}
		System.out.println("go on..");

	}
}

如果对您有帮助,点个关注吧,持续更新中,谢谢支持。如果有问题或错误,欢迎指出与我联系,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java程序设计基础是指学习和掌握Java编程语言的基本概念、语法和技巧。下面是一些Java程序设计基础的内容: 1. Java语言特点:Java是一种面向对象的编程语言,具有简单、可移植、安全、高性能等特点。 2. 基本语法:Java的基本语法包括变量、数据类型、运算符、控制流程(条件语句、循环语句)、数组等。 3. 面向对象编程:Java是一种面向对象的编程语言,具有封装、继承、多态等特性。学习面向对象编程的概念和原则是Java程序设计的基础。 4. 类和对象:Java的类是对象的模板,对象是类的实例。学习如何定义类、创建对象、访问对象的属性和方法等是Java程序设计的基础。 5. 方法和函数:Java的方法用于封装可重用的代码块,函数是方法的一种殊形式。学习如何定义和调用方法、传参数等是Java程序设计的基础。 6. 异常处理:Java提供了异常处理机制,用于处理程序运行过程可能出现的异常情况。学习如何捕获和处理异常是Java程序设计的基础。 7. 输入输出:Java提供了丰富的输入输出类和方法,用于处理文件、网络等输入输出操作。学习如何读写文件、网络编程等是Java程序设计的基础。 8. 集合框架:Java提供了一套集合框架,用于存储和操作数据集合。学习如何使用集合框架进行数据操作是Java程序设计的基础。 9. 多线程编程:Java支持多线程编程,可以同时执行多个任务。学习如何创建和管理线程、线程同步等是Java程序设计的基础。 10. GUI编程:Java提供了Swing和JavaFX等图形用户界面库,用于开发图形界面应用程序。学习如何使用GUI库进行界面设计和事件处理是Java程序设计的基础。 以上是Java程序设计基础的一些内容,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-努力搬砖的小刘-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值