韩顺平java学习笔记(四)-- 控制结构章节

一、顺序控制

程序从上到下得执行,中间没有判断和跳转
注意:java中定义变量时使用合法得向前引用

二、分支控制if-else

1.单分支

① 基本语法

if(条件表达式){
执行代码块;(可以有多条语句)
}
说明:当条件表达式为true时,就会执行{}的代码。如果为false,就不执行。特别说明,如果{}中只有一条语句,则可以不用{},但建议写上

2.双分支

① 基本语法

if (条件表达式) {
	执行代码块1;(可以有多条语句)
} else {
	执行代码块2;(可以有多条语句)		
}
说明:当条件表达式为true时,就会执行代码块1。如果为false,就会执行代码块2。特别说明,如果{}中只有一条语句,则可以不用{},但建议写上

3.分支控制if-else

① 基本语法

if(条件表达式1){
	执行代码块1;(可以多条语句)
}else if(条件表达式2){
	执行代码块2;(可以多条语句)
}
.....
else{
	执行代码块;(可以有多条语句)
}

② 特别说明

(1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有;
(2)如果有else,如果所有的条件表达式都不成立,则默认执行else代码块。
只要找到一个执行入口,这个多分支就跳出

4.嵌套分支

在一个分支结构中又嵌套了一个完整的分支结构,里面的分支的结构成为内层分支,外面的分支结构称为外层分支,建议不超过3层
① 基本语法

if(){
	if(){
		// if-else...		
	}else{
		 // if-else
		}
}

5.switch分支结构

① 基本语法

 switch(表达式){
	case 常量1://当...
			语句块1;
			break;
	case 常量2:
			语句块2;
			break;
	...	
	case 常量n:
	       语句块n;
	       break;
	 deault:
	 		default语句块;
	 		break;//表示跳出这个结构,而不是结束整个的程序
	}

② 解读

(1)switch关键字,表示switch分支;

(2)表达式对应的是一个值;

(3)case 常量1:当表达式的值等于常量1,就执行语句块1;

(4)break:表示退出switch

(5) 如果和case 常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case常量2

(6)如果一个都没有匹配上,就执行default

③ 注意事项及细节

(1)表达式数据类型,应和 case 后的常量类型一致,或者是可以自动转为可以相互比较的类型,比如输 入的是字符,而变量是 int 。

(2)switch(表达式)中表达式的返回值必须是:(byte、short、int、char、enum[枚举]、String。

(3)case子句中的值必须是常量或者是常量表达式,而不能是变量。

(4)default子句是可选的,可写可不 写,当没有匹配的case时,执行default。

(5)break语句是用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会不判断case后面的常量值直接顺序执行,到switch结尾,除非遇到break。

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

三、for循环控制

1.基本语法

for (循环变量初始化;循环条件;循环变量迭代){
	循环操作(可以多条语句);
}

在这里插入图片描述

2.细节

    (1)循环条件是返回一个布尔值的表达式;
    (2)for(;循环判断条件;)中的初始化和变量迭代可以写道其它地方,但是两边的分号不能省略;
    (3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
    for (int i = 0,j = 0;i < count;i++,j += 2){
    }

四、while 循环控制

1、基本语句

循环变量初始化;
while(循环条件){
	循环体(语句);
	循环变量迭代;
}
只是四要素与for放置的位置不一样

2、注意事项和细节

    ①  循环条件是返回一个布尔值的表达式;
    ②  while循环是先判断再执行语句。

在这里插入图片描述

3、练习题

1.打印 1—100 之间所有能被 3 整除的数 [使用 while]
int i =1;
while(i<=100){
        if (i%2 == 0){
            System.out.println(i);
        }
        i++;
化繁为简,先输出1-100,再设置被整除的条件,先循环语句再迭代语句!!!!

五、do…while循环控制

1.语法

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

说明:1.do while是关键字
2.位置不一样,所以先执行,再判断,也就是一定会执行一次
3.条件返回布尔值,最后有一个分号;
4.while和do …while区别举例:要账
在这里插入图片描述

2.练习

1.输出10个努力学习java
int i=1;
do {
	System.out.println("输出10个努力学习java"+i);
	i++
}while(i<=10);
2.如果李三不还钱,则老韩将一直使出五连鞭,直到李三说还钱为止
//化繁为简
//(1) 不停的问还钱吗?
//(2) 使用 char answer 接收回答, 定义一个 Scanner 对象
//(3) 在 do-while 的 while 判断如果是 y 就不在循环
char answer= '  ';
do {
	System.out.println("还钱吗?y/n");
	answer = myScanner.next().charAT(0);
}while(answer == 'n');

六、多重循环控制

1.细节

1、将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do...while均可以作为外层循环和内层循环。(建议最多两层)
2、实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。

2.练习

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

  2. 统计三个班及格人数,每个班有 5 名同学

    Scanner myScanner = new Scanner(System.in);
    double mean =0;
    int pass = 0;
    for(int i = 1;i <= 3;i++){
         double sum = 0;
         System.out.println("请输入"+i+"班学生成绩:");
         for (int j = 1;j <= 5;j++){
             System.out.println("请输入学生成绩:");
             double score = myScanner.nextDouble();
             if (score >= 60){
                 pass++;
             }
             sum += score;
         }
         System.out.println("班级平均成绩为:"+ (sum/5));
         mean += sum;
     }
     System.out.println("所有班级的平均分:" +(mean/3));
     System.out.println("及格人数为" +pass);
     }
    

七、空心金字塔

在这里插入图片描述

public class Main {
    public static void main(String[] args) {
    for (int i =1;i<=6;i++){
        for (int k=1;k<=6-i;k++){
            System.out.print(" ");
        }
        for (int j=1;j<=2*i-1;j++){
            if (j==1||j==2*i-1){
                System.out.print("*");
            }else {
                System.out.print(" ");
            }
        }
        System.out.println(" ");
    }
    for (int i =1;i<=5;i++){
        for (int k=1;k<=i;k++){
            System.out.print(" ");
        }
        for (int j=1;j<=11-2*i;j++){
            if (j==1||j==11-2*i){
                System.out.print("*");
            }else {
                System.out.print(" ");
            }
        }
        System.out.println(" ");
    }
 }
}

八、跳转控制语句-break

1.基本介绍

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

2.基本语法

{    ...
	break;
	...
}

基本使用
①  break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。
②  标签的基本使用

            label1:{     ......
            label2:        {     ......
            label3:                {     ......
                                            break;
                                            ......
                                       }
                                }
                      }

(1)break语句可以指定退出哪层,break label1,则label1;
(2)label1是标签,名字由程序员指定;
(3)break后指定到哪个label就退出 到 哪里;如果没有指定break,默认退出最近的循环体。break label1则为退出,继续执行label1的下一次循环
(4)实际开发中,尽量不使用标签;

3.练习题

1) 1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for + break】
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 Main {
public static void main(String[] args) {
    Scanner myScanner = new Scanner(System.in);
    for(int i = 1;i <= 3;i++){
        String name = "  ";
        String passward = "  ";
        System.out.println("请输入用户名:");
        name = myScanner.next();
        System.out.println("请输入密码:");
        passward = myScanner.next();
        if ("丁真".equals(name)&& "666".equals(passward) ){
            System.out.println("输入成功");
            break;
        }
        System.out.println("还有"+(3-i)+"次登录机会");
    }

   }
}
注意:判断字符串是否相等-----"丁真".equals(name)

九、跳转控制语句-continue

1.基本介绍

    ①  continue语句用于结束本次循环的循环语句,循环迭代不属于循环语句,所以结束本次循环语句,然后执行本次循环迭代,继续执行下一次循环判断,然后语句,然后迭代以此类推;
    ②  continue语句出现在多层嵌套的循环与语句体中时,可以通过标签指明要跳过的是哪一层循环,和break的使用规则一样。指明那一层,就是跳到那一层执行 迭代。

2、基本语法

{ …
continue;

}

3.练习

①对应基本介绍①,蓝色框住的为循环语句在这里插入图片描述

② 对应细节的②,如图,直接跳出到lable1,进行j++迭代!!
在这里插入图片描述

十、跳转控制语句-return

1.语法

练习题

在这里插入图片描述
break:H H 韩3 go
continue:H H 韩3 H H
return:H H 韩3

本章作业

1.某人有100,000元,每经过一次路口,需要交费,规则如下:
1)当现金>50000时,每次交5%
2)当现金<=50000时,每次交1000
编程计算该人可以经过多少次路口,要求:使用while break方式完成

    int passNUM = 0;
    double money=100000;
    while (money > 0) {
        if (money > 50000) {
            System.out.println("您需要交" + (money * 0.05) + "元");
            money = money - (money * 0.05);
            passNUM++;
        } else if (money >= 1000 && money <= 50000) {
            System.out.println("您需要交1000元");
            money = money - 1000;
            passNUM++;
        } else if (money < 1000) {
            break;
        }
    }
    System.out.println(passNUM);

2.判断一个整数是否为水仙花数,所谓水仙花数是指一个3位数,其各个为上数字立方和等于其本身,例如:153=111+333+555

int =153;
int n1 = n / 100;
int n2 = n%100/10;
int n3=n%10;
if (n1*n1*n1+n2*n2*n2+n3*n3*n3 == n){
	System.out.println(n+"是水仙花数");
}else {
	System.out.println(n+"不是水仙花数");
}

3.输出1-100能被5整除的数,5个一换行。

int k=0;
for (int i =1;i <= 100;i++){
 if (i % 5 !=0){
    k++;
    System.out.print(i+" ");
    if (k % 5==0){
        System.out.println();
           }
     }
}

4.输出A-Z和a-z

for (char i = 'a'; i<='z';i++){
    System.out.println(i);
}
for (char c1 = 'Z';c1 >= 'A';c1--){
    System.out.println(c1);
}

5.求出1-1/2+1/3-1/4…1/100的和

    double k = 0;
    for (int i = 1;i<=100;i++){
        if (i%2==0){
            k=k-(1.0/i);
        }else{
            k=k+(1.0/i);
        }
}
    System.out.println(k);

6.求1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+…100) 的结果
思路分析:1.一共有100项相加
2.每一项的数字再逐渐增加
3.很像一个双层循环
i可以表示是第几项,同时也是当前项的最后一个数

int sum = 0;
for(int i = 1;i <= 100;i++){
	for (int j =1;j <= 1;j++){
		sum += j;
	}
 }
System.out.println("sum"+sum);

知识点

1、输出0.0 ~ 1.0之间的随机数

Math.random()

2、输出1~100之间的随机数

(int)(Math.random() * 100 ) + 1

3、判断字符串内容是否相等

例如:
String name = "贾宝玉";
System.out.println(name.equals("林黛玉"));
System.out.println("林黛玉".equals(name));//两种写法都可,更推荐该方法,避免空指针。
结果输出false。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值