Java基礎之流程控制

聲明:本筆記具體可參考 速學堂學習網站html

3 流程控制

  • 「順序結構」:表明」先執行a,再執行b「的邏輯
  • 「選擇結構」:表明」若是……,則……「的邏輯
  • 「循環結構」:表明」若是……,則再繼續……「的邏輯 語錄:上述三種流程控制語句就能表示全部的事情!

<br>java

選擇結構

  • if單選擇結構dom

    • 示例:
    import java.util.Scanner;
    	public class Test1{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println("請輸入能被5整出的數:")
            int num = scanner.nextInt();
            if(num%5!=0){//當if語句不寫{},只能做用在後面的第一條語句;建議任什麼時候候都寫上{},即便裏面只有一句話
                System.out.println("您的輸入有誤!");
            }
        }
    	}
  • if-else雙選擇結構函數

    • 示例
    import java.util.Scanner;
    	public class Test2{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println("請輸入一個整數:")
            int num = scanner.nextInt();
            if(num%2!=0){
                System.out.println("該數爲奇數");
            }else{
                System.out.println("該數爲偶數");
            }
        }
    	}

    補:能夠用if-else替代條件運算符學習

    • 示例
    import java.util.Scanner;
    	public class Test3{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println("請輸入一個整數:")
            int num = scanner.nextInt();
            System.out.println(num%2!=0?"該數爲奇數":"該數爲偶數");
        }
    	}
  • if-else if-else多選擇結構網站

    • 示例
    public class Test4{
        public static void main(String[] args){
            int i = (int)(100*Math.random())+1;//該方式能夠生成隨機數
            System.out.print("分數爲"+i);
            if(i>=85){System.out.print(" 評級爲A");}
            else if(i>=70){System.out.print(" 評級爲B");}
            else if(i>=60){System.out.print(" 評級爲C");}
            else{System.out.print(" 評級爲D");}
        }
    	}
  • switch結構spa

    • 示例
    public class Test5{
        public static void main(String[] args){
            int i = (int)(100*Math.random())+1;//該方式能夠生成隨機數
            System.out.print("分數爲"+i);
            i = i/10;
            switch(i){
                case 9:
                case 8:
                	System.out.println(" 評級爲A");break;
                	//假定大於等於80評級爲A
                case 7:
                	System.out.println(" 評級爲B");break;
                case 6:
                	System.out.println(" 評級爲C");break;
                default:
                	System.out.println(" 評級爲D");
            }
        }
    	}

<br>code

循環結構

  • while循環htm

    • 示例
    public class Test6{
        public static void main(String[] args){
            int i = 0;
            int sum = 0;
            //1+2+3+...+100=?
            while(i<=100){
                sum += i;//至關於sum=sum+i
                i++;
            }
            System.out.println("Sum="+sum);
        }
    	}
  • do-while循環對象

    • 示例
    public class Test7{
        public static void main(String[] args){
            int i = 0;
            int sum = 0;
            //1+2+3+...+100=?
            do{
                sum += i;//至關於sum=sum+i
                i++;
            }while(i<=100);//此處的;不能省略
            System.out.println("Sum="+sum);
        }
    	}

    補:while語句和do-while語句區別在於do-while語句老是保證循環體至少會被執行一次,而while語句可能不執行

  • for循環

    • 示例
    public class Test8{
        public static void main(String[] args){
            int sum = 0;
            //1+2+3+...+100=?
            for(int i = 0;i<=100;i++){
                sum += i;
            }
            System.out.println("Sum="+sum);
        }
    	}

    補:能夠在for循環中嵌入逗號運算符

    • 示例
    public class Test9{
        public static void main(String[] args){
            for(int i = 1, j = i + 10;i < 5;i++, j = i *2){
                System.out.println("i="+i+" j="+j);
            }
        }
    	}

    提示: 編譯器將while(true)與for(;;)看做同一回事,都指的是無限循環 在for語句的初始化部分聲明的變量,如for(int i = 0;...),其做用域爲整個for循環體,不能在循環外部使用該變量。

<br>

嵌套循環

在一個循環語句內部再嵌套一個或多個循環,稱爲嵌套循環。while、do-while與for循環能夠任意嵌套多層

示例:

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

<br>

break語句

在任何循環語句的主體部分,都可用break控制循環的流程。break用於強行退出循環,不執行循環中剩餘的語句

示例:

public class Test11{
    public static void main(String[] args){
        int total = 0;//定義計數器
        System.out.println("Begin");
        while(true){
            total++;
            int i = (int)Math.round(100*Math.random());
            if(i==88){
                break;
            }
        }
        System.out.println("Game over, used "+total+"times.");
    }
}

<br>

continue語句

continue語句用在循環體中,用於終止某次循環過程,即跳過循環體中還沒有執行的語句,接着進行下一次是否執行循環的斷定

注意 continue用在while,do-while中,continue語句馬上跳到循環首部,越過了當前循環的其他部分; continue用在for循環中,跳到for循環的迭代因子部分

示例:

public class Test12{
    public static void main(String[] args){
        int count = 0;//定義計數器
        for(int i = 100;i<150;i++){
            //若是是3的倍數,則跳過本次循環,繼續進行下一次循環
            if(i%3==0){
                continue;
            }
            //不然(不是3的倍數),輸出該數
            System.out.print(i+"、");
            count++;
            //根據計數器判斷每行是否已經輸出5個數
            if(count%5==0){
                System.out.println();
            }
        }
    }
}

補: 帶標籤的break和continue,對於Java來講只用在循環語句以前,用於在其中嵌套另外一個循環,因爲break和continue關鍵字一般只中斷當前循環,但若隨同標籤使用,它們就會中斷到存在標籤的地方

示例:

//控制嵌套循環跳轉打印101-150之間全部的質數
public class Test13{
    public static void main(String[] args){
        outer:for(int i=101;i<150;i++){
            for(int j=2;j<i/2;j++){
                if(i%j==0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }
}

<br>

語句塊

語句塊,肯定了局部變量的做用域,其中的程序代碼,做爲一個總體,是要被一塊兒執行的。塊能夠被嵌套在另外一個塊中,但不能在兩個嵌套的塊內聲明同名變量;語句塊能夠使用外部的變量,而外部不能使用語句中定義的變量,由於語句塊中定義的變量做用域只限於語句塊

示例:

public class Test14{
    public static void main(String[] args){
        int n;
        int a;
        {
            int k;
            int n;//編譯錯誤,不能重複定義變量n
        }//變量k的做用域到此爲止
    }
}

<br>

方法

方法就是一段用來完成特定功能的代碼片斷,相似於其餘語言的函數

示例:

public class Test15{
    //main方法:程序的入口
    public static void main(String[] args){
        int num1 = 10;
        int num2 = 20;
        //調用求和方法,將num1與num2的值傳給add方法中的n1與n2,求完和後將結果返回,用sum接收結果
        int sum = add(num1,num2);
        System.out.println("sum="+sum);//輸出sum=30
        //調用打印的方法,該方法沒有返回值
        print();
    }
    //求和方法
    public static int add(int n1,int n2){
        int sum = n1 + n2;
        return sum;//使用return返回計算的結果
    }
    //打印的方法,沒有返回值,用void指定
    public static void print(){
        System.out.println("這是print()");
    }
}

注意: 1.實參的數目、數據類型和次序必須和所調用的方法聲明形式參數列表匹配 2.return語句終止方法的運行並指定要返回的數據 3.Java中進行方法調用中傳遞參數時,遵循值傳遞的原則(傳遞的都是數據的副本) 4.基本類型傳遞的是該數據值的copy值 5.引用類型傳遞的是該對象引用的copy值,但指向的是同一個對象

<br>

方法重載

  • 方法重載是指定義多個方法名相同,但參數不一樣的方法;調用時,會根據不一樣的參數自動匹配對應的方法;重載方法實際是徹底不一樣的方法,只是名稱相同而已

  • 構成方法重載的條件: 1.不一樣的含義:形參類型、形參個數、形參順序不一樣 2.只有返回值不一樣不構成方法的重載 3.只有形參的名稱不一樣,不構成方法重載

  • 示例

public class Test16{
    public static void main(String[] args){
        System.out.println(add(3,5));//8
        System.out.println(add(3,4,10));//18
        System.out.println(add(3.0,5));//8.0
        System.out.println(add(3,5.0));//8.0
    }
    //求和方法
    public static int add(int n1,int n2){
        return n1+n2;
    }
    //方法名相同,參數個數不一樣,構成重載
    public static int add(int n1,int n2,int n3){
        return n1+n2+n3;
    }
    //方法名相同,參數類型不一樣,構成重載
    public static double add(double n1,double n2){
        return n1+n2;
    }
    //方法名相同,參數順序不一樣,構成重載
    public static double add(int n1,double n2){
        return n1+n2;
    }
    //編譯錯誤:只有返回值不一樣,不構成方法重載
    public static double add(int n1,int n2){
        return n1+n2;//返回值double類型
    }
    //編譯錯誤:只有參數名稱不一樣,不構成方法重載
    public static int add(int n2,int n1){
        return n1+n2;
    }
}

<br>

遞歸結構

  • 遞歸是一種常見的解決問題的方法,其基本思想是「本身調用本身」,一個使用遞歸結構的方法將會直接或間接的調用本身

  • 示例:使用遞歸求n!

public class Test17{
    public static void main(String[] args){
        long d1 = System.currentTimeMillis();//獲取當前時間
        System.out.printf("%d階乘的結果是:%n",10,factorial(10));
        long d2 = System.currentTimeMillis();//獲取運行上一條命令後的當前時間
        System.out.printf("遞歸費時:%s%n",d2-d1);
    }
    //求階乘的方法
    static long factorial(int n){
        if(n==1){//遞歸頭
            return 1
        }else{//遞歸體
            return n*factorial(n-1);//n!=n*(n-1)
        }
    }
}
  • 遞歸缺陷

    簡單的程序是遞歸的優勢,可是遞歸調用會佔用大量的系統堆棧,內存消耗多,在遞歸調用層次多時速度比要循環慢的多,因此在使用遞歸時要慎重

  • 示例:使用循環求n!

public class Test18{
    public static void main(String[] args){
        long d3 = System.currentTimeMillis();
        int a = 10;
        int result = 1;
        while(a>1){
            result *= a*(a-1);
            a -= 2;
        }
        long d4 = System.currentTimeMillis();
        System.out.println(result);
        System.out.println("普通循環費時:%s%n",d4-d3);
    }
}

<br>

未完,待續 ~

相關文章
相關標籤/搜索