位運算符 &與 |或 ^異或 <<左移 >>右移 >>>無符號右移 ~取反 註意:位運算是針對整數運算的 int i = 6,j = 10; 方式一:利用第三方變數 int k = i; i = j; j = k; 方式二:利用加減法 i = i + j; j = i - j; >j = i + j ...
位運算符
&與 |或 ^異或 <<左移 >>右移 >>>無符號右移 ~取反
註意:位運算是針對整數運算的
int i = 6,j = 10;
方式一:利用第三方變數
int k = i;
i = j;
j = k;
方式二:利用加減法
i = i + j;
j = i - j;--->j = i + j - j;-> j = i;
i = i - j;--->i = i + j - i;-> i = j;
方式三:異或運算
i = i ^ j;
j = i ^ j;---> j = i ^ j ^ j;-> j = i;
i = i ^ j;---> i = i ^ j ^ i;-> i = j;
i^=j;j^=i;i^=j;
為什麼第三種方式的效率更高卻是第一種方式用的更廣?
第一種方式的可閱讀性更高;第三種方式只能用於運算整數,第二種方式可以用於運算數值型但是不能用於交換其他類型的值例如字元串類型,而第一種方式可以交換任意一種類型的值
流程式控制制
順序結構
從上倒下、從左到右一次運行
分支結構
判斷結構
if(邏輯值){
代碼塊;
}
如果代碼塊只有一句,{}可以省略不寫
if(邏輯值){
Code1;
} else {
Code2;
}
練習:獲取較大的數
if(邏輯值1){
Code1;
} else if(邏輯值2) {
Code2;
} else {
Code3;
}
練習:輸入月份,輸出季節---3-5---Spring,6-8-Summer,9-11-Autumn,12-2-Winter
選擇結構
switch(表達式){
case 情況1 : Code1;break;
case 情況2 : Code2;break;
……
default:Code;break;
}
註意:
1.表達式的結果是byte/short/int/char
2.從JDK1.7開始,允許匹配字元串
3.從JDK1.5開始,允許匹配枚舉常量
4.當選項後邊都有break的時候,選項之間的順序沒有影響;如果有一個或者以上選項之後沒有break,從匹配到該選項的地方開始執行,知道遇到break或者{}結束
int i = 0;
switch(i){
case 0: int j = 0;
case 1: j+=1;
case 2: j+= 2;
case 3:j+=3;
default:j+=4;
}
System.out.printlnt(j);---報錯
練習:從控制台輸入兩個數字以及運算符號(+、-、*、/),將兩個數字按照指定的運算進行並輸出結果
迴圈結構
while(邏輯值){
Code;
}
迴圈的要素:定義迴圈變數、控制判斷條件、改變迴圈變數
例子:
1.求1到任意一個數的和
2. 輸入任意一個整數,輸出這個整數的位數
練習:
- 輸入一個整數,求各位數字之和
1 Scanner scanner=new Scanner(System.in); 2 String string=scanner.nextLine(); 3 int sum=0; 4 for (int i = 0; i < string.length(); i++) { 5 sum+=Integer.valueOf(String.valueOf(string.charAt(i))); 6 } 7 System.out.println(sum);
- 求300以內7的倍數
for (int i = 0; i < 300; i++) {
if (i%7==0) {
System.out.println(i);
}
}
- 輸入一個整數,轉化成二進位顯示
1 Scanner scanner=new Scanner(System.in); 2 3 int a=scanner.nextInt(); 4 5 String nbInteger= Integer.toBinaryString(a); 6 7 System.out.println(nbInteger);
如果while迴圈的代碼塊只有一句,{}可以省略
do{
Code;
} while(邏輯值);
do-while迴圈的代碼塊至少執行一次
for(定義迴圈變數; 控制判斷條件; 改變迴圈變數){
代碼塊;
}
練習:求500以內6的倍數的和
for迴圈的迴圈變數在迴圈結束之後不可使用,while迴圈可以
當迴圈的次數固定或者步長固定建議使用for迴圈
當迴圈次數不定或者變化不規律的時候建議使用while
//希望用戶輸入一個偶數
Scanner s = new Scanner(System.in);
int even = s.nextInt();
while(even % 2 != 0){
even = s.nextInt();
}
for(;even % 2 != 0; ){
even = s.nextInt();
}
練習:列印九九乘法表
1 for (int i = 1; i <=9; i++) { 2 3 for (int j = 1; j <= i; j++) { 4 5 System.out.print(j+"*"+i+"="+i*j+"\t"); 6 7 } 8 9 System.out.println(""); 10 11 }
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9