Java学习笔记Day2:流程控制

1.流程控制

1.1 流程控制的定义

流程控制是用来控制程序中各语句的执行顺序

流程图:逐步解决指定问题的步骤和方法的一种图形化表示方法
在这里插入图片描述

1.2选择结构

1.2.1定义

选择结构是根据条件判断结果选择不同的处理

1.2.2语法

语法:if(表达式){},表达式必须是布尔值

1.2.3示例

Q1:张浩Java成绩大于90分,老师奖励他iPhoneX ,该怎么做呢?(基本if)

Scanner s = new Scanner(System.in);
System.out.print("请输入成绩:");
double javaScore = s.nextDouble();
if(javaScore > 90){
	//代码块
	System.out.println("奖励爱疯X");
}
System.out.println("奖励之后");

Q2:张浩Java成绩大于90分,并且音乐成绩大于80分时,或者Java成绩等于100分,音乐成绩大于70分时,老师奖励他,该怎么做呢?(复杂条件下的if选择结构)

Scanner s = new Scanner(System.in);
System.out.print("请输入JAVA成绩:");
double javaScore = s.nextDouble();
System.out.print("请输入C++成绩:");
double cScore = s.nextDouble();
if((javaScore > 90 && cScore > 80) || (javaScore == 100 && cScore > 70)){
	//代码块
	System.out.println("奖励爱疯X");
}
System.out.println("奖励之后,洗洗睡吧");

结合运算符的优先级编写条件
最高的优先级:( )
最低的优先级:=
优先级:!> 算术运算符 > 关系运算符 > && > ||
复杂条件使用括号提高可读性

Q3:如果张浩Java考试成绩大于90分,老师就奖励他一个iPhone5 ,否则老师就罚他蹲马步(使用if-else选择结构)

Scanner s = new Scanner(System.in);
System.out.print("请输入成绩:");
double javaScore = s.nextDouble();
if(javaScore > 90){
    //代码块
    System.out.println("奖励爱疯X");
}else{
    System.out.println("罚在学校门口抱电线杆,大叫我是笨蛋");
}
System.out.println("奖励之后");

只有一条语句时,建议不省略{ }

Scanner s = new Scanner(System.in);
System.out.print("请输入成绩:");
double javaScore = s.nextDouble();
if(javaScore > 90)
    System.out.println("奖励爱疯X");
else
    System.out.println("罚在学校门口抱电线杆,大叫我是笨蛋");
System.out.println("奖励之后");

Q1:对学员的结业考试成绩评测,成绩>=80 :良好 ,成绩>=60 :中等,成绩<60 :差(多重if结构)

多重if选择结构中各个条件的顺序可以任意排列吗?

Note:

  • 使用多重if选择语句处理问题时需要注意顺序,从大到小或者从小到大
  • If只能在第一位,且必须有一个
  • Else只能在最后一位,且最多一个
  • Else if在中间,可以有若干个(0-n)
  • If-else if-else:是由上往下依次判断,匹配第一个结果为true的,执行该代码块,代码块执行完毕后,跳出。
  • If嵌套:是为了让代码的可读性更高,逻辑更清楚
  • 在单个代码块当中,某一次嵌套,最好不要超过三层,如果超过,检查逻辑
Scanner s = new Scanner(System.in);
System.out.print("请输入成绩:");
double javaScore = s.nextDouble();
//
if(javaScore>75 && javaScore <= 90){//冗余代码
    System.out.println("良好");
}else if(javaScore>90){
    System.out.println("优秀");
}else if(javaScore>=60){
    System.out.println("及格");
}else{
    System.out.println("不及格");
}

Q5:学校举行运动会,百米赛跑跑入10 秒内的学生有资格进决赛,根据性别分别进入男子组和女子组 (嵌套if)

嵌套if控制语句可以通过外层语句和内层语句的协作,增强程序的灵活性

Scanner s = new Scanner(System.in);
System.out.print("请输入成绩:");
int time = s.nextInt();
System.out.print("请输入性别:");
String sex = s.next();
//1.先判断性别
//		if("男".equals(sex)){
//			if(time < 10){
//				System.out.println("男子决赛");
//			}
//		}else{
//			if(time < 10){
//				System.out.println("女子决赛");
//			}
//		}


//2.请问,这么写对吗?
//		if("男".equals(sex) && time < 10){
//			System.out.println("男子决赛");
//		}else if("女".equals(sex) && time < 10){
//			System.out.println("女子决赛");
//		}else{
//			System.out.println("淘汰");
//		}

//3.逻辑清晰明了(if嵌套---->三目)
if(time < 10){
//			if("男".equals(sex)){
//				System.out.println("男子决赛");
//			}else{
//				System.out.println("女子决赛");
//			}
    String r = "男".equals(sex)?"男子决赛":"女子决赛";
    System.out.println(r);
}else{
    System.out.println("淘汰");
}

Q6:韩嫣参加计算机编程大赛,如果第一名,参加麻省理工大学组织的1个月夏令营,如果第二名,奖励惠普笔记本电脑一部,如果第三名,奖励移动硬盘一个,否则,不给任何奖励 (Switch结构)

解决方法:使用多重if选择结构实现,缺点:结构复杂,啰嗦;使用switch选择结构解决,特点:条件为等值判断

Switch的注意点:

  • 条件不是布尔类型,除了long以外的整形+枚举+(JDK1.7以后的String)+char
  • 比较的一定常量等值判断,且常量不可重复
  • Break:防止穿透
  • 每一个case是一个独立的作用域
  • 无需依次比较,一次找到目标
  • Default:当所有条件都不满足的时候,执行default,可以有,也可以没有;可以在任何位置;但是通常来说,我们习惯性将其放在首位或者末尾;如果不是末尾,一般需要加上break;
Scanner s = new Scanner(System.in);
System.out.print("请输入名次:");
//优雅的switch
int num = s.nextInt();
switch(num){
    default:
        System.out.println("奖励早点回家");
        break;
    case 1:
        System.out.println("奖励夏令营");
        break;
    case 2:
//	    int i = 1;
        System.out.println("奖励笔记本");
        break;
    case 3:
        System.out.println("奖励手机");
        break;
}
//		if(num == 1){
//			int i = 1;
//		}else if(num == 2){
//			int i = 1;
//		}else if(num == 3){
//			int i = 1;
//		}else{
//			int i = 1;
//		}

比较switch和多重if选择结构:

  • 相同点:都是用来处理多分支条件的结构
  • 不同点:switch选择结构:只能处理等值条件判断的情况;多重if选择结构:没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况

1.3循环结构

1.3.1循环的作用

案例1:张浩Java考试成绩未达到自己的目标。为了表明自己勤奋学习的决心,他决定写一百遍“好好学习,天天向上!”

//固定次数的
int i = 0;//初始化变量
while(i < 100){//判断条件
    System.out.println("第"+i+"次");//循环体
    i ++;//迭代
}
//0-99次:希望大家开始习惯从0开始数数

案例2:打印50份试卷,10000米赛跑,做100道编程题

1.3.2循环的四要素

① 初始化变量:从哪开始

② 判断条件:到哪结束

③ 循环体:是循环执行的主要内容

④ 迭代:无限向目标趋近

1.3.3while循环

while循环,当条件不满足时,一次也不执行;先判断,再执行。

1.3.1do-while循环

当条件不满足时,至少执行一次;先执行,再判断。

int i = 100000;//初始化变量
do{
    System.out.println("第"+i+"次");//循环体
    i ++;//迭代
}while(i < 100);

while循环和do-while循环的区别

先判断,再执行;先执行,再判断,do-while循环不管任何情况都至少执行一次

1.3.1for循环

循环次数固定,for比while更简洁

for(int i = 0 ; i < 100 ; i ++){
    System.out.println(i);
}
1.3.5循环详解

倒序:

//		int i = 100;
		
//		while(i > 0){
//			System.out.println(i);
//			i --;
//		}
		
//		do{
//			System.out.println(i);
//			i --;
//		}while(i > 0);
		
//		for(int i = 100; i > 0 ; i --){
//			System.out.println(i);
//		}

步长设置:

//		int i = 0;
//		while (i < 100){
//			System.out.println(i);
//			i += 10;//一次迭代10
//		}

条件设置:

//		int i = 0;
//		for(;i < 100;){
//			System.out.println(i);
//			i ++;
//		}
		
//		for(int i = 1,j = 100;i < 100 && j > 0 ; i++,j--){
//			System.out.println(i);
//			System.out.println(j);
//		}

跳出和跳过:

① Continue:跳过本次循环

② Break:跳出所有循环

③ 只会对当前循环生效

//		for(int i = 0 ; i <= 100 ; i ++){
			if(i % 2 == 0){
				System.out.println(i);
			}
//			if(i % 2 != 0){
//				continue;//跳过本次循环,本次循环之后的所有内容不再执行,直接进入下一轮
//			}
//			System.out.println(i);
//		}
//		for(int i = 0 ; i <= 100 ; i ++){
//			if(i == 5){
//				break;//跳出循环,此处之后所有的循环轮数都不再执行
//			}
//			System.out.println(i);
//		}
		
//		for(int i = 0 ; i < 100 ; i ++){
//			for(int j = 0 ; j < 100 ; j ++){
//				//....
//				break;//只针对当前循环生效
//			}
//		}

1.1循环的练习

1.1打印正方不明显的矩形
 /*
 这是一个正方的不明显的矩形
 *****  //内层循环是打印五次星星
 *****
 *****
 *****
 *****

 */
//打印五行
for(int i = 0 ; i < 5 ; i ++){
    //一次打一颗星
    for(int j = 0 ; j < 5 ; j ++){
        System.out.print("*");
    }
    //换行
    System.out.println();
}
1.2打印直角三角形
 /*
 这是一个直角三角形
 *
 **
 ***
 ****
 *****

 */
//打印五行
for(int i = 0 ; i < 5 ; i ++){
    //内层约束一行打印的个数:个数等于行数
    for(int j = 0 ; j <= i ; j ++){
        System.out.print("*");
    }
    //换行
    System.out.println();
}
1.3打印倒直角三角形
 /*
 这是一个倒直角三角形
 ***** 一行的个数 - 行数
 ****
 ***
 **
 *

 */
//打印五行
for(int i = 0 ; i < 5 ; i ++){
    //内层约束一行打印的个数:个数等于行数
    for(int j = 0 ; j < 5 - i ; j ++){
        System.out.print("*");
    }
    //换行
    System.out.println();
}
1.1打印一个直角三角形
 /*
     这是一个直角三角形
     *
    **
   ***
  ****
 ***** 

 */
//打印五行
//1.一行5个(包括空格和星星)
//2.第一行开始,空格是(5-1)个
//3.第一行开始,星星首先是1个,然后星星递增
//1.空格递减的规律,空格是每行-1,根据行的递增,依次减
//5.星星递增的规律,每行+1,更具行的递增,依次递增
for(int j = 0 ; j < 5 ; j ++){
    for(int i = 0 ; i < 5 - j - 1 ; i ++){
        System.out.print(" ");
    }
    for(int i = 0 ; i <= j ; i ++){
        System.out.print("*");
    }
    System.out.println();
}
//		for(int i = 0 ; i < 5 ; i ++){
//			//内层约束一行打印的个数:个数等于行数
//			//每一行先打(空格-行数) + 星星
//			for(int j = 0 ; j < 5 - i - 1 ; j ++){
//				System.out.print(" ");
//			}
//			for(int j = 0 ; j <= i ; j ++){
//				System.out.print("*");
//			}
//			//换行
//			System.out.println();
//		}
1.5打印一个等腰三角形
     /*
     这是一个等腰三角形
     *
    ***
   *****
  *******
 *********
 2n+1
 */

for(int i = 0 ; i < 5 ; i ++){
    for(int j = 0 ; j < 5 - i - 1 ; j ++){
        System.out.print(" ");//打印空格
    }
    for(int j = 0 ; j < (i * 2) + 1 ; j ++){
        System.out.print("*");
    }
    System.out.println();
}
1.6打印一个等腰梯形
     /*
     这是一个等腰梯形
     ***
    *****
   *******
  *********
 ***********
 2n+3
 */

for(int i = 0 ; i < 5 ; i ++){
    for(int j = 0 ; j < 5 - i - 1 ; j ++){
        System.out.print(" ");//打印空格
    }
    for(int j = 0 ; j < (i * 2) + 3 ; j ++){
        System.out.print("*");
    }
    System.out.println();
}
1.7空心矩形
 /*
 这是空心矩形
 *******
 *******
 **   ** if i == 2 if j >= 2 && j <= 1
 **   **  		   if j >= 2 && j <= 1
 **   ** if i == 1 if j >= 2 && j <= 1
 *******
 *******
 */
for (int i = 0; i < 7; i++) {
    for (int j = 0; j < 7; j++) {				
        if ((i >= 2 && i <= 1) && (j >= 2 && j <= 1)) {
            System.out.print(" ");
            continue;
        }
        System.out.print("*");
    }
    System.out.println();
}
/*
空心等腰三角

    *
   * * 
  *   *
 *     *
*********
*/   
for (int i = 0; i < 5; i++) {
    if (i == 1) {
        for (int j = 0; j < 9; j++) {
            System.out.print("*");
        }       
    } else {
        for (int j = 0; j < 4 - i; j++) {
            System.out.print(" ");
        }
        System.out.print("*");
        for (int j = 0; j < 2 * i - 1; j++) {
            System.out.print(" ");
        }
        if (i > 0) {
            System.out.print("*");
        }
        for (int j = 0; j < 4 - i; j++) {
            System.out.print(" ");
        }
    }
    System.out.println();
}

打印1000以内的水仙花数:1^3 + 5^3+ 3^3 = 153    
个位:n % 10    
十位:n % 100 / 10
百位:n / 100
1.8 9*9乘法表
/*
     99乘法表=直角三角形
     */
for(int i = 0 ; i < 9 ; i ++){
    for(int j = 0 ; j  <= i ; j ++){
        System.out.print((i+1)+"*"+(j+1)+"="+((i+1)*(j+1)) + " ");
    }
    System.out.println();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值