java語言和C 語言相似,主要包括三種基本的控制流結構:java
1. 程序順序執行程序員
2. 程序的判斷結構編程
3. 程序的循環結構學習
若是把前面所學習的關鍵字理解成java語言的詞彙量的話,那麼結構化程序設計就是java語言所謂的」語法」了,這種跟計算機溝通的語言很簡單。測試
前面章節中咱們提過,java是以分號(;)做爲一個語句的結束的,與換行符沒有關係,任何一句表達式後面都必須帶有一個分號(;),這樣纔算正常結束,不然會報語法錯誤,例如:網站
int a=100; System.out.println(a);
以上都成爲單條語句,而把多個語句放到一個形如 「{...代碼...}」這樣代碼塊中,成爲語句塊,就是以左大括號「{」開始,以右大括號結束「}」的代碼咱們成爲語句塊,左右大括號必須成對出現,語句塊能夠互相嵌套。語句塊能夠做爲一個總體,相似把多個語句塊組合成爲一個語句塊。咱們在代碼中能夠任意使用包含多個語句成爲一段語句塊,有時也稱爲程序塊。可是在一些狀況下,大括號是不可缺乏的,好比定義一個類的時候,或者定義一個普通方法時,後面就必需要使用大括號,包住一段語句塊。例如如下的:spa
public class Abc {//這個是必須的 public static void main(String[] args) {//這個是必須的 float a = 346.756565f; //這個大括號能夠刪除 { int b = (int) a + 10; // 將 a 轉換爲整型 System.out.println(b); } } }
下面咱們講到的條件判斷和循環判斷的語法是會大量使用到程序塊。設計
判斷邏輯是咱們生活中最多見的邏輯判斷,計算機來執行跟人類思惟也是極爲相似的:若是[條件成立]就怎樣作,不然就那樣作。能夠這麼說,計算機最擅長的就是判斷true/false了。code
1、if-else 語句對象
if語句是最多見的判斷語句,經過對條件(conditional)的判斷以爲程序的走向。其基本格式以下:
if(條件表達式)
語句1
else
語句2
在執行該判斷語句前,都是先執行了條件表達式的語句,條件表達式的返回結果必須是布爾值(boolean),根據條件表達式的返回,若是是true,那麼就執行語句1的內容,若是是false就執行else後面的語句2。以下面這個例子:
int i=1; if(i>10) System.out.println(i+"大於10"); else System.out.println(i+"不大於10");
先定義了整型i並賦值1,而後在執行if裏面的條件判斷式i是否大於10,返回的結果是false,因此執行的是else後面的語句。
在上面的格式中, else是可選部分,因此最簡單的條件判斷式以下:
if(條件表達式)
語句1
以下面這個例子:
int i=1; if(i>10) System.out.println(i+"大於10");
因爲條件判斷是false,因此這個程序不會輸出任何內容。也正是由於else是可選部分,在嵌套使用的時候就會出現理解上的問題,有時候咱們面對下面這個例子的時候就會感受不清晰了
int i = 1; if (i > 10) if (i < 5) System.out.println(i + "小於5"); else System.out.println(i + "不大於10");
else是對應那一個if呢?java是與最近一個if配對的。程序員在寫代碼時,適當的縮進代碼也能夠提升代碼的可讀性,固然咱們有更好的解決辦法。
if和else後面能夠跟着語句,固然也能夠跟着語句塊,其格式以下:
if(條件表達式){
語句塊1
}else{
語句塊2
}
建議你們在寫if語句時,就算後面只有一個語句,也可使用大括號包住,造成語句塊,這樣能夠提升程序的可讀性,如上面的例子,能夠修改爲爲這樣:
if (i > 10) { if (i < 5) { System.out.println(i + "小於5"); } else { System.out.println(i + "不大於10"); } }
2、else-if 語句
有時候條件判斷不止兩個,可能就須要使用else-if語句了,其語法格式以下:
if(條件表達式)
語句1
else if(條件表達式)
語句2
else if(條件表達式)
語句3
else if(條件表達式)
語句4
...
else
語句
這樣的語句在咱們之後的編程中會常常用到,判斷的過程是從上往下的判斷條件表達式,若是第一個返回的是false就會判斷第二個,依次類推,可是若是其中一個返回了true,那麼就會執行後面的語句,而後整個else-if語句就會退出,後面若是還有else-if語句也不會在去判斷執行的了。咱們經常也會在最後面添加一個else語句,固然這也是可選的,這樣的效果就是若是上面的全部的if判斷都是false,那麼就會執行else後面的語句。像上面的if-else同樣,後面也是能夠跟着語句塊的,爲了加強程序的可讀性,咱們後面也經常會使用語句塊。格式以下:
if(條件1){
條件1==true時執行的邏輯
}else if(條件2){
條件2==true時執行的邏輯
}else if(條件n){
條件n==true時執行的邏輯
}else{
以上條件均不知足而執行的默認的邏輯
}
下面咱們具幾個實現,好比咱們要判斷用戶年齡小於16歲時不容許登錄遊戲網站,那麼咱們可使用如下代碼:
int uage = 17; if (uage < 18) { System.out.println("Sorry,請關注學業!"); } else { System.out.println("歡迎登錄!"); }
int result=85;//成績 if(result>90){ System.out.println("優秀"); }else if(result>80){ System.out.println("良好"); }else if(result>60){ System.out.println("合格"); }else{ System.out.println("不合格"); }
if判斷也能夠嵌套使用,也就是在語句塊裏也能夠包含一個if判斷表達式,以下面這個例子。其中Scanner是得到用戶輸入對象,請看下面這個例子:
import java.util.Scanner; public class Tt { public static void main(String[] args) { int num0;//第一個數 int num1;//第二個數 int type;//計算類型 System.out.print("*"請輸入num0: "*"); Scanner scr = new Scanner(System.in); num0 = scr.nextInt();//程序會在此等待用戶的輸入 System.out.print("*"請輸入num1: "*"); scr = new Scanner(System.in); num1 = scr.nextInt(); System.out.print("*"請輸入計算類型(0表示加 ; 1表示減 ; 2表示乘 ; 3表示除): "*"); scr = new Scanner(System.in); type = scr.nextInt(); if (type == 0) { System.out.println(num0 + "*"+"*" + num1 + "*" ="*" + (num0 + num1)); } else if (type == 1) { System.out.println(num0 + "*"-"*" + num1 + "*" ="*" + (num0 - num1)); } else if (type == 2) { System.out.println(num0 + "*"*"*" + num1 + "*" ="*" + (num0 * num1)); } else if (type == 3) { // 除法,使用嵌套的if語句斷定除數不能爲0 if (num1 == 0) { System.out.println("*"除數不能爲0"*"); } else { System.out.println(num0+"*"/"*"num1+ "*" ="*" + (num0 / num1)); } } else { // 非法輸入 System.out.println("*"您的輸入有誤!計算類型只能是[0,1,2,3]"*"); } } }
在這個程序中用了Scnner得到用戶的輸入,程序運行到scr.nextInt()的時候會停下來,等待用戶的輸入,用戶輸入後按回車程序纔會繼續往下運行,在程序中咱們對除法的判斷又嵌套了一個除數不能爲0的判斷。
3、switch選擇語句
switch語句是另外一種判斷語句的寫法,這種語句在選擇時是對case子句的值進行相等測試,其功能性其實和if判斷語句同樣,僅僅只是書寫的方式不一樣,二者之間能夠互通,語法上面沒有if語句簡介。其具體的語法格式以下:
switch(被判斷的變量)
{
case 條件1:
執行條件1的邏輯
break;
case 條件2:
執行條件1的邏輯
break;
case n:
執行條件n的邏輯
break;
default:
以上條件均不知足而執行的默認的邏輯
}
switch後面的只是被判斷的變量,當與case後面的條件相等是,那麼case後面的語句就會執行,最後面的default是可選項,可根據你的業務邏輯須要決定是否添加,功能相似else語句,就是上面全部的case條件都不知足時就會執行default後面的語句。
值得注意的是,在JDK 7之前參加被判斷的變量的類型只能夠是int, byte, char, short等數據類型,可是在JDK 7之後,被判斷的變量的類型被加強支持對字符串String的判斷。若是你仍是使用JDK 6就要特別注意這一點了。
通常來講,switch與case成功匹配,還會繼續順序執行之後全部的程序代碼,所以通常都要在判斷成功後面添加break語句跳出判斷語句塊。有關break關鍵字的詳細說明咱們會在後面的章節中說明。
看看這個例子:已知變量int month=1,使用switch判斷語句,若是month等於1就輸出"一月",等於2就輸出"二月",如此類推。實現代碼以下:
int month=4; switch(month){ case 1: System.out.println("一月"); break; case 2: System.out.println("二月"); break; case 3: System.out.println("三月"); break; case 4: System.out.println("四月"); break; //...中間的5~12用戶本身補充。 default: System.out.println("month只能是1~12"); }