1. 程式人生 > 實用技巧 >java-迴圈結構的例題

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

	} 
}

 執行截圖: