【java基础10 控制语句:FOR】java用for循环找出100以内的质数,以及找出10000以内的质数,并且每八个换行输出 猜数、100-999的水仙花数

目录

FOR循环

练习


FOR循环

  1. 循环结构: 在程序当中总有一些需要反复/重复执行的代码,假设没有循环结构,那么这段需要重复执行的代码就需要重复编写。代码无法得到重复使用。所以多数编程语言都是支持循环结构的。将来把需要反复执行的代码片段放到“循环体“,再联合”计数器“,共同控制这段需要反复执行的代码。

  2. 基本上所有的编程语言支持的循环包括三种:

    • for循环
    • while
    • do . . .while
  3. 当前示例主要讲解for循环,for循环的语法结构:

    语法结构:

    for( 初始化表达式 ; 布尔表达式 ; 更新表达式 ){
    	//这里放的是需要重复执行的代码片段【循环体:由java语句构成】
    }
    
  4. for循环的执行过程/执行原理

    • 初始化表达式、布尔表达式、更新表达式都不是必须的!【但两个分号是必须的】

    • 初始化表达式最先执行,并且在整个for循环中只执行一次。

    • 布尔表达式必须是true/false,不能是其他值。

    • for的执行过程:

      *先执行初始化表达式,并且该表达式只执行一次
      *判断布尔表达式的结果是true还是false
      	——布尔表达式true
         		*执行循环体
         		*执行更新表达式
         		*判断布尔表达式是true还是false
          		——布尔表达式true
          			*执行循环体
          			*执行更新表达式
          			*判断布尔表达式是true还是false
          				——布尔表达式true
          					*执行循环体
          					*执行更新表达式
          					*判断布尔表达式true还是false
          						··············
          				——布尔表达式false
          					*循环结束
          		——布尔表达式false
          			*循环结束
      	——布尔表达式false
          *循环结束
      
  5. 循环输出1~10

    public class ForText01 {
        public static void main(String[] args){
            /*
            //输出数字1-10
            System.out.println("1");
            System.out.println("2");
            System.out.println("3");
            System.out.println("4");
            System.out.println("5");
            System.out.println("6");
            System.out.println("7");
            System.out.println("8");
            System.out.println("9");
            System.out.println("10");
             */
    
            //使用循环结构来代替以上所有反复执行的代码块。
            //使用循环语句可以让代码量变少
            //将以上代码修改为for循环
            for(int i= 1 ; i <= 10 ; i= i + 1){
                System.out.println(i);
            }
            
            System.out.println("============================================");
            
            for(int i= 1 ; i <=10 ;i += 1){
                System.out.println(i);
            }
            
            System.out.println("============================================");
            
            for(int i= 1 ; i <=10 ;i ++) {
                System.out.println(i);
            }
            
            System.out.println("============================================");
            
            for(int i= 1 ; i <=10 ;++ i ) {
                System.out.println(i);
            }
            
            //死循环
            for(;;) {
                System.out.println("死循环");
            }
     
        }
    }
    
  6. for循环中i变量的作用域

    public class ForText02 {
        public static void main(String[] args){
            //以下的for循环当中“i”变量的作用域是仅限于当前for循环内部使用
            for(int i=0;i<10;i++){
                System.out.println("i--->"+i);
            }
            //以下的for循环当中“i”变量的作用域是仅限于当前for循环内部使用
            for(int i=0;i<=10;i++){
                System.out.println("i--->>"+i);
            }
            //这个变量可以在main方法的作用域中访问吗?
            //System.out.println("i="+i);//编译错误,无法访问
    
            //main方法作用于当中的i变量,只要main方法没有结束,这里的i就能用。
            int i= 0;
            for(;i<10;i++){
                System.out.println("i--->>>"+i);
            }//这个循环语句中,执行到i=9,9+1=10时,循环语句结束,不输出i=10,但是已经运算了,所以以下的i输出为10
    
            //这里可以访问main方法作用域当中的i变量
            System.out.println("i--->>>==="+i);//10
    
            int j;
            for(j=0;j<10;j++){
                System.out.println("j--="+j);
            }
            System.out.println(j);
    
        }
    }
    
  7. for循环的不同写法

    public class ForText03 {
        public static void main(String[] args){
    
            for(int i=1;i<=10;i+=2){
                System.out.println("i-->"+i);//1  3  5  7  9
            }
    
            for(int i=0;i<=10;i+=2){
                System.out.println("i-->>"+i);//0  2  4  6  8  10
            }
    
            for(int i=10;i>0;i--){
                System.out.println("i-->>>"+i);//10 9 8 7 6 5 4 3 2 1
            }
    
            for(int i=100;i>=50;i -=10){
                System.out.println("i>>>"+i);//100 90 80 70 60 50
            }
    
            for(int i=0; i<10 ;){
                System.out.println("计数器"+i);//0 1 2 3 4 5 6 7 8 9
                i++;//for执行顺序——》初始化表达式——>布尔表达式——>循环体——>更新表达式——>布尔——>循环体
                //所以更新表达式放在这里也可以,不影响结果输出
            }
            //以下三行代码与以上相同
            for(int i=0; i<10 ; i++) {
                System.out.println("计数器" + i);//0 1 2 3 4 5 6 7 8 9
            }
    
            for (int i=0;i<10;){
                i ++;//当i=9时小于10,继续执行+1=10输出,10=10,循环结束
                System.out.println("计数器》》"+i);//1 2 3 4 5 6 7 8 9 10
            }
    
    
        }
    }
    
  8. for循环求和

    /*
        在前一个程序的基础山,计算1~100所有奇数的和
        1 + 3 + 5 + 7 +9 + ······ + 99
    
        运算符 +=就是专门完成追加的
     */
    
    public class ForText05 {
        public static void main(String[] args){
    
            //定义一个变量【盒子】,初始值为0
            int sum= 0;
    
            for(int i=1 ; i<100 ;i+=2){
               //i一定是奇数
               //累计追加
    
               //sum存储的最终求和的结果
               //不能每一次执行到这里,都把结果归为0
               //定义sum不能放在这,因为这里是循环体
               //int sum= 0;    所以这一变量要定义在for循环外
    
                sum += i;//sum=(int)(sum+i);
    
                //输出语句放到这里表示每循环一次则输出一个数据
                //即没两个数相加就显示一次
                //System.out.println("sum = "+sum);
    
            }
    
            //以上for循环结束之后,最终输出求和的结果
            System.out.println("sum ="+sum);
            System.out.println("=======================================================");
            //第二种方法:
            //sum归零
            sum =0;
    
            for(int i=1;i<=100;i++){
                if(i % 2 !=0){
                    sum +=i;
                }
            }
            System.out.println("sum ="+sum);
    
        }
    }
    
    
  9. for循环嵌套for循环

    public class ForText06 {
        public static void main(String[] args){
    
            for(int i=1;i<=10; i++){//共循环10次
                //循环体中可以编写其他的控制语句
                //控制语句可以嵌套使用
                //控制语句可以是:if、if..else、switch、for、while、do..while
    /*
                if(){
                    for(){
                        while(){
                            if(){
                                for(){
    
                                }
                            }
                        }
                    }
                }
    
    
     */
                //不要想太多,即使循环体中是一个for循环,不要将这个for特殊化,它也只是一个普通的for循环
                //只不过是一段符合java语法的代码
    
                //内层循环,内层循环中的变量名和外层循环中的变量名不能重名。
                //for(int i=10;;){}
    
                //System.out.println("i--->"+i);
                //这里是循环体,无论这个循环体中编写了什么样的代码,这对代码也需要执行10遍。
    
                for(int j=0;j<3;j++){
                    System.out.println("J--"+j);
                }
            }
            
            
                for(int i=1;i<=10;i++){//循环10次,就是10个三次0 1 2,就是30个0 1 2 
                    for(int j=0;j<3;j++){//循环三次,就是三个0 1 2
                        for(int k=0; k<3;k++){//循环三次  0 1 2
                            System.out.println("K------------"+k);
                        }
                    }
                }
    
        }
    }
    
    
  10. for循环

    public class ForText07 {
        public static void main(String[] args){
    
    
    //        for(int i=0;i<10;i++){//循环10次
    //
    //            System.out.println("Begin");
    //            //这里的代码片段执行10次
    //            for(int j=0;j<1;j++){//执行1次,输出0
    //                System.out.println("j-->"+j);
    //
    //            }
    //        }
    
            for(int i=1;i<=5;i++){//执行5次,每一次执行,内层的循环都执行一次
                System.out.println("开始");
                for(int j=1;j<=5;j++){//执行5次
                    System.out.println(i*j);
                }
                System.out.println("结束");
    
            }
    /*
    开始
    1
    2
    3
    4
    5
    结束
    开始
    2
    4
    6
    8
    10
    结束
    开始
    3
    6
    9
    12
    15
    结束
    开始
    4
    8
    12
    16
    20
    结束
    开始
    5
    10
    15
    20
    25
    结束
    
     */
        }
    }
    

练习

  1. 九九乘法表

    /*
           使用for循环输出九九乘法表
    
           1*1=1
           2*1=2  2*2=4
           3*1=3  3*2=6  3*3=9
           4*1=4  4*2=8  4*3=12  2*4=16
           ···························
           ·······································
           9*1=9··············································9*9=81
     */
    
    public class ForText08 {
        public static void main(String[] args){
    
            for(int i=1;i<=9;i++){//外层9次
                for(int j=1;j<=i;j++){//内层
                    //i是1时,=j, 输出1*1=1 换行  j++ =2>1,结束内层循环
                    //i=2了, j<i 输出2*1=2,j++运算完=2,i=j 输出2*2=4 换行 j++ =3>2 结束内层循环
                    //i=3了, j<i 输出3*1=3  j++运算完=2  继续j++ --> 输出3*2=6 继续j++ -->输出3*3=9 i=j  换行   j++  =4>3  结束内层循环
                    System.out.print(i+"*"+j+"="+i*j+"\t");//这里是为了美观,在每一句之后加一个制表符
                    if(i==j){//这里是为了美观,加一个if语句,在每换一行之后加一个换行符或者放在外层循环中
                        System.out.println("\n");
                    }
    
                }
            }
    
    
            for(int i=1;i<=9;i++){
                //i是行号
                //System.out.println(i);
    
                //循环体中的程序主要任务是什么?
                //处理当前行,将当前行中所有的项目全部输出
                for(int j=1;j<=i;j++){
                    System.out.print(i+"*"+j+"="+i*j+"\t");
                }
                System.out.println("\n");
    
            }
    
        }
    }
    
  2. 需求:编写for循环找出1~100中所有的素数

    /*
    	素数:又被称为质数,能够被1和自身整除,不能被其他数字整除的数字成为素数。
             也就是说判断条件应该是:除的数只要不包含1和本身,只要有有一个数能被整除,就不是素数
    
    		不能是:只要没有可以整除的数,就是质数, 这个是错的i%j!=0
                - 举例15  15/4=3···余3,15不能整除4,但是可以整除3和5,这里余数不为0,但15也不是质数
                - 所以用这个条件判断是否为质数是错的
    
    	能整除1,i%1==0 任何数都能整除1,   自身整除  i%i==0   只能被自己整除,
     */
    
    public class ForText09 {
        public static void main(String[] args){
            System.out.print("100以内的质数:");
            for(int i=2;i <= 100 ; i++){//判断1~100中每一个数是不是质数,一个数判断一次,就是100次
    
                boolean flag=true;
    
                for(int j = 2; j < i ; j++){//j<i,就是除的数不大于除数,然后只要j<i就一直除
                    if(i%j==0){
    
                        //因为1和本身已经排除在外,所以如果i整除j,肯定不是质数,所以输出flag为false;
                        flag=false;
                    }
    
                }
    
                if(flag){
                    System.out.print( " "+i);//输出结果,一定要在外层循环,一个数输出一次。
                }
            }
    
    
    
    //无注释版
            System.out.print("\n100以内的质数:");//这里为与以上代码区分,所以用来\n换行
            for (int i = 2; i <= 100; i++) {
    
                boolean flag = true;
    
                for (int j = 2; j < i; j++) {
    
                    if ( i % j == 0) {
                        flag = false;
                        break;
                    }
                }
    
                if(flag) {
                    System.out.print(" "+i);
                }
    
            }
    
            //这个代码不能这么使用
    //        System.out.print("\n100以内的质数:");//这里为与以上代码区分,所以用来\n换行
    //        for (int i = 2; i <= 100; i++) {
    //
    //            boolean flag = false;
    //
    //            for (int j = 2; j < i; j++) {
    //
    //                if ( i % j != 0) {
    //                    //这里排除1和本身,只要不整除其他数就是质数,
    //                    //举例15,15/4=3···余3,但是15不是质数
    //                    flag = true;
    //                    break;
    //                }
    //            }
    //
    //            if(flag) {
    //                System.out.print(i+" ");
    //            }
    //
    //        }
    
        }
    }
    
    
  3. 需求:编写for循环找出:1~10000中的素数中所有的素数

    /*
            
            素数:又被称为质数,能够被1和自身整除,不能被其他数字整除的数字成为素数。
                  也就是说判断条件应该是:除的数只要不包含1和本身,只要有有一个数能被整除,就不是素数
    
                  不能是:只要没有可以整除的数,就是质数, 这个是错的i%j!=0
                     举例15  15/4=3···余3,15不能整除4,但是可以整除3和5,这里余数不为0,但15也不是质数
                     所以用这个条件判断是否为质数是错的
    
            能整除1,i%1==0 任何数都能整除1,   自身整除  i%i==0   只能被自己整除,
    
    
            升级:1~10000中的素数
            要求:每八个换一行
                每八个质数换一行,就要知道质数个数。而且一定是在循环之内,加个判断条件,每输出一个i就记录一次
                判断是否为8个数的条件要放在外层循环之内,
     */
    
    public class ForText10 {
        public static void main(String[] args) {
    
    
                System.out.println("10000以内的质数:");
                int count=0;//计数
                for(int i = 2; i <=10000;i++) {
                    boolean flag = true;//默认为质数
    
                    for (int j = 2; j < i; j++) {//判断是否为质数
                        if (i % j == 0) {//不是质数的输出错
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        count++;//统计i的个数,只要有一个符合条件count就会自加一
                        System.out.print(i+" ");//输出质数
                        if(count==8){//当i的个数为8时,输出换行,并且使count的值归0,从而继续换行
                            System.out.print("\n");
                            count=0;
                        }
                    }
                }
    
    //            //第二种方法
    //        System.out.println("10000以内的质数:");
    //        int count=0;
    //        for(int i = 2; i <=10000;i++) {
    //            boolean flag = true;//默认为质数
    //
    //            for (int j = 2; j < i; j++) {//判断是否为质数
    //                if (i % j == 0) {//不是质数的输出错
    //                    flag = false;
    //                    break;
    //                }
    //            }
    //            if (flag) {
    //                count++;//统计i的个数,只要有一个符合条件count就会自加一
    //                System.out.print(i+" ");//输出质数
    //                if(count%8==0){//当count可以整除8时,输出换行,也就是每8个换一行
    //                    System.out.print("\n");
    //                }
    //            }
    //        }
    
    
        }
    
    }
    
    
  4. 水仙花数:一个三位数=个位的立方+十位的立方+百位的立方

    例如:153=1³+5³+3³=1+125+27

    public class Work0522 {
    	public static void main(String[] args) {
    		
    	
    		int g,s,b;
    		System.out.print("100-999之间的水仙花数");
    		
    		for(int i=100;i<=999;i++){
    			g=i%10;
    			s=i/10%10;
    			b=i/100%10;
    			if(i==g*g*g+s*s*s+b*b*b){
    				
    				System.out.print("  "+i);
    			}
    			
    		}
    
    
    //
    //		int num = 8461;
    //		int ge = num % 10; // 分解获得个位数
    //		int shi = num / 10 % 10; // 分解获得十位数
    //		int bai = num / 100 % 10; // 分解获得百位数
    //		int qian = num / 1000; // 分解获得千位数
    //		System.out.println("数字:  " + num);
    //		System.out.println("千位数是:  " + qian);
    //		System.out.println("百位数是:  " + bai);
    //		System.out.println("十位数是:  " + shi);
    //		System.out.println("个位数是:  " + ge);
    	}
    }
    	
    
  5. 成绩录入

    import java.util.Scanner;
    
    public class Work05231 {
    
    	public static void main(String[] args) {
    
    		Scanner input=new Scanner(System.in);
    		System.out.print("请输入需要录入成绩的人数:");
    		int peo=input.nextInt();
    		
    		int a=0,b=0,c=0,d=0,e=0,f=0;
    		for (int i = 1; i<=peo; i++) {
    			 System.out.println("请输入第"+i+"位同学的成绩");
    			 int grade=input.nextInt();
    			 if (grade>=90&&grade<=100) {
    				a=a+1;
    			 }else if(grade>=80&&grade<90){
    				b=b+1;
                 }else if(grade>=70&&grade<80){
    				c=c+1;
                 }else if(grade>=60&&grade<70){
    				d=d+1;
                 }else if(grade>0&&grade<60){
    				e=e+1;
                 }else {
                	System.out.println("您输入的成绩有误");
                	f=f+1; 
    			}
    		}
    		System.out.println("90~100分的人数为:"+a+"人");
    		System.out.println("80~90分的人数为:"+b+"人");
    		System.out.println("70~80分的人数为:"+c+"人");
    		System.out.println("60~70分的人数为:"+d+"人");
    		System.out.println("60分以下的人数为:"+e+"人");
    		System.out.println("计入分数人数为:"+(a+b+c+d+e)+"人");
    		System.out.println("成绩有误的人数为:"+f+"人");
    		System.out.println("共"+peo+"人");
    		
    	}
    }
    
    
  6. 猜数

    import java.util.Scanner;
    
    public class Work05233{
    
    	public static void main(String[] args) {
    		
    		int count=0;
    		int number=(int)(Math.random()*100);
    	    for(int i=1;i<=20;i++){
    	    	Scanner input=new Scanner(System.in);//接受从键盘输入的数据
    			int y ;
    		
    			
    			System.out.print("请输入数:");
    			y=input.nextInt();
    			
    				if(y>number){
    					System.out.println("大了点,再猜!");
    				}else if(y<number){
    					System.out.println("小了点,再试试!");
    				}else if(y==number){
    					System.out.println("猜对了!");
    					break;
    				}
    				count++;
    			}
    	        if(count==1) {
    	        	System.out.println("你太有才了");
    	        }else if(count>=2&&count<=7) {
    	        	System.out.println("这么快就猜出来了,很聪明么!");
    	        }else if(count>7&&count<20){
    	        	System.out.println("猜了半天才猜出来,小同志,尚需努力啊!");
    	        }else{
    	        	System.out.println("猜了半天也没才出来,lj");
    	        }
    	}
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值