• java-循环结构的例题


    1.从键盘输入个数不确定的整数,并判断输入的正数和负数的个数,输入为0时结束程序。

    提示:最简单“无限”循环格式:while(true),for(;;),无限循环存在的原因是因为并不知道要循环多少次,需要根据循环体内部的某些条件,来控制循环的结束。

    代码实现:

    import java.util.Scanner;
    class ex{
    	public static void main(String[] args){	
    	int count1=0;
    	int count2=0;
    	while(true){
    		System.out.println("请输入一个整数:");
    		Scanner scan=new Scanner(System.in);
    		int n=scan.nextInt();
    		if(n>0){
    			count1++;
    		}
    		else if(n<0){
    			count2++;			
    		}
    		else
    			break;
    	}
    			System.out.println("正数的个数为"+count1);
    			System.out.println("负数的个数为"+count2);
    } 
    }

     运行结果:

    2.打印九九乘法表

    代码实现:

    class ex{
    	public static void main(String[] args){	
    		for(int i=1;i<=9;i++){
    			for(int j=1;j<=i;j++){
    				System.out.print(i+"*"+j+"="+(i*j)+" ");
    			}
    				System.out.println();
    		}
    	} 
    }

    运行结果:

    3.100000以内的所有质数的输出

    质数:素数,只能被1和它本身整除的自然数。==> 从2开始到n-1结束,都不能被这个数整除。

    最小的质数:2

    注意:(1既不是质数也不是合数)

    代码:

    实现方法一代码:(效率差)

    class ex{
    	public static void main(String[] args){
    		boolean isFlag=true;//定义一个标识
    		//获取当前时间距离1970-01-01 00:00:00的毫秒数
    		long start=System.currentTimeMillis();
    		for(int i=2;i<=100000;i++){//遍历10000以内的自然数
    			for(int j=2;j<i;j++){
    				if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
    					isFlag=false;//标识设为false
    				}
    			}
    			if(isFlag==true){//如果为true,说明都不能除尽
    				System.out.println(i);
    			}
    			//重置isFlag
    			isFlag=true;
    		}
    		long end=System.currentTimeMillis();
    		System.out.println("所花费的时间为:"+(end-start)+"s");
    
    	} 
    }

    运行截图:

    算法优化一

    代码:

    class ex{
        public static void main(String[] args){
            boolean isFlag=true;//定义一个标识
            //获取当前时间距离1970-01-01 00:00:00的毫秒数
            long start=System.currentTimeMillis();
            for(int i=2;i<=100000;i++){//遍历100000以内的自然数
                for(int j=2;j<i;j++){//被i去除
                    if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
                        isFlag=false;//标识设为false
                        break;//优化1 遇到了能除尽的,就退出里边的循环:只对本身非质数的自然数有效
                    }
                }
                if(isFlag==true){//如果为true,说明都不能除尽
                    System.out.println(i);
                }
                //重置isFlag
                isFlag=true;
            }
            long end=System.currentTimeMillis();
            System.out.println("所花费的时间为:"+(end-start)+"s");
    
        } 
    }

     运行截图:

    算法优化二代码:

    class ex{
    	public static void main(String[] args){
    		boolean isFlag=true;//定义一个标识
    		//获取当前时间距离1970-01-01 00:00:00的毫秒数
    		long start=System.currentTimeMillis();
    		for(int i=2;i<=100000;i++){//遍历100000以内的自然数
    			for(int j=2;j<=Math.sqrt(i);j++){
    				if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
    					isFlag=false;//标识设为false
    					break;//优化1 遇到了能除尽的,就退出里边的循环:只对本身非质数的自然数有效
    				}
    			}
    			if(isFlag==true){//如果为true,说明都不能除尽
    				System.out.println(i);
    			}
    			//重置isFlag
    			isFlag=true;
    		}
    		long end=System.currentTimeMillis();
    		System.out.println("所花费的时间为:"+(end-start)+"s");
    
    	} 
    }

    运行截图:

    算法优化三:

    代码:

    class ex{
    	public static void main(String[] args){
    		boolean isFlag=true;//定义一个标识
    		//获取当前时间距离1970-01-01 00:00:00的毫秒数
    		long start=System.currentTimeMillis();
    		for(int i=2;i<=100000;i++){//遍历100000以内的自然数
    			for(int j=2;j<=Math.sqrt(i);j++){
    				if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
    					isFlag=false;//标识设为false
    					break;//优化1 遇到了能除尽的,就退出里边的循环:只对本身非质数的自然数有效
    				}
    			}
    			if(isFlag==true){//如果为true,说明都不能除尽
    				System.out.println(i);//如果不想显示,可以统计一下质数的个数,在这里count++(记得在开头要初始化为0)
    			}
    			//重置isFlag
    			isFlag=true;
    		}
    		long end=System.currentTimeMillis();
    		System.out.println("所花费的时间为:"+(end-start)+"s");
    
    	} 
    }
    

      运行截图:

    优化方法四:(这个方法相比之前的只是输出的数据少了—注释了一条语句,添了一条语句,如果你把之前的三种优化方法都照着这种改一下,都会变快很多)

    代码:

    class ex{
        public static void main(String[] args){
            boolean isFlag=true;//定义一个标识
            int count=0;
            //获取当前时间距离1970-01-01 00:00:00的毫秒数
            long start=System.currentTimeMillis();
            for(int i=2;i<=100000;i++){//遍历10000以内的自然数
                for(int j=2;j<=Math.sqrt(i);j++){
                    if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
                        isFlag=false;//标识设为false
                        break;//优化1 遇到了能除尽的,就退出里边的循环:只对本身非质数的自然数有效
                    }
                }
                if(isFlag==true){//如果为true,说明都不能除尽
                    //System.out.println(i);
                    count++;
                }
                //重置isFlag
                isFlag=true;
            }
            long end=System.currentTimeMillis();
            System.out.println("所花费的时间为:"+(end-start)+"s");
    
        } 
    }

    实现方式二:(运用到了continue关键字)

    class ex{
    	public static void main(String[] args){
    		boolean isFlag=true;//定义一个标识
    		int count=0;
    		//获取当前时间距离1970-01-01 00:00:00的毫秒数
    		long start=System.currentTimeMillis();
    		label:for(int i=2;i<=100000;i++){//遍历10000以内的自然数
    			for(int j=2;j<=Math.sqrt(i);j++){
    				if(i%j==0){//能除尽——但这里不能用break,因为会退出当前循环
    					continue label;//优化2 遇到了能除尽的,就退出里边的循环:只对本身非质数的自然数有效
    				}
    			}
    				count++;//能执行到此步骤的都是质数
    		}
    		long end=System.currentTimeMillis();
    		System.out.println("质数的个数为:"+count);
    		System.out.println("所花费的时间为:"+(end-start)+"s");
    
    	} 
    }

     运行截图:

  • 相关阅读:
    获取汉字和字母的长度
    JavaScript 获取对象中第一个属性
    JS函数的length属性
    原型模式 -- JavaScript语言的灵魂
    建造者模式
    阻止form元素内的input标签回车提交表单
    工厂方法模式(安全的工厂方法)
    微信自研生产级paxos类库PhxPaxos实现原理介绍
    图解分布式一致性协议Paxos
    Paxos协议超级详细解释+简单实例
  • 原文地址:https://www.cnblogs.com/SpringChuXin/p/13440756.html
Copyright © 2020-2023  润新知