【作者前言】:13年入圈,分享些本人工作中遇到的点点滴滴那些事儿,17年刚开始写博客,高手勿喷!以分享交流为主,欢迎各路豪杰点评改进!
[1]
🔥知识点内容【流程控制语句:条件分支语句、循环语句】
🔓1. 条件分支语句【if、switch/case】
1.1、if语句 [2]
①if(表达式){ 当表达式结果为真,所执行的代码 }
表达式中返回的是布尔值
②if(表达式){ 表达式为真执行代码 } else { 表达式为假执行的代码 }
int age = 10;
if (age > 18) {
System.out.println("你已经成年了!");
}else {
System.out.println("小朋友,你妈妈叫你回家吃饭啦!");
}
③if(条件1){ 条件1为真执行的代码 } else if(条件2){ 条件2为真执行的代码 }
Scanner sc = new Scanner(System.in);
// 输入菜名选择序号 select
int select = sc.nextInt();
if (select == 1) {
System.out.println("蒸羊羔");
}else if (select == 2) {
System.out.println("皮蛋豆腐");
}else if (select == 3) {
System.out.println("大馒头");
}else if (select == 4) {
System.out.println("燕窝");
}else {
System.out.println("选择错误,本店没有此菜!");
}
④可以使用多个if语句判断 但是每个条件 不论是否满足 她都要去判断一边,if-else if形式,那么如果有一个条件满足 其他的条件就不去看
1.2、switch语句 [3]
有时候分支是根据常量值
进行判断的,这时候虽然可以使用if/else
来实现,但是用switch/case
更为清晰;
Scanner sc = new Scanner(System.in);
// 输入菜名选择序号 select
int select = sc.nextInt();
switch(select) {
case 1:System.out.println("蒸羊羔");break;
case 2:System.out.println("皮蛋豆腐");break;
case 3:System.out.println("大馒头");break;
case 4:System.out.println("燕窝");break;
default:System.out.println("选择错误,本店没有此菜!");break;
}
Break:在switch作用,跳出swtich语句
switch/case
中的表达式
只能使用规定的基本数据类型
,
JDK1.5前可以使用:
基本数据类型byte
基本数据类型short
基本数据类型int
字符型char
不能使用:基本数据类型float、double、long、boolean
JDK5之后,switch表达式类型新增加支持:枚举(enum)
JDK7之后,switch表达式类型新增加支持:String
🔓2. 循环语句【for、while、do while】
2.1、for循环 [4]
1)语法
for(初始化语句;判断条件语句;控制语句){
循环体语句块;
}
具体代码如下所示:
int a;
for(int a=0; a<5; a++){
System.out.println("a="+a);
}
执行步骤:
1、初始化a为0;
2、判断a<5的返回值为true,所以执行一次循环体;打印a=0;
3、运行控制语句a++,a变为1;
4、判断a<5的返回值为true,再执行一次循环体;打印a=1;
5、运行控制语句a++,a变为2;
循环4-5步骤,直到打印a=4后,a变为5
6、判断a<5返回false,则循环结束,跳出循环体。
即最终循环执行输出的结果:
a=0
a=1
a=2
a=3
a=4
2)经典案例:for循环的应用
求1~100之间所有整数和
int sum = 0;
for(int i = 1; i < 100; i ++) {
sum += i;
}
System.out.println("1~100的和是:" + sum);
求1-100之间所有奇数的和
int sum = 0;
for(int i = 1; i < 100; i+=2;) {
sum += i;
}
System.out.println("1~100奇数的和是:" + sum);
求阶乘
int n = 6; // 假设求6的阶乘吧
int result = 1; //阶乘的结果值
for(int i = n; i >= 1; i --) {
result *= i;
}
System.out.println(n + "的阶乘是:",result);
-
如一个数是四位数abcd,该四位数满足条件:(ab+cd)*(ab+cd)=abcd;
分析:
将四位数的百位和千位ab,求出;再将十位和各位cd,求出
abcd / 100 ---> ab
abcd % 100 --->cd 求水仙花数【3位数abc,a^3+b^3+c^3=abc】
for(int i = 100; i <= 999; i ++) {
int b = i / 100; // 百位上的数字
int s = i / 10 % 10;// 十位上的数字
int g = i % 10;// 个位上的数字
// 验证水仙花数公式
if((b * b * b + s * s * s + g * g * g) == i) {
System.out.println("水仙花数为:" + i);
}
}
3)循环嵌套
打印 99 乘法表
for(int j = 1; j < = 9; j ++) {
for(int i = 1; i <= j; i ++) {
System.out.println(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println(); // 相当于换行了...
}
打印等腰三角形
int n = 4;
for(int i = 1; i <= 4; i ++) {
for(int m = 1; m <= n-i; m++) { // 每一行显示的空格 = 总行数 - 当前行数
System.out.print(" ");
}
for(int j = 1; j <= 2 * i - 1; j++) {// 显示*的数 就是 行数*2 -1
System.out.print("*");
}
System.out.println();// 相当于换行
}
小知识点:
System.out.println(“”) 打印内容 并且 换行
System.out.print(“”)打印内容 不换行
“\t”:制表符 键盘Tab
2.2、while循环 [5]
1)语法
while(判断条件语句){
循环体语句块;
控制语句;
}
将for循环三个表达式拆分,初始化放在while 前面初始化 判断语句放入到while的()里面,控制语句放入到while的{}
具体代码如下所示:
int b=0;
while( b<5 ){
System.out.println("b="+b);
b++;
}
2)while循环的应用
求1~100的和
int i = 1;
int sum = 0;
while(i < 100) {
sum += i;
i ++;
}
System.out.println("1~100的和是:" + sum);
小知识点:System.exit(0);退出系统
无限循环(死循环)
while(true) {
System.out.println("----------欢迎来到尛鹏大酒店----------");
System.out.println("1、凉菜");
System.out.println("2、热菜");
System.out.println("3、主食");
System.out.println("4、汤");
System.out.println("0、退出");
System.out.println("----------------------------------");
System.out.println("请选择:")
// 创建Scanner对象
Sanner sc = new Scanner(System.in);
// 接收一下选择的数字
int select = sc.nextInt();
switch(select) {
case 1:System.out.println("蒸羊羔");break;
case 2:System.out.println("皮蛋豆腐");break;
case 3:System.out.println("大馒头");break;
case 4:System.out.println("燕窝");break;
default:System.out.println("选择错误,本店没有此菜!");break;
}
}
Q:for(;;){} 这样的语句会编译通过吗?如果通过,是个什么样的循环?
A:可以编译通过,死循环 相当于
While(true){
}
3)for、while 的使用场景区分
for的使用:当我们
知道循环次数
的时候;
while的使用:当不清楚循环次数
的时候;
2.3、do while循环 [6]
1)语法
do{
循环体语句块;
控制语句;
} while(判断条件语句) ;
具体代码如下所示:
int c=0;
do{
System.out.println("c="+c);
c++;
}while(c<5);
image.png
2)while 与 do while的区别
如果
条件都为真
,两者结果没有区别
如果条件为假
,do-while至少会执行一次循环体
,while不会执行循环体
Do-while:先执行循环体,再去进行判断
While : 先判断,再去执行循环体
//------------↓↓↓ while ↓↓↓------------
int m = 12;
while(m <= 10) {
System.out.println("while------"+m);
m ++;
}
// 输出结果:嘛也没有
//------------↓↓↓ do while ↓↓↓------------
int i = 12;
do {
System.out.println("do------"+i);
i ++;
}while(i <= 10);
// 输出结果:
// do------12
🔓3. 循环关键字【continue、break】[7]
continue
在循环控制语句的循环体中,可以使用continue语句,表示
不再继续循环体后面的代码,继续下一次循环
;
即:在循环中遇到了continue,循环就不会继续执行当前关键字下面的其他循环内容,继续执行下一次循环(停止当前次循环,继续下一次循环)
break
在循环控制语句的循环体中,可以使用break语句,表示
终止当前循环,跳出循环体
;
即:循环终止
🔓4. 多重循环跳出【加标号】[8]
可以在for、while、do前用合法标识符
加标号
;
用break标号;语句终止指定的循环;
Break+标号
形式 终止指定层次的循环
Continue+标号
形式 跳出指定层次的循环 继续下一次循环
loop: for(int i = 1; i <= 5; i ++) {
for(int j = 1; j <= 5; j ++) {
if(j == 2) {
continue loop;
// break loop;
}
System.out.println("i = " + i + "\t j=" + j);
}
System.out.println("-------第" + i + "次外层循环结束-------")
}
🔓4. 综合案例 - 实战·了解 [9]
百钱买百鸡
/* 3文钱 --- 1只公鸡 x
* 2文钱 --- 1只母鸡 y
* 1文钱 --- 3只小鸡 z
* Q:100文钱 怎么 买到 100只鸡?
* A:
* 只要公鸡的话 100/3 = 33 max=33
* 只要母鸡的话 100/2 = 50 max=50
* 即:公鸡的取值范围 --- 0~33
* 母鸡的取值范围 --- 0~50
*/
for(int x = 0; x < 33; x ++) {
for(int y=0; y < 50; y++) {
//计算小鸡的数量
int z = 100 - x - y;
//小鸡数量的合法性验证
if(z % 3 !=0) continue; //小鸡的数量一定是 3的倍数 不是的话直接进入下一轮循环
// 再验证 钱数是否正确
if(x * 3 + y * 2 + z / 3 == 100) {
//钱数也合法 --- 即算出来了。。。
System.out.println("公鸡:" + x + ",母鸡:" + y + ",小鸡:" + z);
}
}
}
任意数字 各个位数上的 数字之和
abcde ---> a + b + c + d + e = ?
// 设定一个任意的数字
int n = 123456;
int num = n;
// 用来存储最后的和
int sum = 0;
while(n != 0) {
// 取出最后一位数 加入到和中 如123456 % 10 = 6
sum += (n % 10);
// 加完后 将最后一位数 去掉 如 123456 / 10 = 12345
n /= 10;
//... 以此类推
}
System.out.println("输入的数值:" + num + ",各个位数上的数字之和是:" + sum);
求数组中的最大值、最小值
int[] arr = {50,66,25,33,45,18,55};
// 定义一个最大值和最小值
int max = arr[0];
int min = arr[0];
for(int i = 1; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min = arr[i];
}
}
System.out.println("max=" + max + ",min=" + min);
杨辉三角
int n = 10;
int[][] arr = new int[n][n];
for(int i = 0; i < arr.length; i ++) {
arr[i][0] = 1;
arr[i][i] = 1;
if(i == 0) continue;
for(int j = 1; j < arr[i].length; i ++) {
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
}
}
for(int i = 0; i < arr.length; i ++) {
for(int j = 0; j <= i; j++) {
System.out.println(arr[i][j] + "\t");
}
System.out.println();
}
网友评论