第二節、流程控制和運算符
一、流程控制
程序控制語句:
(1) if else 語句
if (a>b){
a=0;
}else if(a>c){
a=1;
}else{
a=-1;
}
if(a!=b) a=b; // 當if 或else語句後僅有一條語句時,可以省略大括號
else a=c; // 但爲了清晰和防止出錯,一般都如第一個例子使用大括號
(2)switch
switch (expression) { // expression參數 必須爲 byte,short,int或char類型。
case value1: // value1—valueN必須是與expression兼容,且互不相等的常量
//do something here
break; //break語句是可選的。
case value2:
//do something here
//此處省略break語句
case value3:
//do something here
break;
default: //default爲可選,如果expression的值與value1-N不匹配則執行default語句。
a=0;
}
(3)while
int counter=0; //用來計數的變量
boolean condition=true;
while ( condition ) { //判斷condition是否爲true,如否則結束while循環。
counter++;
if(counter=10){
condition=false; // 當counter=10時,將condition設置爲false,
}
}
/** while循環的循環體可以爲空
* 因爲一個空語句(null statement,僅由一個分號組成的語句)在Java的語法上是合法的。
*/
package Examples;
class Demo {
public static void main(String[] args){
int a,b;
a=100;
b=200;
while(++a<--b); //判斷condition時,a先自加1,b自減1,然後再進行a和b的比較
//另外請注意最後必須用分號結束
System.out.println("Midpoint is " + a);
}
}
(4)do-while
int counter=0;
boolean condition=false;
do{ //執行do-while循環時,會先執行循環體再判斷condition
counter++;
if(condition){
System.out.println(“第 “+(counter+1)+”次!”);
}
}while( condition ); //注意這裏有分號
(5)for
//要注意for中循環初始化部分和反覆部分聲明的變量不能同for循環所在方法內的變量同名。例:
package Examples;
public class ForDemo{
public void forMethod(){
// int i=0; //當這個聲明語句沒有被註釋掉的話,那麼編譯時就會出現錯誤。
for( int i=0; i<10 ; i++){ // 括號中分別爲(初始化部分;條件判斷;反覆部分)
System.out.println("number:"+i);
}
for(int i=10,j=20;i<j;i++,j--){ //循環中初始和反覆部分可以聲明多個變量,
System.out.println("I is :"+i+" , J is :"+j);
}
}
public static void main(String[] args){
ForDemo fd=new ForDemo();
fd.forMethod();
}
}
(6)跳轉語句:
break: 1.終止一個語句序列;2.退出當前循環;3.類似goto的作用,如下例所示
LABEL: {
int a,b;
a=10;
b=2a;
for( int i=0;i<10;i++){
for(int j=0;i<10;j++){
if(i==5&&j==5) break LABEL; //使用break退出LABEL代碼塊
}
}
}
continue: 1.強迫一個循環提早反覆,即忽略循環體中continue語句後面的代碼,直接跳到condition處。
2.可以指定一個標籤來說明繼續哪個包圍的循環,如下例所示
package Examples;
public class ContinueDemo{
public static void main(String[] args){
String s;
OUTER: for( int i=1;i<10;i++){ // 由1到9
for(int j=1;j<10;j++){
if(j>i){
System.out.println(); //打印一個空行並換行
continue OUTER;
}
s=(i*j)>9?String.valueOf(i*j):(" "+String.valueOf((i*j)));
System.out.print(" "+i+"x"+j+"="+s);
}
}
}
}
編譯後輸出的是一個99乘法表。
return: return語句用來明確地從一個方法返回.
二、運算符
(1)算術運算符: 算術運算符不能用在boolean類型上,但可用在char類型,
+ - * / 加,減,乘,除 //整數除法運算中所有餘數都會被捨去
% 模運算 //模運算結果是整數除法的餘數
++ -- 遞增,遞減 //在前,則先自加(減)再運算,在後則相反
+= -= *= /= %= 加法賦值,減法賦值,乘法賦值,除法賦值,模運算賦值
//例:a+=10; 等同於a=a+10;a%=2 等同於a=a%2;
(2) 位運算符:
~ & | ^ 按位非(NOT),按位與(AND),按位或(OR),按位異或(XOR)
//非:每位取反; 與:兩位均1 則1;或:有1則1;異或:不同爲1。
>> >>> << 右移 ; 右移,左邊空出的位以0填充; 左移
//移位符號右邊數值指定移動位數 value>>num; -1右移的結果總是-1;
&= |= ^= 按位與賦值, 按位或賦值 , 按位異或賦值
>>= >>>= <<= 右移賦值; 右移賦值,左邊空出的位以0填充; 左移賦值
(3)關係運算符:
= = != > < >= <= 等於,不等於,大於,小於 ,大於等於, 小於等於
(4)布爾邏輯運算符:
& | ^ 邏輯與,邏輯或,異或
//無論符號左邊表達式值爲true或false都會對右邊表達式進行運算
&& || ! 短路與,短路或,邏輯反 //&&時,當符號左邊爲false,則不用求符號右邊表達式
//||時,如符號左邊爲true,則不用求符號右邊表達式
&= |= ^= 邏輯與賦值,邏輯或賦值,邏輯異或賦值
== != 相等,不等
? : 三元運算符(if-then-else)例 i=i>0? i : -1; //當i>0時i=i;反之i=-1;
(5)運算符優先級 :
高:
( ) [ ] .
++ -- ~ !
* / %
+ -
>> >>> <<
> >= < <=
= = !=
&
^
|
&&
| |
? :
= op=
低:
(6)其他運算符
instanceof 要求運算符左側的操作數是一個對象或數組值,
右側操作數是一個數據類型的名稱,
如果左側的操作數是右側數據類型的一個實例,則true,反之false
Null不是任何對象的實例
if(new int[] {10} instanceof int[])
System.out.println(“True!”);
(7)字符轉義序列:
/ddd 八進制字符(ddd)
/uxxxx 十六進制Unicode碼字符
/’ 單引號
/” 雙引號
// 反斜杆
/r 回車鍵
/n 換行
/f 換頁
/t 水平製表符
/b 退格