• 【幻化万千戏红尘】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);

     }

    }

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/weigongcheng/p/5672885.html
Copyright © 2020-2023  润新知