iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

認識運算式

  1. 運算式由運算元(operand)與運算子(operator)組成
  2. 運算元可以是變數或是常數
  3. 運算子就是數學上的運算符號 如「+」、「-」、「*」、「/」等

https://ithelp.ithome.com.tw/upload/images/20230923/20163139V5gLHjXlMq.png

運算子有哪些呢?

賦值運算子 =

把右邊的東西『指定』到左邊,並非一般數學上的『等於』

int num;
num = 10;  // 指定10 給num這個變數。

num 是變數,可以把變數當成一個可以盛裝資料的容器
賦值運算就是把被賦的值裝入變數的過程,賦值運算子是從右至左執行運算的,程式先運算得到右邊的值,再將該值裝入左邊的變數,所以=的左邊只能是變數

Java 也支援多重變數賦值

int a;
int b;
int c;
a = b = c = 5;

一元運算子

https://ithelp.ithome.com.tw/upload/images/20230923/20163139khtFrttvRO.png

算術運算子

https://ithelp.ithome.com.tw/upload/images/20230923/20163139vrClMXkhfW.png

** 注意:**
除法運算子

如果運算元有有一個是浮點數就可以除以0 或 0.0得到的結果會是正無窮大或負無窮大

public class DivDemo {

	public static void main(String[] args) {
		
		double a = 5.2;
		double b = 3.1;
		double div = a/b;
		System.out.println("div:" + div);//1.6774193548387097
		
		//輸出正無窮大
		System.out.println("5除以0.0的結果是:" + 5 / 0.0);//Infinity
		//輸出負無窮大
		System.out.println("-5除以0.0的結果是:" + -5 / 0.0);//-Infinity
		
		//Exception in thread "main" java.lang.ArithmeticException: / by zero
		System.out.println("5除以0的結果是:" + -5 / 0);
		

	}

}

取餘數運算子

運算結果不一定是整數

因為取餘數的運算也需要進行除法運算,因此如果取餘數運算的兩個運算元都是整數型,第二個運算元不能是0或0.0

如果只要其一是浮點數,則第二個運算元可以是0或0.0但結果是NaN

public class ModDemo {

	public static void main(String[] args) {
		
		double a = 5.2;
		double b = 3.1;
		double mod = a % b;
		System.out.println("mod:" + mod);//mod:2.1
		System.out.println("5對0.0取餘數的結果是:" + 5 % 0.0);//NaN
		System.out.println("-5對0.0取餘數的結果是:" + -5 % 0.0);//NaN
		System.out.println("0對5.0取餘數的結果是:" + 0 % 5.0);//0.0
		System.out.println("0對0.0取餘數的結果是:" + -5 % 0.0);//NaN
		//Exception in thread "main" java.lang.ArithmeticException: / by zero
		System.out.println("-5對0取餘數的結果是:" + -5 % 0);

	}

}

算數運算子可以跟賦值運算子合併

https://ithelp.ithome.com.tw/upload/images/20230923/20163139iReyR60KAB.png

遞增與遞減運算子

https://ithelp.ithome.com.tw/upload/images/20230923/20163139KW3asUYcbs.png

遞增/遞減運算子的前綴(prefix)後綴(postfix)差異

我們知道 a++ 其實就是 a=a+1 ,其實 a++ 也可以寫成 ++a,但意義上完全不一樣

a++ ,存取完a的值後,做++的動作。

++a ,先做++的動作,在讓別人存取

int a = 4;
//先讓a執行算數運算,然後自加
int b = a++ + 6;
//此時印出 a是4 b是10
System.out.println(a + "\n" + b );
int a = 4;
//先讓a自加,再執行算數運算
int b = ++a + 6;
//此時印出 a是5 b是11
System.out.println(a + "\n" + b );

注意:

遞增/遞減運算子只能用於操作變數,不能用於運算元值字面常數、常數或運算式

錯誤如:5++ 、 6 - -

Java 並沒有提供更複雜的運算子,如果需要完成乘方、開方等運算,則可以借助java.lang.Math類別的方法完成數學運算

public class MathDemo {
	
	public static void main (String[] args) {
		double a = 3.2;
		//求a的5次方,將結果賦給b
		double b = Math.pow(a , 5);
		System.out.println("b:" + b);
		//求a的平方根,將結果賦給c
		double c = Math.sqrt(a);
		System.out.println("c:" + c);
		//運算隨機數,返回一個0~1之間的為隨機數
		double d = Math.random();
		System.out.println("d:" + d);
		//求1.57的sin值
		double e = Math.sin(1.57);
		System.out.println("e:" + e);
	}
}

更多方法可以到官方文件查詢

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#method.summary

關係運算子

https://ithelp.ithome.com.tw/upload/images/20230923/20163139WNLIqryLya.png

不能用==進行比較的情況
1.基本類型的變數、值 與 參考類型的變數
2.boolean 類型的變數、值與其他類型的變數、值
3.兩個參考類型之間沒有父子繼承關係的變數

邏輯運算子

https://ithelp.ithome.com.tw/upload/images/20230923/20163139g0RncKjGo7.png

https://ithelp.ithome.com.tw/upload/images/20230923/20163139HrGKiRJbEA.png

https://ithelp.ithome.com.tw/upload/images/20230923/20163139K1bEVcebkM.png

public class LogicDemo {

	public static void main(String[] args) {
		//直接對false 求非運算
		System.out.println("!false:" + !false);//true
		
		System.out.println("5 > 3 && '6' > 10 = " + (5 > 3 && '6' > 10));//true
		
		System.out.println("4 >= 5 || 'c' > 'a' = " + (4 >= 5 || 'c' > 'a'));//true
		
		System.out.println("4 >= 5 ^ 'c' > 'a' = " + (4 >= 5 ^ 'c' > 'a'));//true
	}

}

短路(short-circuiting)特性

只要邏輯判斷式可以100%確定回傳結果,後面的都會被忽略

  1. 5 < 4 && 8 > 7

    因為5 < 4 是false,無論如何邏輯判斷式已經知道是false了,不會往右判斷

  2. 8 > 7 || 5 < 4

    因為8 > 7 是true,無論如何邏輯判斷式已經知道是true了,不會往右判斷

→『false接到and』或 『true接到or』,前者立刻回傳false,後者立刻回傳true。

& 和 && 、| 和 || 的差異

& 和 | 都會先運算前後兩個運算元 && 和 || 會先運算左邊的運算元,具有短路特性

三元運算子

格式:

判斷式 ? 若判斷為真執行區塊 : 若判斷為假執行區塊

String str = 5 > 3 ? "5 大於 3" : "5 小於 3 "
System.out.println(str)//5 大於 3

最後還要注意到的是....

運算子的優先順序

優先值:1代表最高優先值 ,15代表最低優先值 

https://ithelp.ithome.com.tw/upload/images/20230923/20163139JDDnXxI4v8.png


上一篇
Day7 Java 程式碼慣例
下一篇
Day 9 流程控制
系列文
玩轉Java:從基礎打造你的程式超能力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言