第4章 流程控制
4.1.1 if-else語句語法
public class IfElse {
public static void main(Stringargs[]) {
boolean bl = true;
if (bl)
System.out.println("true");
else
System.out.println("false");
}
}
如果向上面這樣只有兩個分支,且有返回值的情況。則有一種更簡潔的寫法:bl?true:false
如果在方法中,直接returnbl。消除代碼冗餘。
4.1.2 switch語句語法
switch(exp){ //表達式exp的返回值必須是下述幾種類型之一:int, byte, char, short;
case const1: //case子句中的值constant必須是常量,且所有case子句中的值應是不同的;
statement1;
break;
case const2:
statement2;
break;
… …
case constN:
statementN;
break;
[default: // default子句是可選的,default不一定被執行到。但程序應該有個最終出口。
statement_dafault;
break;]
}
break語句用來在執行完一個case分支後使程序跳出switch語句塊,即終止switch語句的執行(在一些特殊情況下,多個不同的case值要執行一組相同的操作,這時可以不用break)。
規範:每種情況最好都有break;
default最好有。
案例分析:
int i = 2;
switch (i) {
default:
System.out.println("default");
case 1:
System.out.println("111");
break;
case 2:
System.out.println("222");
break;
i=2時輸出222
i=3時則輸出default
111
上述案例的default語句沒有break,所有會繼續運行下面的程序並且不用匹配case,直到遇到break而終止。
如果沒有合適的選項,則認爲default是唯一的出口,然後直到遇到第一個break跳出爲止。
4.1.3 while語句
while (條件判斷) {
執行語句
}
“條件判斷”表示任何一個布爾表達式。當“條件判斷”爲true時,進入while,否則退出while。
4.1.4 do-while語句
do{
執行語句
} while (條件判斷); //注意用分號結尾!
首先執行一次,再進行條件判斷;
沒有循環體的while和do-while語句示例:
while(i==j){}
while(i==j);
do;while(i==j);
4.1.6for語句
for(初始化表達式;條件表達式;操作表達式)
{
執行語句
}
當執行語句只有一條時,大括號可以省略;
可以這麼寫:for( ; ; ) ,相當於一個無限循環(dead loop);
【for循環的趣味應用】編寫打印下列圖形的程序:
(1) (2) (3)
# * * * * * * * $
# # * * * * * $ $ $
# # # * * * $ $ $ $ $
# # # # * $ $ $
$
[解答]:
public class Test_17_1 {
public static voidmain(String[] args) {
int i, j;
for (i = 1; i<= 4; i++) {
for (j =1; j <= i; j++) {
System.out.print("#");
}
System.out.println();
}
}
}
public class Test_17_2 {
public static voidmain(String[] args) {
int i, j, k;
for (i = 0; i< 4; i++) {
for (k =0; k < i; k++) {
System.out.print(" ");
}
for (j =0; j <= 6 - 2 * i; j++)
System.out.print("*");
System.out.println();
}
}
}
public class Test_17_2 {
public static void main(String[]args) {
int i = 0, blank, j,star, input = 5;// input是輸入的行數
String s = "";
for (i = 0; i <input; i++) {
blank =Math.abs(i - input / 2);
for (j = 1; j <=blank; j++)
s += " ";
star =input - 2 * blank;
for (j = 1; j <=star; j++)
s += "$";
s += "\n";
}
System.out.print(s);
}
}
2) 使用for循環打印出99乘法表。最終的輸出結果如下:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
【參考代碼】
public class MultiTable {
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+"\t");//"/t"是水平製表
}
System.out.println();
}
}
}
用30以內的隨機整數給一個數組賦值,要求賦值後數組中的每一個數都不能重複。
【參考源碼】
public class RandomArr {
public static void main(String[] args) {
int a[]=new int [10];
a[0]=(int) (Math.random()*30+1);
for (int i = 1; i < a.length; i++) {
a[i]=(int) (Math.random()*30+1);
for (int j = 0; j < i; j++) {
while(a[i]==a[j]) {
a[i]=(int) (Math.random()*30+1);
j=-1;
break;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"");
}
}
}
4.1.7 break語句
break語句用於終止某個語句塊的執行
{ ……
break;
……
}
4.1.8 continue語句
continue語句用來結束本次循環,跳過循環體中下面尚未執行的語句,接着進行終止條件的判斷,以決定是否繼續循環。
與break語句不同,continue語句是結束本次循環,並不結束整個循環。