Java-筆記3-復習
阿新 • • 發佈:2019-05-03
引用 常量 pub pre 兩個 兩數之和 強制轉換 表達式 失敗
1.“&”和“&&”的異同 2.程序輸出 class OperatorTest { public static void main(String[] args) { boolean x = true; boolean y = false; short z = 40; if ((z++ == 40) && (y = true)) { z++; } if ((x = false) || (++z == 43)) { z++; } System.out.println("z = " + z); } } 結果為: 44
3.定義三個int型變量並賦值,使用三元運算符或者if-else獲取這三個數中的較大數的實現
int num1 = 10, num2 = 21, num3 = -21;
if(num1 >= num1 && num1 >= num3){
max = num1;
}else if(num2 >= num1 && num2 >= num3){max = num2;
}else{
max = num3;
}
System.out.println("三個數中的最大值為:" + max)
4.編寫程序,聲明2個double型變量並賦值。判斷第一個數大於10.0,且第2個數小於20.0,打印兩數之和。否則,打印兩數的乘積。
double d1 = 12.3;
double d2 = 32.1;
if(d1 > 10 && d2 < 20){
}else{
}
5. 交換兩個變量值的代碼的實現
String s1 = "南京";
String s2 = "北京";
String temp = s1;
s1 = s2;
s2 = temp;
1.算術運算符: + - + - * / % (前)++ (後)++ (前)-- (後)-- + 【典型代碼】 //除號:/ int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1);//2 // %:取余運算 //結果的符號與被模數的符號相同 //開發中,經常使用%來判斷能否被除盡的情況。 int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1); int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2); int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3); int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4); //(前)++ :先自增1,後運算 //(後)++ :先運算,後自增1 int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " + b1); int a2 = 10; int b2 = a2++; System.out.println("a2 = " + a2 + ",b2 = " + b2); int a3 = 10; ++a3;//a3++; int b3 = a3; //(前)-- :先自減1,後運算 //(後)-- :先運算,後自減1 int a4 = 10; int b4 = a4--;//int b4 = --a4; System.out.println("a4 = " + a4 + ",b4 = " + b4); 【特別說明的】 1.//(前)++ :先自增1,後運算 //(後)++ :先運算,後自增1 2.//(前)-- :先自減1,後運算 //(後)-- :先運算,後自減1 3.連接符:+:只能使用在String與其他數據類型變量之間使用。
2.賦值運算符:= += -= *= /= %= 【典型代碼】 int i2,j2; //連續賦值 i2 = j2 = 10; //*************** int i3 = 10,j3 = 20; int num1 = 10; num1 += 2;//num1 = num1 + 2; System.out.println(num1);//12 int num2 = 12; num2 %= 5;//num2 = num2 % 5; System.out.println(num2); short s1 = 10; //s1 = s1 + 2;//編譯失敗 s1 += 2;//結論:不會改變變量本身的數據類型 System.out.println(s1); 【特別說明的】 1.運算的結果不會改變變量本身的數據類型 2. //開發中,如果希望變量實現+2的操作,有幾種方法?(前提:int num = 10;) //方式一:num = num + 2; //方式二:num += 2; (推薦) //開發中,如果希望變量實現+1的操作,有幾種方法?(前提:int num = 10;) //方式一:num = num + 1; //方式二:num += 1; //方式三:num++; (推薦)
3.比較運算符(關系運算符): == != > < >= <= instanceof 【典型代碼】 int i = 10; int j = 20; System.out.println(i == j);//false System.out.println(i = j);//20 boolean b1 = true; boolean b2 = false; System.out.println(b2 == b1);//false System.out.println(b2 = b1);//true 【特別說明的】 1.比較運算符的結果是boolean類型 2.> < >= <= :只能使用在數值類型的數據之間。 3. == 和 !=: 不僅可以使用在數值類型數據之間,還可以使用在其他引用類型變量之間。 Account acct1 = new Account(1000); Account acct2 = new Account(1000); boolean b1 = (acct1 == acct2);//比較兩個Account是否是同一個賬戶。 boolean b2 = (acct1 != acct2);//
4.邏輯運算符:& && | || ! ^ 【典型代碼】 //區分& 與 && //相同點1:& 與 && 的運算結果相同 //相同點2:當符號左邊是true時,二者都會執行符號右邊的運算 //不同點:當符號左邊是false時,&繼續執行符號右邊的運算。&&不再執行符號右邊的運算。 //開發中,推薦使用&& boolean b1 = true; b1 = false; int num1 = 10; if(b1 & (num1++ > 0)){ System.out.println("我現在在北京"); }else{ System.out.println("我現在在南京"); } System.out.println("num1 = " + num1); boolean b2 = true; b2 = false; int num2 = 10; if(b2 && (num2++ > 0)){ System.out.println("我現在在北京"); }else{ System.out.println("我現在在南京"); } System.out.println("num2 = " + num2); // 區分:| 與 || //相同點1:| 與 || 的運算結果相同 //相同點2:當符號左邊是false時,二者都會執行符號右邊的運算 //不同點3:當符號左邊是true時,|繼續執行符號右邊的運算,而||不再執行符號右邊的運算 //開發中,推薦使用|| boolean b3 = false; b3 = true; int num3 = 10; if(b3 | (num3++ > 0)){ System.out.println("我現在在北京"); }else{ System.out.println("我現在在南京"); } System.out.println("num3 = " + num3); boolean b4 = false; b4 = true; int num4 = 10; if(b4 || (num4++ > 0)){ System.out.println("我現在在北京"); }else{ System.out.println("我現在在南京"); } System.out.println("num4 = " + num4); 【特別說明的】 1.邏輯運算符操作的都是boolean類型的變量。而且結果也是boolean類型
5.位運算符:<< >> >>> & | ^ ~ 【典型代碼】 int i = 21; i = -21; System.out.println("i << 2 :" + (i << 2)); System.out.println("i << 3 :" + (i << 3)); System.out.println("i << 27 :" + (i << 27)); int m = 12; int n = 5; System.out.println("m & n :" + (m & n)); System.out.println("m | n :" + (m | n)); System.out.println("m ^ n :" + (m ^ n)); 【面試題】 你能否寫出最高效的2 * 8的實現方式? 答案:2 << 3 或 8 << 1 【特別說明的】 1. 位運算符操作的都是整型的數據 2. << :在一定範圍內,每向左移1位,相當於 * 2 >> :在一定範圍內,每向右移1位,相當於 / 2 典型題目: 1.交換兩個變量的值。 2.實現60的二進制到十六進制的轉換
6.三元運算符:(條件表達式)? 表達式1 : 表達式2 【典型代碼】 1.獲取兩個整數的較大值 2.獲取三個數的最大值 【特別說明的】 1. 說明 ① 條件表達式的結果為boolean類型 ② 根據條件表達式真或假,決定執行表達式1,還是表達式2. 如果表達式為true,則執行表達式1。 如果表達式為false,則執行表達式2。 ③ 表達式1 和表達式2要求是一致的。 ④ 三元運算符可以嵌套使用 2. 凡是可以使用三元運算符的地方,都可以改寫為if-else 反之,不成立。 3. 如果程序既可以使用三元運算符,又可以使用if-else結構,那麽優先選擇三元運算符。原因:簡潔、執行效率高。
流程控制 順序結構:程序從上到下執行。 分支結構: if-else if - else switch-case 循環結構: for while do-while
章節練習題及面試題 簡答題 標識符的命名規則需要註意哪幾點? 基本數據類型有哪幾類?包含String嗎? 寫出基本數據類型自動轉化的流程圖 整型默認的是什麽類型,浮點型(實數型)默認的是什麽類型? 對於包名,類名接口名,變量名和函數名,常量名我們習慣如何格式來命名? 定義一個變量需要註意什麽? 強制類型轉化可能出現的問題 char型變量中能不能存貯一個中文漢字?為什麽? 答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節, 所以放一個中文是沒問題的 定義float f=3.4;是否正確? 答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4 String是最基本的數據類型嗎 答:基本數據類型包括byte、int、char、long、float、double、boolean和short。 java.lang.String是java中定義的一個類,類都屬於引用數據類型。 根據運算符的功能,我們把運算符分成哪幾類? Java有沒有goto 答:java中的保留字,現在沒有在java中使用 用最有效的的方法算出2稱以8等於幾 答案:2<<3 char型變量中是否可以存儲一個漢字? 能,因為Java一個字符是2個字節,每一個字符使用Unicode編碼表示 float f=3.4;是否正確,表達式15/2*2的值是多少 答案:不正確,float f = 3.4F; 答案:14 Java的基本數據類型有哪些?String是基本數據類型嗎? 基本數據類型有:byte,short,int,long,float,double,char,boolean String是引用數據類型,不是基本數據類型 以下代碼的運行結果 public static void main(String[] args) { char x = ‘x‘; int i = 10; System.out.println(true? x : i); System.out.println(true? ‘x‘ : 10); } 答案: 120 x /* * 如果其中有一個是變量,按照自動類型轉換規則處理成一致的類型; * 如果都是常量,如果一個是char,如果另一個是[0~65535]之間的整數按char處理; * 如果一個是char,另一個是其他,按照自動類型轉換規則處理成一致的類型; */ 以下代碼的執行結果 public static void main(String[] args) { int a = 8, b = 3; System.out.println(a>>>b); System.out.println(a>>>b | 2); } 答案: 1 3 編程題 為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時? //為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時? public class TestExer1 { public static void main(String[] args) { int hour = 89; int day = hour / 24; hour = hour % 24; System.out.println("為抵抗洪水,戰士連續作戰" + day + "天" + hour + "小時"); } } 今天是周二,100天以後是周幾? //今天是周二,100天以後是周幾? public class TestExer2 { public static void main(String[] args) { int week = 2; week += 100; week = week % 7; System.out.println("100天後星期" + week); } } 算術運算符的使用 class SuanShu{ public static void main(String[] args){ int a = 23; int b = 12; System.out.println(a + "+" + b + "=" + (a+b)); int sum = a + b; System.out.println(a + "+" + b + "=" + sum); int sub = a - b; //System.out.println(a + "-" + b + "=" + a-b);//錯誤,原因是a + "-" + b + "=" + a的結果是字符串,字符串不能進行減法 System.out.println(a + "-" + b + "=" + (a-b)); System.out.println(a + "-" + b + "=" + sub); int mul = a * b; System.out.println(a + "*" + b + "=" + a*b); System.out.println(a + "*" + b + "=" + mul); //整數相除,只保留整數部分 int div = a / b; System.out.println(a + "/" + b + "=" + a/b); System.out.println(a + "/" + b + "=" + div); double d = (double)a/b;//先把a的類型進行轉換,轉換成double類型,然後再和b相除 System.out.println(a + "/" + b + "=" + d); int yu = a % b; System.out.println(a + "%" + b + "=" + yu); System.out.println("------------------特殊的取模----------------------"); System.out.println(5%2);//1 System.out.println(-5%-2);//-1 System.out.println(-5%2);//-1 System.out.println(5%-2);//1 System.out.println("------------------負號----------------------"); int num1 = 12; int num2 = -num1; System.out.println("num2=" + num2); System.out.println("------------------自增----------------------"); int i = 0; System.out.println("自增之前i=" + i); i++; System.out.println("自增第一次之後i=" + i); ++i; System.out.println("自增第二次之後i=" + i); int j = ++i;//把i自增1,然後結果賦值給j,或者說,先算++i,然後再賦值 System.out.println("自增第三次之後i=" + i); System.out.println("j="+j); int k = i++;//先算賦值,把i的值賦值給k,i原來是3,把3賦值給k,然後i在自增1,i變成4 System.out.println("自增第四次之後i=" + i); System.out.println("k="+k); //面試題:陷阱題 i = i++;//先賦值,把i原來的值重新賦值給i,不變,然後i自增,但是這個自增後的值沒有在放回變量i的位置 System.out.println("自增第五次之後i=" + i); } } 考查運算符的優先級 寫出輸出的結果. class Demo{ public static void main(String[] args){ int x=0,y=1; if(++x==y-- & x++==1||--y==0) System.out.println("x="+x+",y="+y); //x = 2,y = 0; else System.out.println("y="+y+",x="+x); } } 編寫代碼實現兩個變量值交換,int m = 3, n =5; 答案一: int temp = m; m = n; n = temp; 答案二: m = m + n; n = m - n; m = m - n; 答案三: m = m ^ n; n = m ^ n; m = m ^ n; 如何求一個0~255範圍內的整數的十六進制值,例如60的十六進制表示形式3C //方式一:自動實現 String str1 = Integer.toBinaryString(60); String str2 = Integer.toHexString(60); //方式二:手動實現 int i1 = 60; int i2 = i1&15; String j = (i2 > 9)? (char)(i2-10 + ‘A‘)+"" : i2+""; int temp = i1 >>> 4; i2 = temp & 15; String k = (i2 > 9)? (char)(i2-10 + ‘A‘)+"" : i2+""; System.out.println(k+""+j); 小明要到美國旅遊,可是那裏的溫度是以華氏度為單位記錄的。它需要一個程序將華氏溫度(80度)轉換為攝氏度,並以華氏度和攝氏度為單位分別顯示該溫度。 //小明要到美國旅遊,可是那裏的溫度是以華氏度為單位記錄的。 //它需要一個程序將華氏溫度(80度)轉換為攝氏度,並以華氏度和攝氏度為單位分別顯示該溫度。 public static void main(String[] args) { int h = 80; double s = (h - 32) / 1.8; System.out.println(h + "華氏度,是攝氏度" + Math.round(s)); } 練習前++,後++,三元運算符 寫出輸出結果: class Demo{ public static void main(String[] args){ int a=3,b=8; int c=(a>b)?a++:b++; System.out.println("a="+a+"\tb="+b+"\tc="+c); // int d=(a>b)?++a:++b; System.out.println("a="+a+"\tb="+b+"\td="+d); // int e=(a<b)?a++:b++; System.out.println("a="+a+"\tb="+b+"\te="+e); // int f=(a<b)?++a:++b; System.out.println("a="+a+"\tb="+b+"\tf="+f); // } } 比較 + 與 += short s1 = 1; s1 = s1 + 1;有什麽錯? short s1 = 1; s1 += 1;有什麽錯 答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型) short s1 = 1; s1 += 1;(可以正確編譯)
Java-筆記3-復習