1. 程式人生 > >java基礎控制語句、方法及遞迴

java基礎控制語句、方法及遞迴

1選擇結構

if單選擇結構

/**
 * 測試if語句
 * @author Memorial
 *
 */
public class Test {
public static void main(String[] args) {
	double d =Math.random();//返回[0,1)之間的隨機數
	System.out.println(d);
    System.out.println((int)(6*Math.random()+1));
    
    int h=(int)(6*Math.random()+1);
    if (h<=3) {
    	System.out.println("小");	
    }
    System.out.println("########################################");
    //通過擲三個骰子看看今天的手氣如何?
    int i = (int)(6 * Math.random()) + 1;//通過Math.random()產生隨機數
    int j = (int)(6 * Math.random()) + 1;
    int k = (int)(6 * Math.random()) + 1;
    int count = i + j + k;
    //如果三個骰子之和大於15,則手氣不錯
    if(count > 15) {
        System.out.println("今天手氣不錯");
    }
    //如果三個骰子之和在10到15之間,則手氣一般
    if(count >= 10 && count <= 15) { //錯誤寫法:10<=count<=15
        System.out.println("今天手氣很一般");
    }
    //如果三個骰子之和小於10,則手氣不怎麼樣
    if(count < 10) {
        System.out.println("今天手氣不怎麼樣");
    }
    System.out.println("得了" + count + "分");
}
    
}

if-else選擇結構

/**
 * 測試if-else語句
 * @author Memorial
 *
 */
public class Test2 {
public static void main(String[] args) {
	 //隨機產生一個[0.0, 4.0)區間的半徑,並根據半徑求圓的面積和周長
    double r = 4 * Math.random();
   //Math.pow(r, 2)求半徑r的平方
    double area = Math.PI * Math.pow(r, 2);
    double circle = 2 * Math.PI * r;
    System.out.println("半徑為: " + r);
    System.out.println("面積為: " + area);
    System.out.println("周長為: " + circle);
    //如果面積>=周長,則輸出"面積大於等於周長",否則,輸出周長大於面積
    if(area >= circle) {
        System.out.println("面積大於等於周長");
    } else {
        System.out.println("周長大於面積");
    }
}
}

swicth選擇結構

public class Test6 {
    public static void main(String[] args) {
        char c = 'a';
        int rand = (int) (26 * Math.random());
        char c2 = (char) (c + rand);
        System.out.print(c2 + ": ");
        switch (c2) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            System.out.println("母音");
            break;
        case 'y':
        case 'w':
            System.out.println("半母音");
            break;
        default:
            System.out.println("子音");
        }
    }
}

2.迴圈結構

while語句

public class Test7 {
    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 Test8 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            sum += i; // sum = sum + i
            i++;
        } while (i <= 100);//此處的;不能省略
        System.out.println("Sum= " + sum);
    }

for迴圈

public class Test10 {
    public static void main(String args[]) {
        int sum = 0;
        //1.求1-100之間的累加和
        for (int i = 0; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum= " + sum);
        //2.迴圈輸出9-1之間的數
        for(int i=9;i>0;i--){
            System.out.print(i+"、");
        }
        System.out.println();
        //3.輸出90-1之間能被3整除的數
        for(int i=90;i>0;i-=3){
            System.out.print(i+"、");
        }
        System.out.println();
    }
}

巢狀迴圈

public class Test15 {
    public static void main(String args[]) {
        for (int i = 1; i < 10; i++) { // i是一個乘數
            for (int j = 1; j <= i; j++) { // j是另一個乘數
                System.out.print(j + "*" + i + "=" + (i * j < 10 ? (" " + i * j) : i * j) + "  ");
            }
            System.out.println();
        }
    }
}

break和continue語句

/**
 * 測試break和continue
 * @author 86176
 *
 */
public class Test3 {
public static void main(String[] args) {
	int total=0;//定義計數器
	System.out.println("Begin");
	while(true) {
		total++;//每迴圈一次計數器加1
		int i=(int)Math.round(100*Math.random());
		System.out.println(i);
		//當i=99時,退出迴圈
		if(i==99) {
			break;
		}
	}
	//輸出迴圈的次數
	System.out.println("Game over,used "+total+"times.");
}
}

 

/**
 * 測試continue語句
 * @author Memorial
 *
 */
//把100~150之間不能被3整除的數輸出,並且每行輸出5個數
public class Test4 {
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++;//每輸出一個數,計數器加1
		if(count %5==0) {
			System.out.println();
		}
		
	}
}
}

帶標籤的break和continue語句

/**
 * 測試帶標籤break和continue
 * @author Memorial
 *
 */

//列印101-150之間的所有質數
public class Test5 {
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+" ");
	}
}
}

3.方法

/**
 * 測試方法的宣告以及呼叫
 * @author Memorial
 *
 */
public class Test6 {
/**main方法:程式的入口**/
public static void main(String[] args) {
	int i=1;
	int j=2;
	//呼叫求和方法:將i和j的值傳給add方法中的n1和n2
	//求和後將結果返回,用sum接受結果
	int sum=add(i,j);
	System.out.println("sum="+sum);//輸出sum值
	//呼叫列印的方法,該方法沒有返回值
	print();

}
private static int add(int n1, int n2) {
	// TODO Auto-generated method stub
	int sum=n1+n2;
	return sum;
}

private static void print() {
	// TODO Auto-generated method stub
System.out.println("CSDN部落格...");	
}
}

4.方法的過載

 過載的方法,實際是完全不同的方法,只是名稱相同而已!

      構成方法過載的條件:

      1.不同的含義:形參型別、形參個數、形參順序不同

      2.只有返回值不同不構成方法的過載

      3.只有形參的名稱不同,不構成方法的過載

/**
 * 測試方法的過載
 * @author Memorial
 *
 */
//過載方法,實際是完全不同的方法,只是名稱相同
//在形參型別、形參個數、形參順序不同的情況下構成過載
public class Test7 {
	public static void main(String[] args) {
        System.out.println(add(3, 5));// 8
        System.out.println(add(3, 5, 10));// 18
        System.out.println(add(3.0, 5));// 8.0
        System.out.println(add(3, 5.0));// 8.0
        // 我們已經見過的方法的過載
        System.out.println();// 0個引數
        System.out.println(1);// 引數是1個int
        System.out.println(3.0);// 引數是1個double
    }
    /** 求和的方法 */
    public static int add(int n1, int n2) {
        int sum = n1 + n2;
        return sum;
    }
    // 方法名相同,引數個數不同,構成過載
    public static int add(int n1, int n2, int n3) {
        int sum = n1 + n2 + n3;
        return sum;
    }
    // 方法名相同,引數型別不同,構成過載
    public static double add(double n1, int n2) {
        double sum = n1 + n2;
        return sum;
    }
    // 方法名相同,引數順序不同,構成過載
    public static double add(int n1, double n2) {
        double sum = n1 + n2;
        return sum;
    }
    //編譯錯誤:只有返回值不同,不構成方法的過載
    public static double add(int n1, int n2) {
        double sum = n1 + n2;
        return sum;
    }
    //編譯錯誤:只有引數名稱不同,不構成方法的過載
    public static int add(int n2, int n1) {
        double sum = n1 + n2;         
        return sum;
    }  
}

5.遞迴

遞迴結構包括兩個部分:

      1.定義遞迴頭。解答:什麼時候不呼叫自身方法。如果沒有頭,將陷入死迴圈,也就是遞迴的結束條件。

      2.遞迴體。解答:什麼時候需要呼叫自身方法。

/**
 * 測試遞迴
 * @author Memorial
 *
 */
public class Test8 {
public static void main(String[] args) {
	a();
}
static int count=0;
static void a() {
	System.out.println("a");
    count++;
    if(count<10) {
    	a();
    }
    else {
    	return;
    }
}
static void b() {
	System.out.println("b");
}
}
/**
 * 測試遞迴
 * @author 86176
 *
 */
//求階乘
public class Test9 {
public static void main(String[] args) {
	long d1=System.currentTimeMillis();//當前時間
	
	System.out.printf("%d階乘的結果:%s%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)!
	}
}
}

1.從結構化程式設計角度出發,程式有三種結構:順序結構、選擇結構和迴圈結構

  2.選擇結構

     (1)if單選擇結構 if-else雙選擇結構 if-else if-else多選擇結構

     (2)switch多選擇結構

  3.多選擇結構與switch的關係:當布林表示式是等值判斷的情況,可使用多重選擇結構或switch結構,如果布林表示式區間判斷的情況,則只能使用多重選擇結構

     (1) 迴圈結構

     (2)當型:while與for

     (3)直到型:do-while

  4.while與do-while的區別,在布林表示式的值為false時while的迴圈體一次也不執行,而do-while至少執行一次

  5.break可以在switch與迴圈結構中使用,而continue只能在迴圈結構中使用

  6.方法就是一段用來完成特定功能的程式碼片段,類似於其它語言的函式

  7.方法的過載是指一個類中可以定義多個方法名相同,但引數不同的方法。 呼叫時,會根據不同的引數自動匹配對應的方法

  8.任何能用遞迴解決的問題也能使用迭代解決。在要求高效能的情況下儘量避免使用遞迴,遞迴呼叫既花時間又耗記憶體。