Java学习Day07

Java 流程控制04

循环结构

1. while 循环

  • while 是最基本的循环,它的结构为:

while (布尔表达式){
    //循环的内容
}
  • 只要布尔表达式为true,循环就会一直执行下去

  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。

  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等

  • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程需要尽量避免死循环,这会影响程序性能或者造成程序卡死崩溃。

  • 实例:

package com.Ym.struct;
​
public class WhileDemo01 {
    public static void main(String[] args) {
​
        //输出1到100
​
        long i = 0;
​
        while (i<100){
            i++;
            System.out.println(i);
        }
    }
}
  • 计算1+2+3+...+100

package com.Ym.struct;
​
public class WhileDemo03 {
    public static void main(String[] args) {
        //计算1+2+3+。。+100=?
        int i = 0;
        int sum = 0;
​
        while (i<=100){
            sum = sum + i;
            i++;
​
        }
        System.out.println(sum);
    }
}
​

2. do...while循环

  • 对于while语句而言,如果不满足条件,则不能进入循环。

  • 但有时候我们需要即使不满足条件,也至少执行一次。

  • 这时就使用do...while循环,它与while循环相似但是它能够至少执行一次

do {
    //代码语句
}while(布尔表达式)

注:

  1. while与do的区别在于while是先判断后执行,do while 是先执行后判断

  2. Do...while总是保证循环体会被至少执行一次,这是他们的主要差别。

package com.Ym.struct;
​
public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a = 0;
        while (a<0){
            System.out.println(a);
            a++;
        }//没有输出
        System.out.println("=============");
        do{
            System.out.println(a);
            a++;
        }while(a<0);//输出了0
    }
}

3. for 循环(最重要的)

  • 虽然所有的循环都能使用while与do...while表示,但是Java提供了另一种语句--for循环,使得循环结构变得更加简单。

  • for循环语句是支持迭代的一种通用结构,是最有效的、最灵活的循环结构

  • for循环执行的次数是在执行前就确定的,语法格式如下

for(初始化;布尔表达式;更新){
    //代码语句
}
  • while与for的使用区别

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 1;//初始化条件
        while (a<=100){//条件判断
            System.out.println(a);//循环体
            a += 2;//a = a + 2;(迭代)
        }
        System.out.println("while循环结束!");
​
        //初始化;条件判断;迭代
        for(int i = 1;i <= 100;i++){
            System.out.println(i);//循环体
        }
​
        System.out.println("for循环结束!");
​
        //快捷方式100.for+回车
        for (int i = 0; i < 100; i++) {
            System.out.println(i);
        }
  • 注:

关于for循环有以下几点说明:
​
最先执行初始化步骤,可以说明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。//删除int i = 0;
然后,检测布尔表达式的值。如果为true,循环体被执行;如果为false,循环终止,开始执行循环体后面的语句//删除i < 100;
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)//删除i++
再次检测布尔表达式。循环执行上面的过程

练习1 计算0-100之间偶数与奇数的和

  • 我的做法

 int evenSum = 0;
        for(int i = 0;i <= 100;i += 2){
            evenSum = evenSum + i;
        }
        System.out.println(evenSum);//偶数2550
​
        int oddSum = 0;
        for (int y = 1;y < 100;y += 2){
            oddSum = oddSum + y;
        }
        System.out.println(oddSum);//奇数2500
  • 狂神老师的做法

 int oddSum1 = 0;
        int evenSum2 = 0;
​
        for (int i = 0; i <= 100; i++) {
            if(i%2!= 0){//%模运算,!=不等于,因此这是奇数
                oddSum1+=i;//oddSum = oddSum + i;
            }else{//这是偶数
                evenSum2+=i;
            }
        }
​
        System.out.println("奇数的和:"+oddSum1);
        System.out.println("偶数的和:"+evenSum2);

练习2 用while或for循环输出1-1000之间能被5整除的数字,并且每行输出3个

  • 狂神老师做的for

for (int i = 1; i <= 1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");//空格\t,删除了System.out.ptintln的ln
                if (i%(5*3)==0){//除了三个5后就换行
                    System.out.println();//换行\n:System.out.print("\n")
                }
            }
        }
  • 我做的while

int x = 1;
        while (x <= 1000){
            if (x%5==0){
                System.out.print(x+"\t");
                if (x%15==0){
                    System.out.println();
                }
            }
            x++;
        }
  • 注意点

  1. 如果System.out.print则它不会换行,如果带了ln它就会自动换行

  2. 转义字符\t 为空格;\n为换行

  3. System.out.println()==System.out.print("\n")

练习3 打印九九乘法表

  • 狂神老师的做法

package com.Ym.struct;
​
public class ForPracticeDemo03 {
    public static void main(String[] args) {
        //1. 我们先打印第一列,将复杂的问题简单化,然后考虑接下来
        //2. 将固定的1再用一个循环包起来
        //3. 去掉重复项,i<j
        //4. 调整样式  
​
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j+"*"+i+"="+(j*i) + "\t");
            }
            System.out.println();
        }
        
      
  • Ym的复盘

  1. 将九列的问题先只看成一列的问题

 for (int i = 0; i < 9; i++) {
            System.out.println(1+"*"+i+"="+(1*i));
        }
  1. 将一列的问题变成九列的问题,只要把上一把固定的1改成一个变量,而这个变量也用for循环来表示

将这俩个for循环嵌套起来就解决了

 for (int j = 0; j < 9; j++) {
            for (int i = 0; i < 9; i++) {
                System.out.println(j+"*"+i+"="+(j*i));
            }
        }
  1. 第二步跑起来会发现有重复的,因此需要去除重复项,于是就让i<j

for (int j = 0; j <= 9; j++) {
            for (int i = 0; i <= j; i++) {
                System.out.println(j+"*"+i+"="+(j*i));
            }
        }
  1. 再调整一下样式

for (int j = 0; j <= 9; j++) {
            for (int i = 0; i <= j; i++) {
                System.out.print(j+"*"+i+"="+(j*i)+"\t");
            }
            System.out.println();
        }

 

4. 增强For循环

  • 做个了解,在以后的数组会重点使用

public class ForDemo02 {
    public static void main(String[] args) {
        int [] numbers = {10,20,30,40,50};//定义了一个数组
​
​
        for (int i = 0;i < 5;i++){
            System.out.println(numbers[i]);
        }
        System.out.println("====================");
        //遍历数组的元素
        for (int x:numbers){
            System.out.println(x);
        }
    }
}

5. Break&Continue

  • Break 在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。

public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==30){
                break;//强行终止了循环的进行
            }
        }
​
        System.out.println("123");
    }
}//强行的终止

  • Continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;//符合条件就回到循环
            }
            System.out.print(i);
        }

6.定位符(不建议使用)

public class LabelDemo {
    public static void main(String[] args) {
        //打印101-150之间所有的质数
​
        //质数是指大于1的自然数之中,除了1和它本身意外不再有其他因素的自然数
        int count = 0;
        //不建议使用
        outer:for (int i = 101 ; i <= 150 ; i++){
            for (int j = 2 ; j < i/2 ; j++){
                if (i % j == 0){
                    continue outer;
                }
            }
            System.out.print(i + " ");
        }
    }
}
​

7. 练习

  • 打印一个三角形

public class TextDemo01 {
​
    public static void main(String[] args) {
        //打印三角形 5行
​
        for (int i = 1 ; i <= 5 ; i++){
            for (int j = 5 ; j >= i ; j--){
                System.out.print("@");
            }
            for (int j = 1 ; j <= i ; j++){
                System.out.print("*");
            }
            for (int j = 1 ; j < i ; j++){
                System.out.print("*");
            }
            for(int j = 5 ; j >= i ; j--){
                System.out.print("@");
            }
            System.out.println();
        }

注:

  1. java是顺序运行,循环的嵌套它是按照从上往下进行的,进行完一次后才会递进再重复一次循环,所以生成的符号可以看作一行一行来。

  2. for循环的嵌套十分有效,利用不同的变量的关系可以有很多不一样的效果,一定要将复杂的问题分解成一个一个小的问题,以此来寻找突破口。

 2022.9.14 星期三

  今天把java的流程控制学完了,while if for 这三个都好难哦,感觉现在学起来确实有点吃力,不过这才学了一个星期,后面多多练习应该是可以进步的,一定要加油。

  来到课题组的第二个星期,没想到每个星期的组会我都老是要错过,第一个星期是班会,现在却和选修撞上了,啧啧啧我也想听一下组会,听听师兄们在干些什么。

  健身了俩天,手和腿居然都不酸,看来后面得加大运动量了,要虐自己多点,不过好像是有瘦下来点哈哈,还有一个半月时间就是姐姐的婚礼咯,还有四个月就要见npy的家长了,一定要加油好好瘦下来!

  ps.研究生开学到现在,每天都是不一样的一天,对未来真的十分憧憬,一定要加油坚持住,keep !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值