1. 程式人生 > >Java 中的運算符和流程控制相關內容的理解

Java 中的運算符和流程控制相關內容的理解

判斷 控制 color ++ 等於 代碼 最小 二進制 輸入

  接著之前的運算符方面,今天主要回顧運算符的一些計算、優先級方面的內容,以及一些流程控制中if-else 方面的知識。 賦值運算符 (=、+=、-=、*=、/=、%=、&=、|=、^=、<<= 、>>=、 >>>=) byte/short/char 可以參與運算 除了 = 以外,其余的符號都要求這個變量得先有值 註意:在 Java 中不支持連等定義但是支持連等賦值
int i = 5;
i += i *= i -= 3;  -> 15
i =  5 + (5 * (5 -3)) = 15
 
int j = 7;
j -= j *= j++;
j=7
-(7 *7) = -42

  

關系/比較運算符 (==相等 !=不等 > < >= <=) 註意:不支持連著得比較方式 邏輯運算符 (&與 |或 !非 ^異或 &&短路與 ||短路或) true & ture = true(就像是下棋,兩個人都要來才能下這盤棋) |(讓某一位同學打一杯水,這杯水打過來有一個同學去了就行了) (計算機中的二進制非真即假,要麽是對的,要麽是錯的) ^(從物理學中總結出來的,指南針/磁石,只有一北一南才能碰到一起,相同為假,不同為真) &&(如果前邊的表達式的結果為false,則後邊的表達式就不再運算,整個表達式的結果就確定為 false) ||
(如果前邊的表達式的結果為 true,則後邊的表達式就不再運算,整個表達式的結果就確定為 true) 註意:||如果在 && 的前邊可以把 && 短路掉 位運算符 註意:位運算符針對整數的補碼進行運算,所以運算結果也是補碼 & | ^ << >> >>> ~ 技術分享圖片 & :將數據轉化為補碼形式,然後將 0 看作false,將 1 看作 true,按位進行與運算,最後將結果轉化位十進制來顯示 偶數 & 任意數字 = 偶數 正數 & 任意數字 = 正數 奇數 & 1 = 1 偶數 & 1 = 0 |
:7 00000111 將數據轉化為補碼形式,按位進行或運算,最後將結果轉化位十進制顯示 11 00001011 奇數 | 任意數字 = 奇數 15 00001111 負數 | 任意數字 = 負數 ^:7 00000111 將數據轉化為補碼形式,按位進行異或運算,最後將結果轉化為十進制顯示 11 00001011 6^12 = 10, 10^6 = 12 12 00001100 i^i=0,j^0 = j , a^b^b=a 交換值的方式 方式一:異或法
int i = 5, j = 9;
i = i^j;
j = i^j;   -> j = i^j^j;    ->j=i;
i = i^j;   ->i = i^j^i;    ->i = j;
方式二:加減法
int i = 5, j = 9;
i = i+j;
j = i-j;  -> j=i+j-j;  -> j = i; 
i = i-j;  ->i = i+j-i; ->i = j;
方式三:追尾法
int i = 5, j = 9;
int temp = i;
i = j;
j = temp;
總結:三種方式的比較 異或法的效率是最高的。只能針對整數進行交換,局限性太大。(像小數,字符,字符串就不能交換) 加減法的效率是低於異或但是高於追尾。理論上可以交換數值類型,但實際上很少用於交換小數。 追尾法的效率是最低的。可以交換任意一個類型的值。 << 3 << 3 00000011 <<:將數據轉化為補碼,然後按照指定的位數向左移動,高位次移出的數據舍棄,低位次空出的位置補 0,最後轉化為十進制顯示 24 000 00011000 7 << 4 = 7 * 16=112(相當於乘以 2^4) 在一定範圍內,左移幾位就是乘以 2 的幾次方 >> 10 >> 2 00001010 >>:將數據轉化為補碼,然後按照指定的位數向右移動,移出的數據舍棄,如果是正數,高位次空出補 0;如果是負數則補 1,最後將數據轉化為十進制顯示 0000001010 14 >> 3 =1 在一定範圍內,右移幾位就是除以 2 的幾次方 正數右移越移越小,最小是 0 負數右移越移越大,最大到 -1 >>>:無符號右移。將數據轉化為補碼之後,按照指定的位數向右移動,移出的數據舍棄,高位次空出,無論正負一律補 0。 ~3 00000011 ~:將數據轉化為補碼之後,將 0<->1,最後將數據轉化為十進制顯示 11111100 ~10 = -11 ~i = -i - 1 -4 10000100 三元運算符 格式:邏輯值 ? 表達式1 : 表達式2 執行順序:先執行邏輯值,如果邏輯值為 true,執行表達式1;反之則執行表達式2 註意:三元表達式本身是一個表達式,意味著這個表達式執行完成後需要一個結果 --- 這個結果必須能定義對應類型的變量來接住 a > b ? "abc" : true; -> 沒有辦法定義一個統一類型的結果來存儲,這種寫法就是錯誤的
//三元表達式的嵌套
int max = i > j ? (i > k ? i : k) : (j > k ? j : k);

//練習:輸出分數所對應的等級  >=90 -A  >=80 -B  >=70 -C  >=60 -D  <60 -E
        char level = score >= 90 ? ‘A‘:(score >= 80 ? ‘B‘ : (score >= 70 ? ‘C‘ : (score >=60 ? ‘D‘ : ‘E‘)));
        System.out.println(level);
擴展:從控制臺獲取數據
import java.util.Scanner;
Scanner s = new Scanner(System.in);
int i = s.netInt();      //獲取整數
double d = s.nextDouble();      //獲取小數
String str = s.next();
>= 大於等於 >>= 右移等於 10 >= 2 -> true 10 >>= 2 ->i = i >> 2; -> 2 運算符的優先級 ~! 算術(++ -- * / % + - ) << >> >>> 關系 邏輯& | ^ 三元 賦值 一元 二元運算 (一元的幾個運算符的優先級是一樣的流程控制 順序結構:指代碼從上到下從左到右來依次編譯運行的 分支結構: 判斷結構 if(邏輯值){ 代碼塊 } 執行順序:先執行邏輯值,如果邏輯值為 true,那麽執行 代碼塊。 註意:如果 if 中的代碼塊只有 1 句話,那麽可以省略 {} 不寫 if(邏輯值){ Code1; }else{ Code2; } 練習: 1.輸入三個數字,獲取三個數字中的最小值
import java.util.Scanner;
public class IfElseExer {
	
	public static void main(String[] args){
		
		Scanner s = new Scanner(System.in);
		int i = s.nextInt();
		int j = s.nextInt();
		int k = s.nextInt();
		
		/*
		if(i < j){
			if(i < k){
				System.out.println(i);
			} else {
				System.out.println(k);
			}
		} else {
			if(j < k){
				System.out.println(j);
			} else {
				System.out.println(k);
			}
		}
		*/
		
		int min = i;
		
		if(min > j)
			min = j;
		
		if(min > k)
			min = k;
		
		System.out.println(min);
	}
	
}

  

2.輸入一個數字表示重量,如果重量<=20,則每千克收費 0.35 元;如果超過 20 千克不超過 100 千克的範圍,則超過的部分按照每千克 0.5 元收費;如果超過 100 千克,則超過的範圍按照每千克 0.8 元收費。
import java.util.Scanner;
public class IfElseExer2 {
	
	public static void main(String[] args){
		
		Scanner s = new Scanner(System.in);
		double weight = s.nextDouble();
		
		double price = 0;
		if(weight < 0){
			System.out.println("不合法的重量!!!");
		} else {
			if(weight <= 20){
				price = weight * 0.35;
			} else {
				if(weight <= 100){
					price = 20 * 0.35 + (weight - 20) * 0.5;
				} else {
					price = 20 * 0.35 + 80 * 0.5 + (weight - 100) * 0.8;
				}
			}
			
		}
		
		System.out.println(price);
		
	}
	
}

  或者

import java.util.Scanner;
public class IfElseIfDemo {
	
	public static void main(String[] args){
		
		Scanner s = new Scanner(System.in);
		double weight = s.nextDouble();
		
		double price = 0;
		
		if(weight < 0){
			System.out.println("非法的重量!!!");
		} else if(weight <= 20){
			price = weight * 0.35;
		} else if(weight <= 100){
			price = 7 + (weight - 20) * 0.5;
		} else {
			price = 47 + (weight - 100) * 0.8;
		}
		
		System.out.println(price);
	}
}

  

if(邏輯值1){ Code1; }else if(邏輯值2){ Code2; } 練習: 輸入一個數字表示月份,然後輸出這個月份所對應的季節。 3 - 5 -春 6 - 8 - 夏 9 - 11 - 秋 12、1、2 - 冬
import java.util.Scanner;
public class IfElseIfExer {
	
	public static void main(String[] args){
		
		Scanner s = new Scanner(System.in);
		int month = s.nextInt();
		
		if(month < 1 || month > 12){
			System.out.println("Illegal month !!!");
		} else if(month > 2 && month < 6){
			System.out.println("Spring");
		} else if(month > 5 && month < 9){
			System.out.println("Summmer");
		} else if(month > 8 && month < 12){
			System.out.println("Autumn");
		} else {
			System.out.println("Winter");
		}
		
		
	}
	
}
選擇結構 循環結構:

Java 中的運算符和流程控制相關內容的理解