java学习Day5

循环结构

while循环

  • 最基本的循环,结构为
while(布尔表达式){
    //循环内容
}
  • 只要布尔表达式为true,循环就好一直执行下去
  • 大多数情况是会让循环停止下来的,少部分情况需要循环一直进行,比如服务器的请求响应监听
  • 循环条件一直为true就会造成无限循环(即死循环),正常业务编程中应尽量避免,会影响程序性能或者造成程序卡死崩溃
public class WhileDemo01 {
    public static void main(String[] args) {

        //输出1~100

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

输出结果为

在这里插入图片描述

在这里插入图片描述

public class WhileDemo02 {
    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);
    }
}

计算1+2+3+…+100

输出结果为

在这里插入图片描述

do…while 循环

  • 对while而言,条件不满足则不会进入循环,而有时我们需要即使不满足条件,也至少执行一次,因此有了do…while,结构为

    do{
        //代码语句
    }while(布尔表达式)
    
  • while与do…while的区别:

    • while先判断后执行,do…while先执行后判断
    • do…while总是保证循环体会被至少执行一次,这也是主要差别
public class DoWhileDemo01 {
    public static void main(String[] args) {
        int i=0;
        int sum=0;

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

        System.out.println(sum);
    }
}

输出结果为

在这里插入图片描述

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);
    }
}

输出结果为

在这里插入图片描述

可以看出分割线以上无输出,说明while循环在条件不满足时不会进循环,分割线以下输出了一个结果,说明即使不满足条件,循环也会被执行一次

for循环

  • 所有循环都可以用while/do while表示,但是for可以使一些循环结构变得简单
public class ForDemo01 {
    public static void main(String[] args) {
        int a=1;//初始化条件

        while (a<=100){//条件判断
            System.out.println(a);//循环体
            a+=2;//迭代
        }

        System.out.println("while循环结束!");

        //初始化//条件判断//迭代
        for (int i =1;i<=100;i++){
            System.out.println(i);//循环体
        }
        System.out.println("for循环结束!");
    }
}

输出结果为

在这里插入图片描述

在这里插入图片描述

  • for循环执行的次数在执行前就能确定,结构为
for(初始化;布尔表达式;更新){
    //代码语句
}
  • for语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构

在这里插入图片描述

在这里插入图片描述

for语句可通过.for速写

  • for循环执行的顺序
    • 最先执行初始化步骤。可以声明一种类型,可初始化一个或多个循环控制变量,也可以是空语句
    • 然后检测布尔表达式的值。如果为true,循环体被执行;如果为false,循环终止,开始执行循环体后面的语句
    • 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
    • 再次检测布尔表达式。循环执行上面的过程

实例

  1. 计算0~100间的奇数和偶数的和
public class ForDemo02 {
    public static void main(String[] args) {

        int oddSum=0;//奇数的和
        int evenSum=0;//偶数的和

        for (int i = 0; i <=100; i++) {
            if (i%2!=0){
                oddSum+=i;
            }else{
                evenSum+=i;
            }
        }

        System.out.println("奇数的和:"+oddSum);
        System.out.println("偶数的和:"+evenSum);
    }
}

输出结果为

在这里插入图片描述

如果是i<100,则计算的是1~99间奇数和偶数的和

  1. 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
public class ForDemo03 {
    public static void main(String[] args) {

        for (int i = 1; i <= 1000; i++) {
            if(i%5==0){
                System.out.print(i+"\t");//print(输出完不换行)!=println(输出完换行)
            }
            if (i%(5*3)==0){//被15整除说明已经到了第三个数
                System.out.println();//也可以写作print(“\n”)
            }
        }
    }

}

输出结果为

在这里插入图片描述

  • i若从0开始,则第一行会是一个单独的0
  • print:输出完不换行 println:输出完自动换行。因而想在一行输出,用print;想换行,可以print("\n")或println()
  • 本题中实现三个数换行,除以一个5得到一个数,所以除以5*3=15则可以做到三个三个数分开的操作

3.打印九九乘法表

public class ForDemo04 {
    public static void main(String[] args) {

        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <=i ; j++) {
                System.out.print(j+"*"+i+"="+j*i+"\t" );
            }
            System.out.println();
        }
    }
}
/*最初思路流程:
1、先想从列开始打印,打印下来发现第一列完成后无法使第二列上去,因此转为行打印
2、行打印先找规律,每一行后面的数字是不变的,因此为外面的循环变量,里面的依次增大,规律为从1增大到行数,因而外面变量定为i的情况下,其范围为1~9,里面变量定为j,范围为1~i
3、输出每一个算式时,后一个乘数不变,为i,自然另一个为j,也就确定了j+“*”+i=j*i(i*j)的基本算式
4、要得到目标阶梯算式,观察可知每个算式间隔了tab,因此j*i后加“\t”,又因为每行输出完换行,因而在行变量变化,即外面的循环中加换行即可。同时注意print与println的使用区别,后者自带换行
 */

大化小,逐个解决

输出结果为

在这里插入图片描述

增强for循环

  • 主要用于数组或集合,结构为
for(声明语句:表达式)
{
    //代码句子
}
//声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
//表达式:表达式是要访问的数组名,或者是返回值为数组的方法

简单举例

public class ForDemo05 {
    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);
        }
    }
}

分割线上下的作用相同,但底下的更为简便

输出结果为

在这里插入图片描述

break&continue

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");
        
    }
}

输出结果为

在这里插入图片描述

可以看出,break中止了循环(即跳出循环,不再执行循环中剩余的语句),但并没有终止整个程序

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);
        }
    }
}

输出结果为

在这里插入图片描述

可以看出每逢10就会跳过一次循环,但并未终止整个循环

流程控制练习

打印三角形

思路

  • 直接不好通过循环语句打印出三角形,我们可以退而求其次,打印一个梯形,将它的左上部分变为空白即可
  • 目标三角形又可通过其中一半折叠而成,因而问题转换成了打印出阶梯状的代码
  1. 打印左侧三角形(一会会换成空白)
public class TestDemo {
    public static void main(String[] args) {
        //打印三角形  5行

        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >=i ; j--) {//简便操作“fori”
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为

在这里插入图片描述

  1. 打印目标三角形的左半部
public class TestDemo {
    public static void main(String[] args) {
        //打印三角形  5行

        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >=i ; j--) {//简便操作“fori”
                System.out.print(" ");
            }
            for (int j = 1; j <=i ; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为

在这里插入图片描述

  1. 打印目标三角形的右半部
public class TestDemo {
    public static void main(String[] args) {
        //打印三角形  5行

        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >=i ; j--) {//简便操作“fori”
                System.out.print(" ");
            }
            for (int j = 1; j <=i ; j++) {
                System.out.print("*");
            }
            for (int j = 1; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为

在这里插入图片描述

方法简介(理解为函数)

  • 语句的集合,在一起执行一个功能
  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

设计方法的原则

保持方法的原子性,即一个方法只完成1个功能,这样有利于我们后期的扩展

public class Demo01 {
    //main方法
    public static void main(String[] args) {
        int sum = add(1, 2);
        System.out.println(sum);
    }

    //加法
    public static int add(int a,int b){//如果不加static,就无法调用,加之后变为类变量
        return a+b;
    }
}

方法的定义和调用

语法

  • 方法包括一个方法头和一个方法体。以下为所有部分
    • 修饰符:可选。定义方法的访问类型
    • 返回值类型:返回值的数据类型。若无返回值,则为void
    • 方法名:方法实际名称。需要遵守命名规则
    • 参数类型:方法被调用时,传递值给函数。这个值称为实参或变量。参数列表指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
      • 形式参数:方法被调用时用于接收外界输入的数据(如上例中的a,b)
      • 实际参数:调用方法时实际传给方法的数据(如上例中的1, 2)
    • 方法体:包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;//void则不用return
}

方法调用

  • 调用方法:对象名.方法名(实参列表)
  • java支持两种调用方式,根据方法是否返回值来选择
  • 当方法返回一个值的时候,方法调用通常被当做一个值。例如
int large=max(30,40;
  • 如果方法返回值是void,方法调用一定是一条语句
System.out.println(hello,gengsheng);

举例

public class Demo02 {
    public static void main(String[] args) {
        int max = max(10, 20);
        System.out.println(max);
        int Max = max(10, 10);
        System.out.println(Max);
    }

    //比大小
    public static int max(int num1,int num2){
        int result=0;

        if (num1==num2){
            System.out.println("num1=num2");
            return 0;//终止方法
        }
        if (num1>num2){
            result=num1;
        }else {
            result=num2;
        }

        return result;
    }
}

输出结果为

在这里插入图片描述

return可用作终止方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值