1. 程式人生 > >JAVA基礎-3.運算子,鍵盤錄入,if語句

JAVA基礎-3.運算子,鍵盤錄入,if語句

1:運算子(掌握) (1)算術運算子 A:+,-,*,/,%,++,– B:+的用法 a:加法 b:正號 c:字串連線符 C:/和%的區別 資料做除法操作的時候,/取得是商,%取得是餘數 D:++和–的用法 a:他們的作用是自增或者自減 b:使用 **單獨使用 放在操作資料的前面和後面效果一樣。 a++或者++a效果一樣。 **參與操作使用 放在運算元的前面:先自增或者自減,再參與操作 int a = 10; int b = ++a; a=11 b=11 放在運算元的後面:先參與操作,再自增或者自減 int a = 10; int b = a++; a=11 b=10

/* ++,–運算子的使用: 單獨使用: 放在運算元的前面和後面效果一樣。(這種用法是我們比較常見的) 參與運算使用: 放在運算元的前面,先自增或者自減,然後再參與運算。 放在運算元的後面,先參與運算,再自增或者自減。

作用:就是對變數進行自增1或者自減1。

*/ class OperatorDemo2 { public static void main(String[] args) { //定義兩個變數 int x = 3; int y = 4;

        //字串的拼接
        //System.out.println("x:"+x);
        //System.out.println("y:"+y);

        System.out.println("x:"+x+",y:"+y);

        //單獨使用
        //x++;
        //y--;
        ++x;
        --y;
        //System.out.println(x);
        System.out.println("x:"+x+",y:"+y);

        //意外的型別,常量是不可以這樣做的
        //System.out.println(10++);

        System.out.println("-------------------");
        //參與運算使用
        int a = 3;
        int b = 4;

        //int c = a++;
        //int d = b--;

        int c = ++a;
        int d = --b;

        System.out.println("a:"+a); //4, 4
        System.out.println("b:"+b); //3, 3
        System.out.println("c:"+c); //3, 4
        System.out.println("d:"+d); //4, 3
    }

}

(2)賦值運算子
    A:=,+=,-=,*=,/=,%=等
    B:=叫做賦值運算子,也是最基本的賦值運算子
        int x = 10; 把10賦值給int型別的變數x。
    C:擴充套件的賦值運算子的特點
        隱含了自動強制轉換。

        面試題:

/* 面試題: short s=1;s = s+1;

    short s=1;s+=1;
    上面兩個程式碼有沒有問題,如果有,那裡有問題。

    為什麼第二個木有問題呢?
        擴充套件的賦值運算子其實隱含了一個強制型別轉換。

        s += 1;
        不是等價於 s = s + 1;
        而是等價於 s = (s的資料型別)(s + 1);

*/ class OperatorTest { public static void main(String[] args) { //short s = 1; //s = s + 1; //System.out.println(s);

    short s = 1;
    s += 1; //好像是 s = s + 1;
    System.out.println(s);
}

}

(3)比較運算子
    A:==,!=,>,>=,<,<=
    B:無論運算子兩端簡單還是複雜最終結果是boolean型別。
    C:千萬不要把==寫成了=
(4)邏輯運算子
    A:&,|,^,!,&&,||
    B:邏輯運算子用於連線boolean型別的式子
    C:結論
        &邏輯與:有false則false
        |邏輯或:有true則true
        ^邏輯異或:相同則false,不同則true。
            情侶關係。男男,男女,女男,女女
        !邏輯非:非true則false,非false則true
             特點:偶數個不改變本身。

        &&:結果和&是一樣的,只不過有短路效果。左邊是false,右邊不執行。
        ||:結果和|是一樣的,只不過有短路效果。左邊是true,右邊不執行。
(5)位運算子(瞭解)
    A:^的特殊用法
        一個數據針對另一個數據位異或兩次,該數不變


    int a = 10;
    int b = 20;

    System.out.println(a ^ b ^ b); //10
    System.out.println(a ^ b ^ a); //20

    B:面試題
        a:請實現兩個變數的交換
            **採用第三方變數
            **用位異或運算子
                左邊a,b,a
                右邊a^b

/* 面試題: 請自己實現兩個整數變數的交換 */ class OperatorTest { public static void main(String[] args) { int a = 10; int b = 20;

    System.out.println("a:"+a+",b:"+b);

    //方式1:使用第三方變數(開發中用的)
    /*
    int c = a;
    a = b;
    b = c;
    System.out.println("a:"+a+",b:"+b);
    System.out.println("------------");
    */

    //方式2:用位異或實現(面試用)
    //左邊:a,b,a
    //右邊:a ^ b
    /*
    a = a ^ b;
    b = a ^ b; //a ^ b ^ b = a
    a = a ^ b; //a ^ b ^ a = b
    System.out.println("a:"+a+",b:"+b);
    */

    //方式3:用變數相加的做法
    /*
    a = a + b; //a=30
    b = a - b; //b=10
    a = a - b; //a=20
    System.out.println("a:"+a+",b:"+b);
    */

    //方式4:一句話搞定
    b = (a+b) - (a=b); //b=30-20=10,a=20
    System.out.println("a:"+a+",b:"+b);
}

}

        b:請用最有效率的方式計算出2乘以8的結果
            2<<3
(6)三元運算子
    A:格式
        比較表示式?表示式1:表示式2;
    B:執行流程:
        首先計算比較表示式的值,看是true還是false。
        如果是true,表示式1就是結果。
        如果是false,表示式2就是結果。
    C:案例:
        a:比較兩個資料是否相等
        b:獲取兩個資料中的最大值  return ((a>b)? a : b);
        c:獲取三個資料中的最大值   int temp = ((a>b)? a: b);
                                                 int max = ((temp>c)? temp: c);
                                                 return max;

/* 練習: 獲取兩個整數中的最大值 獲取三個整數中的最大值 比較兩個整數是否相同 */ class OperatorTest { public static void main(String[] args) { //獲取兩個整數中的最大值 int x = 100; int y = 200;

    int max = (x > y? x: y);
    System.out.println("max:"+max);
    System.out.println("--------");

    //獲取三個整數中的最大值
    int a = 10;
    int b = 30;
    int c = 20;

    //分兩步:
    //A:先比較a,b的最大值
    //B:拿a,b的最大值在和c進行比較
    int temp = ((a > b)? a: b);
    //System.out.println(temp);
    int max1 = (temp > c? temp: c);
    System.out.println("max1:"+max1);

    //一步搞定
    //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
    //這種做法不推薦。
    //int max2 = a > b?a > c? a: c:b > c? b: c;
    //System.out.println("max2:"+max2);
    System.out.println("--------");

    //比較兩個整數是否相同
    int m = 100;
    int n = 200;

    //boolean flag = (m == n)? true: false;
    boolean flag = (m == n);
    System.out.println(flag);
}

}

2:鍵盤錄入(掌握) (1)實際開發中,資料是變化的,為了提高程式的靈活性,我們加入鍵盤錄入資料。 (2)如何實現呢?目前就記住 A:導包 import java.util.Scanner; 位置:在class的上邊 B:建立物件 Scanner sc = new Scanner(System.in); C:獲取資料 int x = sc.nextInt();

3:流程控制語句 (1)順序結構 從上往下,依次執行 (2)選擇結構 按照不同的選擇,執行不同的程式碼 (3)迴圈結構 做一些重複的程式碼

4:if語句(掌握) (1)三種格式 A:格式1 if(比較表示式) { 語句體; }

        執行流程:
            判斷比較表示式的值,看是true還是false
            如果是true,就執行語句體
            如果是false,就不執行語句體

    B:格式2
        if(比較表示式) {
            語句體1;
        }else {
            語句體2;
        }

        執行流程:
            判斷比較表示式的值,看是true還是false
            如果是true,就執行語句體1
            如果是false,就執行語句體2

    C:格式3
        if(比較表示式1) {
            語句體1;
        }else if(比較表示式2){
            語句體2;
        }
        ...
        else {
            語句體n+1;
        }

        執行流程:
            判斷比較表示式1的值,看是true還是false
            如果是true,就執行語句體1
            如果是false,就繼續判斷比較表示式2的值,看是true還是false
            如果是true,就執行語句體2
            如果是false,就繼續判斷比較表示式3的值,看是true還是false
            ...
            如果都不滿足,就執行語句體n+1
(2)注意事項
    A:比較表示式無論簡單還是複雜,結果是boolean型別
    B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
        建議:永遠不要省略。
    C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
    D:else後面如果沒有if,是不會出現比較表示式的。
    E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
(3)案例:
    A:比較兩個數是否相等
    B:獲取兩個數中的最大值
    C:獲取三個數中的最大值(if語句的巢狀)
    D:根據成績輸出對應的等級
    E:根據月份,輸出對應的季節
    F:根據x計算對應y的值並輸出

/* 獲取三個資料中的最大值

由此案例主要是為了講解if語句是可以巢狀使用的。而且是可以任意的巢狀。

*/ class IfTest4 { public static void main(String[] args) { int a = 10; int b = 30; int c = 20;

    //三元實現
    //int temp = (a>b)? a: b;
    //int max = (temp>c)? temp: c;
    //System.out.println("max:"+max);
    //System.out.println("--------");

    //用if語句實現
    int max;
    if(a > b) {
        if(a > c) {
            max = a;
        }else {
            max = c;
        }
    }else {
        if(b > c) {
            max = b;
        }else {
            max = c;
        }
    }
    System.out.println("max:"+max);
}

}

(4)三元運算子和if語句第二種格式的關係
    所有的三元運算子能夠實現的,if語句的第二種格式都能實現。
    反之不成立。

    如果if語句第二種格式控制的語句體是輸出語句,就不可以。
    因為三元運算子是一個運算子,必須要有一個結果返回,不能是一個輸出語句。