我的Thinking in Java學習筆記(五)
來源:互聯網
上載者:User
流程式控制制
java中的流程式控制制語句有 if-else whlie do-whlie for switch-case 但是沒有提供goto,他在java中是保留字,不是關鍵字(以後可能會有哦~)
true和false
java中不支援用數字表示boolean值,如果你一定要使用,請先以運算式將他轉換為boolean值,例如if(a==0)
if-else
這個流程式控制制語句恐怕是我們最常用的了,其中else可有可無可以使用
if(boolean) if(boolean)
statement statement
else
或者 statement
其中statement可以是一個單獨的語句,也可以是好幾個語句組成的複合陳述式,當使用複合陳述式的時候一定要用大括弧括起,而單獨的語句,可適可不適
舉個使用的例子吧
public class test
{
public static void main(String args[])
{
int i=0;
if(i>=0)//這裡需要注意的是千萬不要加;號
{
System.out.println("i>=0");
}
else
{
System.out.println("i<0");
}
}
}
return
關鍵字return的作用:指明函數需要傳回的值,並且立即傳回。這裡需要知道2點,傳回值的類型的表達範圍要等於或者小於函數的傳回型別,例如,函數傳回值是int,你如果返回一個double的數值,編譯器就會抱錯,反之,則不會
public class test
{
public static double go()
{
if(1>0)
{
System.out.println("hello");
return 100l;//返回一個long類型的100
//!System.out.println("hello");注意在return的後面不可以再加任何語句,return就是一個程式塊的終結點
}
else
return 100f;//返回一個flout類型的100//注意使用了if-else分別來返回一個值的時候,切記在if和else後面都要加上return
}
public static void main(String args[])
{
System.out.println(go());
}
}
你還可以使用不加傳回值的return;來跳出函數,但是注意,如果你要使用這樣的方法,那麼函數的傳回值類型那裡一定要是void
迭代
while do-while for 這幾組關鍵字用來控制迴圈,他們有的時候也會被歸結在迭代語句中。
while
例子 while(boolean)
{
//......
}//持續執行內部代碼,直到讓boolean變成false為止
do-while
例子 do
//........
while(boolean)
//......
他和while的唯一差別是,do-while至少會被執行一次,哪怕一開始都不滿足true啟動並執行條件,至少執行一次的語句要放在do的裡面
for
for迴圈會執行如下幾個步驟 1、初始設定變數 2、進行條件判斷 3、每執行完一次,進行一次步進
例如for(int i=0;i<10;i++)會先初始化i,判斷i是否小於10,如果小於執行for迴圈體內的語句,並且把i的值加1,直到i大於10的時候,退出。其中的3步都可以為空白的,即for(;;),則他的意義和while是一樣的。
你還可以在for語句中定義多個變數,但是他們的類型一定要一樣,這種定義的方法式能且只能在for中使用
for(int i=0,j=1;i<10&&j!=11;i++,j++)
要注意,在for括弧裡面定義的變數,只能在for迴圈的表達控制式中使用和存活,而不是在迴圈體的大括弧內的!
break和continue
在迭代語句中,你可以使用break和continue來控制迴圈語句,他們的唯一區別就是,break會跳出迴圈,不去執行剩餘部分,而continue會停止當前的迭代,回到迴圈的啟示出,開始下一個迭代。
public class test
{
public static void main(String args[])
{
for(int i=0;i<100;i++)//2
{
if(i==88)
break;//這句話導致i的值永遠不會大於88,因為如果大於88的話,程式就會跳出,到1的哪個位置了
if(i%2!=0)
continue;//當i是個偶數的時候,程式才會向下執行,列印出i的值,如果不是偶數,則跳到2處,把i++再重新迴圈
System.out.println(i);
}//1
}
}
其實哪個i==88是個廢話,完全可以在for迴圈中就能控制,我只不過舉了個例子而已,呵呵
臭名朝著的"goto"
從第一個程式語言誕生的時候就有goto這個關鍵字,然而,由於大多數程式員的使用不當,而引發出來很多問題。這不是goto的問題,就想槍支一樣,好人用了就是武器,壞人用了就是兇器~嘿嘿~
java中沒有goto,但是有和goto功能類似的語句-----標記,可以執行類似跳躍功能,但不是真正的跳躍,而是一種中斷迭代語句的方式他可以和break、continue共用,共用的效果是可以中斷所有進行中的嵌套迴圈,直到label的所在處。標記其實就是個後面緊跟冒號的標示符,例如 thisislabel :。在java中唯一能放label的地方就是迭代語句開始之前,請不要在label和迭代語句之間加入任何內容。
使用規則
1、continue會跳躍到他所在的內層迴圈頂端,繼續執行
2、contine label會跳躍到label所在的位置,然後重新進入迴圈
3、break會跳離迴圈
4、break label會跳離label所在的位置
while 中使用label例子
public class test
{
public static void main(String args[])
{
int i=0;
oneLabel:
while(true)
{
System.out.println("this is while method");
while(true)
{
i++;
System.out.println(i);
if(i==1)
{
System.out.print(i);
System.out.println("continue");
continue;
}
if(i==3)
{
System.out.print(i);
System.out.println("continue oneLabel");
continue oneLabel;
}
if(i==5)
{
System.out.print(i);
System.out.println("break");
break;
}
if(i==7)
{
System.out.print(i);
System.out.println("break oneLabel");
break oneLabel;
}
}
}
}
}
for使用label例子
public class test
{
public static void main(String args[])
{
int i=0;
oneLabel:
while(true)
{
System.out.println("this is while method");
for(;i<8;i++)
{
System.out.println(i);
if(i==1)
{
System.out.print(i);
System.out.println("continue");
continue;
}
if(i==3)
{
System.out.print(i);
System.out.println("continue oneLabel");
i++;//continue oneLabel會跳出for迴圈,則沒有進行一次完整的迭代,所以累加不會發生,為了禰補,我們在這裡把i+1
continue oneLabel;
}
if(i==5)
{
System.out.print(i);
System.out.println("break");
i++;//break會跳出for迴圈,則沒有進行一次完整的迭代,所以累加不會發生,為了禰補,我們在這裡把i+1
break;
}
if(i==7)
{
System.out.print(i);
System.out.println("break oneLabel");
break oneLabel;
}
}
}
}
}
大家要記住!在java中唯一需要使用label的理由就是:在嵌套迴圈中想要讓break和continue越過一個以上的嵌套
switch
switch(i)
{
case 0:System.out.println("0");
break;
case 1:System.out.println("1");
break;
case 2:System.out.println("2");
break;
case 3:System.out.println("3");
break;
default:System.out.println("default");
}
switch是一種選擇語句,他會根據一個運算式產生的值,挑出一個合格來執行。每個case後面都會以一個break來結束,如果要是沒有break的話,他會找到合格語句後,繼續執行下面的句子,直到遇到break的時候才停止需要注意的地方,case後面的值不可以重複,如果沒有符合的,系統會自動執行default。還有,swtich只能判斷整數基礎資料型別 (Elementary Data Type) ,字串或者浮點數是不行的
習題解答
5、寫出一個程式,讓他在列印到47的時候停止(範圍100),利用關鍵字break,在試試return
public class test
{
public static void main(String args[])
{
for(int i=0;i<100;i++)
{
if(i<47)
System.out.println(i);
else
break;//return;
}
}
}
7、撰寫程式,產生24個隨機數,針對每個數值,使用if-else語句來區分是否大於、小於、等於下一個隨機數
import java.math.*;
class test
{
public static void main(String args[])
{
int num[]=new int[25];
for(int i=0;i<25;i++)
{
num[i]=(int)(Math.random()*100);
}
for(int i=0,j=1;i<25&&j<25;i++,j++)
{
System.out.println(j+" "+num[i]+" "+num[j]);
if(num[i]>num[j])
{
System.out.println(num[i]+">"+num[j]);
}
if(num[i]<num[j])
{
System.out.println(num[i]+"<"+num[j]);
}
if(num[i]==num[j])
{
System.out.println(num[i]+"=="+num[j]);
}
}
}
}
至於第8題,由於我們還沒有學習到事件的監聽,所以這個題做起來的意義不大
其他的題目也很簡單。有什麼不會的可以問我