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