一.分支結構
1.if語句
if語句會與其后的第一條語句或代碼塊結合,且只有當判斷條件為true時才執(zhí)行語句或代碼塊。例如乳怎,自行車只有在運動的時候才可以減速芹橡,就像下面這樣:
void applyBrakes() {
if (isMoving){
currentSpeed--;
}
}
如果判斷條件為false,也就是自行車處于靜止狀態(tài)時有勾,將會跳過if語句后面的語句或代碼塊疹启。
如果if語句后只有一條需要執(zhí)行的語句,既可以使用大括號蔼卡,也可以不使用皮仁。不過按照慣例來說,任何時候都應該使用大括號菲宴,這樣可以避免有時因為忘記大括號而帶來的一些邏輯錯誤贷祈。for、while語句也是同理喝峦。
2.if-else語句
if語句只是指出了當判斷條件為true時需要執(zhí)行的語句势誊。使用if-else語句可以同時指定當判斷條件為true和false時應該執(zhí)行的語句。當自行車沒有處于運動狀態(tài)時谣蠢,可以簡單地輸出一條信息:
void applyBrakes() {
if (isMoving){
currentSpeed--;
} else {
System.out.println("The bicycle has already stopped!");
}
}
下面的程序根據(jù)分數(shù)來給出對應的等級:
class IfElseDemo {
public static void main(String[] args) {
int testscore = 76;
char grade;
if (testscore >= 90) {
grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("Grade = " + grade);
}
}
該程序最終的輸出為:
Grade = C
雖然testscore滿足很多條件粟耻,例如76>=70和76>=60等查近,但是,一旦滿足了一個條件挤忙,就會執(zhí)行對應的語句(grade = 'C';)并跳過剩余條件霜威。
3.switch語句
與if和if-else語句不同,switch語句可以有許多可能的執(zhí)行路徑册烈。例如下面的代碼將會使用switch語句根據(jù)month的值來輸出對應的月份:
public class SwitchDemo1 {
public static void main(String[] args) {
int month = 8;
String monthString;
switch (month) {
case 1: monthString = "January";break;
case 2: monthString = "February";break;
case 3: monthString = "March";break;
case 4: monthString = "April";break;
case 5: monthString = "May";break;
case 6: monthString = "June";break;
case 7: monthString = "July";break;
case 8: monthString = "August";break;
case 9: monthString = "September";break;
case 10: monthString = "October";break;
case 11: monthString = "November";break;
case 12: monthString = "December";break;
default: monthString = "Invalid month";break;
}
System.out.println(monthString);
}
}
該程序將會輸出:
August
switch語句的判斷條件是一個變量或表達式戈泼,它的類型可以是byte,short赏僧,char和int以及它們的包裝類(Character大猛,Byte,Short淀零,和Integer)挽绩,還可以是字符串和枚舉類型,case后面是這些類型的字面量驾中。
default語句用來處理當所有case標簽都不滿足的情況唉堪。break語句用來退出switch塊。如果一個case語句最后沒有使用break肩民,將會執(zhí)行下一個case的語句而不進行判斷巨坊,直到遇到break或switch塊結束。下面的例子根據(jù)month的值來輸出季節(jié):
public class SwitchDemo2 {
public static void main(String[] args) {
int month = 5;
switch(month) {
case 2:
case 3:
case 4: System.out.println("Spring");
case 5:
case 6:
case 7: System.out.println("Summer");
case 8:
case 9:
case 10: System.out.println("Autumn");
case 11:
case 12:
case 1: System.out.println("Winter");
}
}
}
該程序將會輸出:
Summer
其實無論month的值是5此改,6還是7趾撵,都會輸出Summer,因為case 5和case 6都沒有break語句共啃,即使匹配到了它們占调,程序也還是會進入case 7。
相信有很多學習java的道友移剪,海量知識分究珊,絕對是Java干貨,等各位的到來纵苛,我們一同從入門到精通吧剿涮!
Java學習交流:【47】974【9726】
二.循環(huán)結構
1.while語句和do-while語句
當判斷條件為true時,while語句將會重復執(zhí)行代碼塊中的內(nèi)容攻人,直到判斷條件為false取试。它的語法如下:
while (expression) {
statement(s)
}
下面的程序使用while循環(huán)打印出1~10:
class WhileDemo {
public static void main(String[] args){
int count = 1;
while (count < 11) {
System.out.println("Count is: " + count);
count++;
}
}
}
可以使用以下while語句實現(xiàn)無限循環(huán):
while (true){
// your code goes here
}
Java也支持do-while循環(huán),語法如下:
do {
statement(s)
} while (expression);
do-while循環(huán)和while循環(huán)之間的區(qū)別在于它在執(zhí)行完代碼塊中的語句之后進行判斷怀吻,而不是在循環(huán)開始前進行判斷瞬浓。也就是說,循環(huán)體中的代碼至少會執(zhí)行一次蓬坡。下面的程序使用do-while循環(huán)打印出1~10:
class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println("Count is: " + count);
count++;
} while (count < 11);
}
}
2.for循環(huán)
for循環(huán)可以控制循環(huán)的次數(shù)猿棉,它的的語法如下:
for (initialization; condition; increment) {
statement(s)
}
使用for循環(huán)時磅叛,需要注意:
initialization通常用來更初始化計數(shù)器,它只在循環(huán)開始前執(zhí)行一次萨赁。
condition時每一次循環(huán)前要判斷的條件弊琴,一旦條件不滿足,循環(huán)將結束杖爽。
increment用來對計數(shù)器進行更新敲董,它在每次循環(huán)結束后執(zhí)行。
下面的程序使用for循環(huán)打印出1~10:
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
}
注意變量i的聲明位置掂林。由于它是在初始化表達式中聲明的臣缀,因此它的范圍和生存周期僅在循環(huán)內(nèi)有效坝橡。一旦循環(huán)結束泻帮,變量i將無法訪問。
for循環(huán)的三個表達式都是可選的计寇,任意一個都可以為空锣杂。下面的語句將會創(chuàng)建一個無限循環(huán):
for ( ; ; ) {
// your code goes here
}
for循環(huán)還有一種用于迭代數(shù)組和集合的格式,稱為增強型for循環(huán)番宁。下面的程序使用增強型for循環(huán)來遍歷數(shù)組:
class EnhancedForDemo {
public static void main(String [] args){
int [] numbers =
{1,2,3,4,5,6,7,8,9,10};
for(int item:numbers){
System.out.println(“Count is:”+ item);
}
}
}
三.中斷控制流
1.break
break語句用于結束當前控制結構元莫,它有兩種形式,帶標簽的break語句和不帶標簽的break語句蝶押。在之前的switch樣例中已經(jīng)見到了不帶標簽的break語句踱蠢。還可以使用不帶標簽的break語句終止for,while或do-while循環(huán)棋电,如下面的BreakDemo程序:
class BreakDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };
int searchfor = 12;
int i;
boolean foundIt = false;
for (i = 0; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at index " + i);
} else {
System.out.println(searchfor + " not in the array");
}
}
}
該程序的輸出是:
Found 12 at index 4
不帶標簽的break語句跳出最內(nèi)層的循環(huán)或分支結構茎截,但帶標簽的break語句可以跳出標簽對應的那個結構。例如:
class BreakWithLabelDemo {
public static void main(String[] args) {
int[][] arrayOfInts = { { 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 } };
int searchfor = 12;
int i;
int j = 0;
boolean foundIt = false;
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at " + i + ", " + j);
} else {
System.out.println(searchfor + " not in the array");
}
}
}
當找到12時赶盔,程序將跳出search對應的for循環(huán)企锌。該程序的輸出是:
Found 12 at 1, 0
2.continue
continue跳到循環(huán)體的末尾,并執(zhí)行循環(huán)條件的判斷于未。下面的程序統(tǒng)計字母p的出現(xiàn)次數(shù)撕攒。如果當前字符不是p,則continue語句將跳過循環(huán)的其余部分并繼續(xù)執(zhí)行下一次循環(huán)烘浦。如果是 “p”抖坪,計數(shù)器會加1:
class ContinueDemo {
public static void main(String[] args) {
String searchMe = "peter piper picked a peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
if (searchMe.charAt(i) != 'p')
continue;
numPs++;
}
System.out.println("Found " + numPs + " p in the string.");
}
}
該程序的輸出是:
Found 9 p in the string.
和break一樣,continue也分為帶標簽的continue語句和不帶標簽的continue語句闷叉。帶標簽的continue語句將會結束當前的循環(huán)并開始下一次標簽對應的循環(huán)柳击。下面的程序使用帶標簽的continue和break語句來判斷一個字符串是否包含另一個字符串:
class ContinueWithLabelDemo {
public static void main(String[] args) {
String searchMe = "Look for a substring in me";
String substring = "sub";
boolean foundIt = false;
int max = searchMe.length() - substring.length();
test:
for (int i = 0; i <= max; i++) {
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe.charAt(j++) != substring.charAt(k++)) {
continue test;
}
}
foundIt = true;
break test;
}
System.out.println(foundIt ? "Found it" : "Didn't find it");
}
}
該程序的輸出是:
Found it
3.return
最后一個可以中斷控制流的語句是return語句,它可以從當前的方法中退出片习。return語句有兩種形式捌肴,使用返回值和不使用返回值蹬叭。如果要返回一個值,只需要將值或表達式放在return關鍵字后面状知。例如:
return ++count;
返回值的數(shù)據(jù)類型必須與方法聲明的返回值的類型匹配秽五。使用沒有返回值的return語句時,方法的返回值類型必須聲明為void饥悴,例如:
return;