【幻化万千戏红尘】qianfengDay04-java基础学习:for语句.while语句,do-while语句

时间:2021-12-17 10:26:27

课程回顾:

 

程序的结构:

 

分支结构:

1if-else

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

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

2switch

格式:switch(表达式)

{

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

……

[default :代码块;break;]

}

表达式:byte\short\char\int\enum\String

 

循环结构:

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+"\t");//输出*

}

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

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+"\t");

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

 }

}