zoukankan      html  css  js  c++  java
  • 【幻化万千戏红尘】qianfengDay04-java基础学习:for语句.while语句,do-while语句

    课程回顾:

    程序的结构:

    分支结构:

    1if-else

    格式:if(boolean类型表达式){代码块}[else if(boolean型表达式){代码块}……][else{代码块}]

    //注意:if(boolean类型表达式){代码块}-else if(boolean型表达式){代码块}-else{代码块}:else语句可有可不有。

    2switch

    格式:switch(表达式)

    {

    case 常量值1:代码块;break;

    ……

    [default :代码块;break;]

    }

    表达式:byteshortcharintenumString

    循环结构:

    for语句:

    格式:for(循环变量初始化;循环变量验证;循环变量值改变)

       {

    循环体

       }

    今日内容:

    循环语句的分类:

    1、当型

    for语句

    while语句

    2、直到型

    do/while语句

    for语句:

    格式:for(循环变量初始化;循环变量验证;循环变量值改变)

       {

    循环体

       }

    执行过程:先执行循环变量初始化,在验证循环变量,为true,则执行循环体,再执行循环变量值改变

    接着验证循环变量,为true则继续

    直到为false结束循环

    For语句的三个表达式的省略情况:

    class Test15

    {

    public static void main(String[] args)

    {

    //表达式1可以省略,但是循环变量需要提前声明并赋值

    //int i=1;

    /*for(;i<10;i++)

    {

    System.out.println(i);

    }*/

    //表达式3可以省略,但是循环变量的值的改变需要在循环体中进行

    /*int i;

    for(i=1;i<10;)

    {

    System.out.println(i);

    i++;

    }

    System.out.println("循环结束之后:"+i);*/

    //表达式2可以省略,但是相当于死循环,可以在循环内部使用break

    /*for(int i=1;;i++)

    {

    System.out.println(i);

    if(i==10)

    {

    break;

    }

    }*/

    //for语句的三个表达式都可以省略,这时相当于死循环

    //以下实现重要说10

    int count=0;

    for(int n1=1,n2=3;;n1++,n2+=n1)

    {

    System.out.println("我相信,我可以做到:"+n1+","+n2);

    count++;

    if(count==10)

    {

    break;

    }

    }

    //Math.pow(a,b):计算指定数字的次幂的值,计算ab次幂的结果

    System.out.println(Math.pow(10,4));

    /*

    //等价于for(;;)

    while(true)

    {

    System.out.println("我相信,我可以做到");

    }*/

    //System.out.println("我可以");

    }

    }

    class Test06

    {

    public static void main(String[] args)

    {

    //控制行数的变化

    for(int  i=1;i<4;i++)

    {

    //控制每行的*的输出,*数量最多为行数

    for(int j=1;j<=i;j++)

    {

    System.out.print("*");//输出*

    }

    //该行的*输出完成之后,进行换行

    System.out.println();//换行

    }

    System.out.println("传说中的乘法口诀:");//换行

    //控制行数的变化

    for(int  i=1;i<10;i++)

    {

    //控制每行的*的输出,*数量最多为行数

    for(int j=1;j<=i;j++)

    {

    System.out.print(j+"*"+i+"="+i*j+" ");//输出*

    }

    //该行的*输出完成之后,进行换行

    System.out.println();//换行

    }

    }

    }

    //输出以下图形

    *****

    ****

    ***

    **

    *

    class Test07

    {

    public static void main(String[] args)

    {

    for(int i=5;i>0;i--)

    {

    for(int j=i;j>0;j--)

    {

    System.out.print("*");

    }

    System.out.println();

    }

    }

    }

    //输出以下图形

            *

           ***

          *****

         *******

        *********

       ***********

      *************

     ***************

    *****************

    class Test08

    {

    public static void main(String[] args)

    {

    int maxrows=10;

    //控制行数的变化

    for(int i=1;i<maxrows;i++)

    {

    //控制空格的打印

    //随着行数的增加,空格数减少

    for(int j=1;j<maxrows-i;j++)

    {

    System.out.print(" ");//输出空格

    }

    //控制*的打印

    //随着行数的增加,*数每次增加2

    for(int n=1;n<=2*i-1;n++)

    {

    System.out.print("*");//输出*

    }

    //换行

    System.out.println();

    }

    }

    }

    //110的阶乘累加和为:

    class Test04

    {

    public static void main(String[] args)

    {

    long sum2=0;

    String res="";

    for(int i=1;i<=10;i++)//控制数字递增

    {

        int num=1;

    //获取对应数字的阶乘值

    for(int j=1;j<=i;j++)

    {

    num*=j;

    }

                sum2 +=num;

    res +=num;

    res+="!";

    System.out.println(i+"的阶乘是:"+num);

    if(i!=10)

    {

                   res +="+";

    }

    }

    System.out.println("110的阶乘累加和为:"+sum2);

    System.out.println(res+"="+sum2);

    }

    }

    while语句:

    格式:while(boolean型表达式)

    {

    循环体;

    }

    执行过程:

    先验证表达式,如果为true就执行循环体,接着验证表达式,为true则继续

    如果表达式为false那么就终止循环

    class Test01

    {

    public static void main(String[] args)

    {

    int num=1;

    //使用while语句输出1-10的数字

    while(num<11)

    {

    System.out.println(num);

    num++;

    }

    //等同于上述代码,都是输出1-10的数字

    int n=0;

    while((++n)<11)

    {

    System.out.println(n);

    }

    //练习,请输出10-20的数字,要求倒序输出

    //练习:使用while循环输出100以内的:1,4,7,10,13……,要求每行5

    }

    }

    class Test02

    {

    public static void main(String[] args)

    {

    //倒序输出

    int num=20;

    while(num>9)

    {

    System.out.println(num);

    num--;

    }

    int n=1;//符合要求的数字

    int count=0;//记录当前是第几个数字

    while(n<101)//100以内的数字

    {

    System.out.print(n+" ");

    n+=3;//每次增加3

    count++;//累加计算第几个数字

    if(count%5==0)//如果当前的个数为5的倍数就换行

    {

    System.out.println();//换行

    }

    }

    }

    }

    class Test03

    {

    /*

    有一根绳子总长1000米,每天剪断一半,问多少天绳子小于5(不考虑小数)

    */

    public static void main(String[] args)

    {

    int length=1000,day=0;

    while(length>=5)//只要绳子大于等于5米,那么就可以剪断

    {

    length/=2;//剪断一半

    day++;//累加计算天

    }

    System.out.println(day);

    }

    }

    do/while语句:

    格式:do{

    循环体

    }while(boolean型表达式);

    执行过程:程序先执行循环体再进行表达式验证,如果为true则继续执行循环体,再验证表达式

    直到表达式为false就结束循环

    class Test05 //使用do/while实现20以内的偶数的和

    {

    public static void main(String[] args)

    {

    int num=0,sum=0;

    double sum2=1;

    do{

    if(num%2==0)

    {

    sum+=num;

    }

    num++;

    sum2*=num;

    }while(num<21);

    System.out.println("20以内的偶数的值:"+sum+",20的阶乘:"+sum2);

    }

    }

     

    for:确定循环次数

    while:不确定循环次数

    do/while:要求循环体先执行

     

    循环的嵌套:循环语句中可以再使用循环

    在使用循环嵌套的时候,一定要理清思路,最好能够搞明白执行过程

     

     

    特殊的循环控制:

    break:结束循环(最近的)

    continue:跳过/结束 某一次的循环

    return:结束循环(所有循环)

    标签:java允许对某行代码加上标记

    格式:标识符 : 代码

    可以和break一起使用,用来结束指定的循环

     

    自己动手结合标签和continue使用,观察效果

    class Test11

    {

    public static void main(String[] args)

    {

    for(int i=1;i<10;i++)

    {

    if(i==6)//如果为6

    {

    //continue;//跳过/结束 本次循环

    break;//结束循环

    }

    //continue;

    //break;

    System.out.println(i);

    }

    //System.out.println("Hello World!");

    }

    }

    /////

    class Test13

    {

    public static void main(String[] args)

    {

    //对指定的循环加上标签/标记

    outer:for(int i=1;i<5;i++)

    {

    for(int j=10;j<15;j++)

    {

    System.out.println(i+","+j);

    if(j==12)

    {

    //break outer;//结束循环,结束指定标签的循环

    //return;//等价于上述代码

    //break;//结束当前的内循环

    continue outer;//结束外层的本次循环

    }

    }

    System.out.println(i);

    }

    }

    }

    public class Test14

    {

    /*计算素数*/

    public static void main(String[] args)

    {

    //输出10以内的素数

    /*

    for(int i=2;i<101;i++)

    {

    boolean res=true;//记录当前数字是否为素数

    for(int j=2;j<=i/2;j++)//循环验证是否还有其他约数

    {

    if(i%j==0)//是否可以被整除

    {

    res=false;//修改标识,

    break;

    }

    }

    if(res)

    {

    System.out.println(i);

    }

    }*/

    outer:for(int i=2;i<11;i++)

    {

    for(int j=2;j<=i/2;j++)

    {

    if(i%j==0)

    {

    continue outer;

    }

    }

    System.out.println(i);

    }

    }

    }

    //欢迎玩我们的数字求和小游戏

    import java.util.Scanner;

    public class Geam01

    {

    public static void main(String[] args)

    {

    System.out.println("欢迎玩我们的数字求和小游戏");

    int base,count;//声明变量,分别用于记录输入的基数和个数

    char isQuit;//记录是否退出,Y代表退出

    Scanner sc=new Scanner(System.in);//创建键盘输入对象,

    用于读取用于输入的数据

    while(true)

    {

    System.out.println("请输入基数:");

    base=sc.nextInt();//获取用户输入的基数

    System.out.println("请输入个数:");

    count=sc.nextInt();//获取用户输入的个数

    String res="";//创建字符串变量,用于记录表达式

    long sum=0;//记录总和

                             //循环个数

    for(int i=1;i<=count;i++)

    {

    long num=0,pow=1;//创建变量,记录每个数

    字,和倍数

    //循环计算数字

    for(int j=1;j<=i;j++)

    {

    num+=base*pow;//累加计算数字

    pow*=10;//倍数是以10倍进行递增

    }

    sum+=num;//计算和

    res+=num;//记录表达式

    //如果不是最后一位数字,我们就加上+

    if(i!=count)

    {

    res+="+";

    }

    }

    System.out.println("您本次输入的基数:"+

    base+"个数:"+count+

    ",结果为:"+res+"="+sum);

    System.out.println("请选择:退出(Y),,继续请输

    入其他");

    isQuit=sc.next().charAt(0);//获取用户输入的字符

    if(isQuit=='Y')//如果输入的是结束指令,那么就结

    束循环

    {

    System.out.println("期待下次与你重逢");

    break;//结束循环

    }

    }

    }

    }

    面试:

    跳过/跳出 本次/某次 循环---continue

    结束/跳出 整个/全部 循环---break

    素数(质数):只能被1和本身整除的数

    练习:计算10以内的素数

    步骤:

    1、获取1-10的数字

    2、验证每个数字是否为素数

    素数的验证:当前的数字只能被1和本身整除

    可以通过验证数字能否被其他数字整除

    特殊的for循环:

    1、表达式1可以省略,但是循环变量需要提前声明并赋值

    2、表达式3可以省略,但是循环变量的值的改变需要在循环体中进行

    3、表达式2可以省略,但是相当于死循环,可以在循环内部使用break

    4for语句的三个表达式都可以省略,这时相当于死循环

    5、表达式1和表达式3可以使用,表达式,可以达到声明多个变量,或操作多个变量的值

    例如:

    for(int n1=0,n2=1;;n1+=2,n2+=n1)

    {

    }

    循环的总结:

    对同一问题,可以使用3种循环

    一般来说,确定循环次数或者明确给出循环条件的,我们使用for语句

    如果没有明确的循环次数一般选择while

    如果要求必须先执行循环体那么我们选择do/while

    切记:要避免死循环

    小游戏:

    2+22+222+2222

    基数:2

    个数:4

    用户输入基数和个数,程序输出对应的结果:

    2+22+222+2222=

    询问用户是否结束,如果继续,那么就继续

    例如:基数输入:3,个数输入2

    3+33

    //Math.pow(a,b):计算指定数字的次幂的值,计算ab次幂的结果

    System.out.println(Math.pow(10,4));

    步骤:

    1、循环获取指定个数的数字

    2、计算出每个数字

    2=2

    22=2+20

    222=2+20+200

    2222=2+20+200+2000

    3、求和

    行数 *

    * 1 1 1-1

    ** 2 2 1-2

    *** 3 3 1-3

    **** 4 4 1-4

    ***** 5 5 1-5

    *****

    ****

    ***

    **

    *

    行数 * 空格数

          * 1 1 3

        *** 2 3 2

      ***** 3 5 1

    ******* 4 7 0

    **********

      *******

        *****

         ***

           *

    有一根绳子总长1000米,每天剪断一半,问多少天绳子小于5(不考虑小数)

    练习:求1+2!+3!+...+10!的和(注意用long计算)

    注:3=1*2*3

    步骤:

    1、循环获取1-10的数字

    2、分别计算每个数字的阶乘(循环计算)

    图、画图1for的执行过程

    2for嵌套的执行过程

    3do/while的执行过程

    2:打印

        *   行数1  星数1 空格4

       **   2      2     3

      ***   3      3     2

     ****   4      4     1

    *****   5      5     0

    //

    class zuoye02

    {

    public static void main(String[] args)

    {

    //用于控制行数

    for(int i=1;i<=5;i++)

    {

        for(int j = 1;j<=5-i;j++)

    {

       System.out.print(" ");

    }

    for(int k =1;k<=i;k++)

    {

       System.out.print("*");

    }

    System.out.println();

    }

    }

    }

    3        

    $$$$$$$$$$$

     $$$$$$$$$

      $$$$$$$

       $$$$$

        $$$

         $

        $$$

       $$$$$

      $$$$$$$

     $$$$$$$$$

    $$$$$$$$$$$$

    class zuoye03

    {

    public static void main(String[] args)

    {

    for(int i=1;i<=6;i++)//控制行数

    {

                for(int k=1;k<i;k++)

    {

       System.out.print(" ");

    }

    for(int j=11;j>2*i-2;j--)

    {

       System.out.print("$");

    }

    System.out.println();

    }

            for(int t=1;t<=5;t++)//控制行数

    {

                for(int k=4;k>t-1;k--)

    {

       System.out.print(" ");

    }

    for(int j=1;j<=2*t+1;j++)

    {

       System.out.print("$");

    }

    System.out.println();

    }

    }

    }

    class  zuoye033

    {

    public static void main(String[] args)

    {

    for(int i =1;i<=11;i++)

    {

        for(int j=1;j<6-Math.abs(6-i);j++)

    {

    System.out.print(" ");

     }

               for(int j=1;j<=2*Math.abs(6-i)+1;j++)

    {

    System.out.print("$");

     }

     System.out.println();

    }

    }

    }

    4

    *

    *  *

    *  *  *

    *  *  *  *

    *  *  *  *  *

    *  *  *  *  *  *

    *  *  *  *  *  *  *

    *  *  *  *  *  *  *  *

    *  *  *  *  *  *  *  *  *

    *  *  *  *  *  *  *  *

    *  *  *  *  *  *  *

    *  *  *  *  *  *  

    *  *  *  *  *

    *  *  *  *

    *  *  *

    *  *

    *

    *

    自己发现,规律去实现

    class  zuoye04

    {

    public static void main(String[] args)

    {

    for(int i=1;i<=17;i++)

    {

        for(int j=1;j<=9-Math.abs(9-i);j++ )

    {

       System.out.print("*");

                   System.out.print("  ");

    }

    System.out.println();

    }

    }

    }

    5、计算:求1-3+5-7+ …… -99+101的值。

    class zuoye05

    {

    public static void main(String[] args)

    {

    int sum=0;

    int flag=1;

    for(int i=1;i<=101;i+=2)

    {

        sum +=i*flag;

    flag*=-1;

    }

    System.out.println(sum);

    }

    }

    6、有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。(不考虑小数)

    a:2

    b:1

    1:2/1

    2:3/2

    3:5/3

    4:8/5

    a/b

    (a+b)/a

    2/1,3/2,5/3,8/5

    /**

    int a=2,b=1;

    int sum=0;

    for(int i=1;i<=20;i++)

    {

    sum +=a/b;

    a = a+b;

    b = a-b;

    }

    System.out.println("有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和:"+sum);

        */

             double sum=0;

    int cnt=20;

    int a=2,b=1,c=0;

    while((cnt--)>0){

    sum+=(double)a/b;

    a=a+b;

    b=a-b; //b存储原来的a

    }

    System.out.println(sum);

    7、水仙花数:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,

    其各个数字立方和等于该数本身。

    例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 //java.lang.Math.pow()

    int c=0,d=0,e=0;

    for(int j=100;j<1000;j++)

    {

                 c = j/100;

     d = j/10%10;

     e = j%10;

     if(j== c*c*c+d*d*d+e*e*e)

         {

        System.out.println("水仙花数为:"+j);

     }

    }

  • 相关阅读:
    export default 和 export 的使用方式(六)
    webpack结合vue使用(五)
    webpack 中导入 vue 和普通网页使用 vue 的区别(四)
    普通组件定义渲染和render渲染组件的区别(三)
    代码规范
    vue切换路由时,取消所有axios请求
    JS设计模式-策略模式
    CSS世界(张鑫旭)系列学习总结 (五)内联元素与流
    Vue中Jsx的使用
    Vue事件总线(EventBus)
  • 原文地址:https://www.cnblogs.com/weigongcheng/p/5672885.html
Copyright © 2011-2022 走看看