Day05 - - Java基础语法(含习题)

循环结构的4要素:

       (1)、初始条件;

       (2)、循环条件 -- > boolean类型;

       (3)、循环体;

       (4)、迭代条件。

 

一、while循环结构:

while(a){

       b

       c

}

 

执行顺序:a - - b - - c - - a - - b - - c …………直到条件a不满足

说    明:

       1、写while循环一定小心不要丢了迭代条件。一旦丢了,就容易导致死循环!            2、写程序要避免出现死循环。

       3、for循环与while循环可以相互转换。

 

二、do--while循环结构:

do  {

       b

       c

}while(a)

 

执行顺序:b - - c - - a - - b - - c …………直到条件a不满足

说    明:do—while循环结构至少会执行一次循环体。

package cn.edu.bzu;



public class Test00 {

    public static void main(String[] args) {

        

         //遍历100以内的偶数

         int num=1;

         int sum=0,count=0;

         do {

             if(num%2==0) {

                  System.out.println(num);

                  sum+=num;

                  count++;

             }

             num++;

         }while(num<=100);

        

         System.out.println("总和为:"+sum);

         System.out.println("个数为:"+count);

    }

}

 

 

答案:(java中while括号内的必须是boolean类型,不能是整型)

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int z=0,f=0;

         Scanner scan=new Scanner(System.in);

        

         while(true) {

             int num=scan.nextInt();

             if(num==0)

                  break;

             else if(num>0)

                  z++;

             else

                  f++;

         }

         System.out.println("您输入的数(以0认为结束)中,正数"+z+"个,负数"+f+"个。");

    }

}

 

 

嵌套循环:一个循环体含在另外一个循环体中。

嵌套循环示例:

1、

       *****

        *****

         *****

          *****

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int i,j,k;

         for(i=0;i<4;i++) {

             for(j=0;j<=i;j++)

                  System.out.print(" ");

             for(k=0;k<4;k++)

                  System.out.print('*');

             System.out.println();

         }

    }

}

 

 

2、结果展示图:

*

** 

***  

****


 

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int i,j,k;

         for(i=0;i<4;i++) {

             for(k=0;k<=i;k++)

                  System.out.print('*');

             for(j=0;j<=i;j++)

                  System.out.print(" ");

             System.out.println();

         }

    }

}

 

三、例题:

1、九九乘法表:

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int i,j;

         for(i=1;i<=9;i++) {

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

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

             }

             System.out.println();

         }

    }

}

 

 

2、输出100以内的所有质数:(2是最小的质数

x

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int i,j;

         for(i=1;i<=9;i++) {

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

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

             }

             System.out.println();

         }

    }

}

 

 

优化代码1:

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int count=0;

         boolean isFlag=true; //设置一个标志为,用来标志

        

         //获取当前时间距离1970-01-01 00:00:00的毫秒数

         long start=System.currentTimeMillis();

        

         for(int i=2;i<=1000000;i++) {

            

             for(int j=2;j<=Math.sqrt(i);j++) {//优化二:使用Math

                  if(i%j==0) {

                      isFlag=false;    //标志位:如果不是质数就标志位为false

                      break;   //优化一:只对本身非质数的自然数是有效的

                  }

             }

             //

             if(isFlag==true)

                  count++;

            

             isFlag=true;

         }

         long end=System.currentTimeMillis();

         System.out.println("质数的个数为:"+count);

         System.out.println("所花费的时间为:"+(end - start));

    }

}

 

 

优化代码2:

package cn.edu.bzu;



import java.util.Scanner;



public class Test00 {

    public static void main(String[] args) {

        

         int count=0;

         boolean isFlag=true; //设置一个标志为,用来标志

        

         //获取当前时间距离1970-01-01 00:00:00的毫秒数

         long start=System.currentTimeMillis();

        

         label:for(int i=2;i<=1000000;i++) {

            

             for(int j=2;j<=Math.sqrt(i);j++) {//优化二:使用Math

                  if(i%j==0) {

                      continue label;

                  }

             }

             count++;

         }

         long end=System.currentTimeMillis();

         System.out.println("质数的个数为:"+count);

         System.out.println("所花费的时间为:"+(end - start));

    }

}

 

break和continue:break结束包裹此关键字的最近的一层的所有循环,continus结束此层的当次循环。

 

return用于结束一个方法。

 

 

四、测试习题

1. 循环结构是如何最后退出循环的,有哪些不同的情况请说明。

① 循环条件返回false

② 在循环体内,一旦执行到break,跳出循环

continuereturn

 

2.指出如下程序输出的结果:

label: for (int i = 1; i <= 4; i++) {

           for (int j = 1; j <= 10; j++) {

              if (j % 4 == 0) {

                  continue label;

              }

              System.out.print(j);

           }

           System.out.println();

}

正确结果:123123123123

 

3.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。
编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)

//int factor = 0;
for(int i = 1;i <= 1000;i++){
    int factor = 0;    
    for(int j = 1;j <= i/2;j++){
    
        if(i % j == 0){
            factor += j;
        }
    
    }

    if(i == factor){
        System.out.println(i);
    }

    //重置factor
    //factor = 0;
    
}

 

4. 说明break和continue使用上的相同点和不同点

break:s witch-case 和 循环结构(结束当前循环),其后不可以声明执行语句

continue: 循环结构(结束当次循环),其后不可以声明执行语句

 

5.
******
*****
****    
***    
**    
*    

外层循环控制行数
内层循环控制列数

for(int i = 1;i <= 6;i++){
    for(int j = 1;j <= 7 - i;j++){
        System.out.print("*");
    }

    System.out.println();
    
}

或
for(int i = 0;i < 6;i++){
    
    for(int j = 0;j < 6 - i;j++){
        System.out.print("*");
    }

    System.out.println();
}


 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值