day10程序的三大结构

程序的三大结构

  • 顺序结构
  • 选择结构
  • 循环结构

顺序结构

  • 顺序结构是java中最常见的一种结构,由于一直在用,所以可能会忽视它
  • 除非有特别的操作,否则Java的代码都是自上而下顺序执行的

顺序结构的代码如下:

 System.out.println(1);
 System.out.println(2);
 System.out.println(3);
 System.out.println(4);
 System.out.println(5);

选择结构

  • 概念:根据布尔表达式,多个分支选择一个进行执行
  • 分类:if选择结构和switch选择结构

if选择结构

  • 格式:if(布尔表达式){代码块}
  • 分类:单选择,双选择,多选择

if的双选

格式:

if (布尔表达式){
    //判断为真,执行方法体1
}else{
    //判断为假,执行方法体2
}

代码:

    if (score>60){
        System.out.println("成绩及格");
    }else{
        System.out.println("成绩不及格");
    }

结果:

  • score=70 输出成绩合格
  • score=50 输出成绩不合格

if的单选

格式:

 if (布尔表达式)){
        //方法体
    }

代码:

 if (str.equals("hello")){
    System.out.println(str);
    }

结果:

  • equals等于hello时,输出hello
  • equals不等于hello时,没有任何操作

if的多选

格式:

    if(布尔表达式){
        //判断为真,则执行方法体1
    }else if (布尔表达式 && 布尔表达式){
        //判断为假,则执行方法体2
    }else{
    	//上述都不成立,执行如下结果
    }

代码:

   if(score==100){
        System.out.println("恭喜获得了满分");
    }else if (score<100 && score>90){
        System.out.println("A");
    }else{
       System.out.println("其他");
   }

结果:

  • score=100 输出满分
  • 90<score<100 输出A
  • 不符合上述两种情况输出“其他”

switch多选择

格式:

    switch(表达式){
        case value:
        //方法体
        breakcase value:
        //方法体
        breakdefault//方法体
    }

代码:

 switch ((score/10)){
        case 10:
            System.out.println("恭喜满分");
            break;
        case 9:
            System.out.println("A");
            break;
        case 8:
            System.out.println("B");
            break;
        case 7:
            System.out.println("C");
            break;
        case 6:
            System.out.println("D");
            break;
        case 5:
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:
            System.out.println("不及格");
            break;
        default:
            System.out.println("成绩不合法");
    }

结果:

  • 输入:99 输出:A
  • 输入:30 输出:不及格
  • 输入:11111 输出:成绩不合法

表达式的类型:

  • switch中的变量类型可以是:byte、short、int、char、String、枚举
  • 对于String类型,反编译可以得到它设置一个变量a,让String的那个字符串的hashcode和变量a相关联,最后在使用switch(a)

代码:

public static void main(String[] var0) {
        Scanner var1 = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String var2 = var1.nextLine();
        byte var4 = -1;
        switch(var2.hashCode()) {
        case 2080:
            if (var2.equals("AA")) {
                var4 = 0;
            }
            break;
        case 2112:
            if (var2.equals("BB")) {
                var4 = 1;
            }
        }

        switch(var4) {
        case 0:
            System.out.println("这是A");
            break;
        case 1:
            System.out.println("这是B");
            break;
        default:
            System.out.println(var2);
        }

        var1.close();
    }

case穿透现象:

代码:

    switch (str){
        case "AA":
            System.out.println("这是A");
        case "BB":
            System.out.println("这是B");
            break;
        default:
            System.out.println(str);
    }

结果:

  • 输入:str=“AA”
  • 输出:这是A 这是B 这是AA

原因:

  • 如果不写break,就会出现case穿透现象,就是从符合条件的第一条语句开始顺序执行代码,把后面的所有语句都执行完
  • default就是缺省语句,就是匹配不到switch时就会走这个选项,所以default最后执行,而且可以不用写break语句

循环结构

分类

  • while循环
  • do while循环
  • for循环

while循环

格式:

while(布尔表达式){
                //循环内容
            }

代码:

 	int i=0;
    while (i<10){
        System.out.println(i);
        i++;
    }

注意:

  • 为了避免死循环的现象,必须要出现布尔表达式不成立的情况

练习:

使用while计算1到100之间的和

    public static void main(String[] args) {
        //计算1到100的和
        int i=1;//加数
        int sum=0;//和
        while (i<=100){
            sum+=i;
            i++;
        }
        System.out.println("1到100的和是"+sum);
    }

do while循环

格式:

 do {
        方法体
        }while (布尔表达式);

代码:

 do {
        sum+=i;
        i++;
    }while (i<=100);

注意:

  • do while后面必须要加上一个分号

do while和while的区别

  • while循环是先判断后循环,do while是先循环后判断
  • do while 至少会执行一次,但是while代码可能一次都不会执行

for循环

格式:

 for (初始化值;判断条件;步进表达式){
        sum+=i;
        }

代码:

 for (int i=1;i<=100;i++){
        sum+=i;
    }

快捷键:

100.for+回车

注意:

  • 最先执行的就是初始化的语句,可以声明类型。可以初始化多个循环控制变量,也可以是空语句。
  • 其后判断布尔表达式的的值,为真就执行循环体,为假就终止循环,执行后面的语句。
  • 执行完一次循环之后就执行步进表达式,更改循环控制变量。
  • for(;😉//就是一个死循环

练习:

使用for循环,计算1-100之间偶数的和、奇数的和

for (int i = 1; i <=100; i++) {
        if ((i%2==1)){//若为奇数
            sum1+=i;
        }else {//若为偶数
        sum2+=i;
        }
   }

使用for循环打印99乘法表

    //内外嵌套循环:分治思想
    for (int i = 1; i <= 9; i++) {
        for (int j=1;j<=i;j++){
            System.out.print(j+"*"+i+"="+i*j+"\t");
        }
        //外层循环换行
        System.out.println();
    }

增强for循环(主要用于遍历集合)

格式:

  for(声明变量:集合){
        //遍历操作
    }

代码:

   int[] numbers={1,2,3,4,5};

    for (int number : numbers) {
        System.out.println(number);
    }

快捷键:

​ numbers.for

break和continue的区别

  • break循环就此终止,不会再循环下去了
  • continue跳过这一次的循环,开始下一轮的循环

代码:

    for (int i = 0; i < 10; i++) {
        if (i==3){
        //终止整个循环,结束循环
        break;
    }
        System.out.println(i);
    }

结果:

  • 0 1 2
  • 后续的456789都不会执行了

代码:

     for (int i = 0; i < 10; i++) {
        if (i==3){
        //终止此次循环,开始下一轮循环
        continue;
        }
        System.out.println(i);
    }

结果:

  • 0、1、2、4、5、6、7、8、9
  • 只有3的那一轮循环被跳过去了

goto保留字和标签(不建议使用,麻烦且容易出错)

代码:

    //打印101-105之间的质数
    //在这个地方做一个标记
    outer: for (int i=101;i<=105;i++){
                for (int j = 2; j < i/2; j++) {
                    if ((i%j)==0){
                //结束本轮循环后跳转到标记地点
                continue outer;
                }
            }
        System.out.println(i);
    }

分析:

  • 这里的continue只会跳出内层循环,但是一旦出现了其他的因子,他就不是质数了,没必要再循环了,所以这里需要跳到外层循环
  • 这里的continue outer效果等同于break,跳到外层循环

小练习:打印三角形(分治思想和for循环)

思路:

  1. 先打印左边的空白的倒三角形
  2. 打印由*组成的三角形

1.打印空白的倒三角形

   int rows = 0;//打印的行数
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入你要打印的行数:");
    rows = sc.nextInt();
    //遍历每一行
    for (int i = 1; i <= rows; i++) {
        //打印空白组成的倒三角形
        for (int j = 1; j <= rows - i; j++) {
            System.out.print(" ");
        }


    }

    sc.close();

2.打印*组成的正三角形

	int rows = 0;//打印的行数
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入你要打印的行数:");
    rows = sc.nextInt();
    //遍历每一行
    for (int i = 1; i <= rows; i++) {
        //打印空白组成的倒三角形
        for (int j = 1; j <= rows - i; j++) {
            System.out.print(" ");
        }

        //打印*组成的正三角形
        for (int k = 0; k < i; k++) {
            System.out.print("* ");
        }
        //换行
        System.out.println();
    }

    sc.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值