1. 程式人生 > >Java-筆記3-復習

Java-筆記3-復習

引用 常量 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、intcharlongfloatdouble、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-復習