1. 程式人生 > >java 運算符,流程控制語句,鍵盤錄入

java 運算符,流程控制語句,鍵盤錄入

常量 min ext 易錯點 double 取余 over 特殊 精度

1.比較運算符

public static void main(String args[])
{
    int x = 3;
    int y = 4;
    int z = 5;
    System.out.println(x > y);
    System.out.println(x < y);
    System.out.println(x == y);
    System.out.println(x + y > x + z);
    System.out.println(x >= y);
    }
    基本的比較運算符便是  大於,小於,等於,大於等於,小於等於, 輸出結果也是看是否符合比較,符合便輸出true,不符合編書處flase;

2.賦值運算符

public static void main(String args[])
{
    int a = 20;
    System.out.println(a);
    int b = 10;
    System.out.println(b);
    System.out.println("----------------");
    int n;
    int m = n = 10;
    System.out.println((newStringBuilder("m:")).append(m).append(",n:").append(n).toString());
    System.out.println("-----------------");
    int y = 10;
    y += 20;
    System.out.println((new StringBuilder("y:")).append(y).toString());
}   

賦值運算符“=”
註意賦值時和其他運算符之間的優先級;
+++++++
上述代碼中的
(1).  new StringBuilder("內容 ")為匿名創建對象,而對象的內容便是雙引號中的內容;
(2). append(" ")是附加的意思,append方法中如果是自定義變量,則不需要加雙引號,如果是字符串,則加雙引號;

(3). toString()這個方法它是一種對象類型,字符串,不可變的,StringBuilder帶有緩沖區,通過它,可改變字符串的這個不足的地方,如是我們用“+”來拼字符串,這個過程中,會創建很多個字符串對象,用StringBuilder,它就利用緩沖作用來完成這種工作,它與stringbuffer很類似,只是,它是線程非安全的,效率要比stringbuffer高些 ,在用append()附加字符串,最後最好使用toString()方法將其變成一個完整的字符串;

內容擴充:此時可以註意String類型,StringBuffer類型和StringBuilder類型的區別?
https://zhidao.baidu.com/question/1386767228469012700.html&gt;<br/<https://zhidao.baidu.com/question/2058150115619791027.html>

3.鍵盤錄入

public static void main(String args[])
{

    Scanner sc = new Scanner(System.in);
    System.out.println("請您輸入第一個數據:");
    int num1 = sc.nextInt();
    System.out.println("請您輸入第二個數據:");
    int num2 = sc.nextInt();
    int max = num1 <= num2 ? num2 : num1;
    System.out.println((new StringBuilder("您輸入的最大值是:")).append(max).toString());
    }

    如上述代碼,先創建Scanner對象,創建對象時記得導入Java.util.Scanner包,因為只有導入這個包才可以創建Scanner對象,進而調用方法nextInt()獲取鍵盤錄入的內容;
    nextInt()代表獲取輸入的Int型對象;
    而代碼中int max = num1 <= num2 ? num2 : num1;
    ?:其實是一個三目運算符;
    代表的意思是如果符合num1 <= num2,則輸出num2,否則輸出num1;輸出的順序看num2 : num1;如果想輸出最小數,為 int min = num1<=num2?num1:num2;

4.三目運算符
?:三目運算符,比較大小,類似於if(){}else{},如三所示
三目運算符比較兩數是否相等時
boolean flag = num1==num2?true:false;
改進後
boolean flag = num1==num2;即可

5.邏輯運算符

&和 | 既是邏輯運算符也是位運算符,而&&和||只是邏輯運算符。

同為邏輯運算符,他們的區別在哪裏??
(1)當&與&&同為邏輯運算符時,它們都用於連接兩個Boolean類型的表達式,當&和&&的兩端表達式同時為真時,表達式的結果為真,只要有一端為假,那麽表達式結果為假。從用法上來看,&和&&並沒有什麽區別,比如我們可以寫兩個表達式:

          3>5&3>2;       3>5&&3>2;

          兩個運算符都可以這麽用,但是不同的是,當在判斷這個表達式的真或假的時候,兩者的判斷次數不同;

         當使用&運算符: 計算機在判斷表達式的值的時候,先判斷3>5 的值為假,然後再判斷3>2的結果為真,於是最後的結果是 假&真 為假;

         但是當我們使用&&運算符的時候:計算機先判斷3>5 的值為假,此時表達式的結果一定為假,所以計算機就不再往下判斷了,判定表達式結果為假。

         邏輯運算符&與&&的區別是:

         & 無論左邊結果是什麽,右邊還是繼續運算;

         &&當左邊為假,右邊不再進行運算。

         但是兩者的結果是一樣的。

        (2)當|和||的兩端表達式同時為假時,表達式的結果為假,只要有一端為真,那麽表達式結果為真。

         所以同理,我們可以知道|與||的區別:

         | 無論左邊結果是什麽,右邊還是繼續運算;

         ||當左邊為真,右邊不再進行運算。

         但是兩者的結果是一樣的。

         所以&&和||是比較高效一些;

                     如代碼所示:
                    public static void main(String args[])
{
    int a = 3;
    int b = 4;
    int c = 5;
    System.out.println(a > b & a > c);
    System.out.println(a > b && a > c);
    System.out.println(a < b && a > c);
    System.out.println(a < b && a < c);
    System.out.println("---------------------");
    int x = 3;
    int y = 4;
    boolean b1 = ++x == 3 && y++ == 4;
    System.out.println((new StringBuilder("x:")).append(x).toString());
    System.out.println((new StringBuilder("y:")).append(y).toString());
    System.out.println(b1);
}
輸出的前兩個雖然結果一樣,但是運行絕對不同;

!!!補充++x和x++的含義
++x會在本次運行中使x+1,進行改變;而x++則在本次運行中不改變;
如上述代碼;++x==3,則x=4;  y++==4,則y還是4;

代碼迷茫癥狀易錯點:boolean b1 = 4&&4;應該為true,可為什麽運行結果為false?

其實是x=3,++x與3進行比較為false,所以結果為false;在這裏boolean b1 = ++x == 3 && y++ == 4;是個三目運算符,連接的是兩個boolean關系的表達式,雖然有&&,但是只能代表&&左邊右邊分別為一個boolean的表達式;

6.算術運算符

  • 加 -減 *乘 /除 %除 ++ --

    /和%的區別?
    比如 int a = 3 ; int b = 4;
    a/b=0; /代表取整數;
    a%b=3; /代表取余數;

    如果要求出a/b的確切答案,最好定義int(整型)為double(雙精度型);如果定義的為int型,如上面運算,則進行強制轉換;
    強制轉換為double:   ((double)a*1.0d)/(double)b=0.75;
    1.0d代表的對double的生命,不加也不會出錯,最好加上,而前面的(double)代表強制轉換為double類型;
    
    如代碼所示:
    
    public static void main(String args[])

    {

    int x = 3;
    int y = 4;
    int m = x++;
    int n = y--;
    System.out.println((new StringBuilder("x:")).append(x).toString());
    System.out.println((new StringBuilder("y:")).append(y).toString());
    System.out.println((new StringBuilder("m:")).append(m).toString());
    System.out.println((new StringBuilder("n:")).append(n).toString());

    }

    ++x會在本次運行中使x+1,進行改變;而x++則在本次運行中不改變;

    如上述代碼;++x==3,則x=4; y++==4,則y還是4;

    則上述代碼輸出結果為 x:4 y:3 m:3 n:4
    原因是x++ 中x並沒有先+,而是先給m賦值,所以m為3,之後x自行加1,則x為4,y同理.

    7.流程控制語句

    (1)順序結構 從上往下,依次執行
    (2)選擇結構 按照不同的選擇,執行不同的代碼
    (3)循環結構 做一些重復的代碼

    if語句

    **格式:
    if(條件){滿足條件後的運行語句};(1)
    else if(條件){滿足條件後的運行語句};(2)
    else{不滿足上述條件的其他所有情況的運行語句};(3)
    上述三行第一行單獨是一種格式,第一行和第三行合起來是一種格式,三行一起是一種格式;
    註意點:
    A:比較表達式無論簡單還是復雜,結果是boolean類型
    B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
    建議:永遠不要省略。
    C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。
    D:else後面如果沒有if,是不會出現比較表達式的。
    E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。

**如果運行語句只有一句,可以不加{};
如代碼:
public static void main(String args[])
{
int x = 10;
if(x!=10)
System.out.println("x等於10");
if (x == 20)
System.out.println("x等於20");
System.out.println("over");
}
運行結果:over

**易錯點,小心;的添加,上述代碼,如果給if(x!=10)後面加;  ,會出現如下情況

    public static void main(String args[])
{
    int x = 10;
    if (x != 10);
    System.out.println("x等於10");
    if (x == 20)
        System.out.println("x等於20");
    System.out.println("over");
}
    運算結果:x等於10    over
    *為什麽?
    此時的分號可以讓此次if語句無效,則會直接輸出,然後進入下次的if語句;

    switch語句

    **格式:
    switch(表達式) {
        case 值1:
            語句體1;
            break;
        case 值2:
            語句體2;
            break;
        ...
        default:
            語句體n+1;
            break;
    }

    **格式解釋說明:
        switch:說明這是switch語句。
        表達式:可以是byte,short,int,char
            JDK5以後可以是枚舉
            JDK7以後可以是字符串
        case:後面的值就是要和表達式進行比較的值
        break:表示程序到這裏中斷,跳出switch語句
        default:如果所有的情況都不匹配,就執行這裏,相當於if語句中的else

                **小問題: switch語句的表達式可以是byte嗎?可以是long嗎?可以是String嗎?
        可以,不可以,JDK7以後可以

**執行流程:
A:首先計算表達式的值
B:和每一個case進行匹配,如果有就執行對應的語句體,看到break就結束。
C:如果沒有匹配,就執行default的語句體n+1。

            **註意事項:
    A:case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的
    B:default可以省略嗎?
        可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
        特殊情況:
            case就可以把值固定。
            A,B,C,D
    C:break可以省略嗎?
        可以省略,但是結果可能不是我們想要的。
        會出現一個現象:case穿透。
        最終我們建議不要省略
    D:default一定要在最後嗎?
        不是,可以在任意位置。但是建議在最後。
    E:switch語句的結束條件
        a:遇到break就結束了
        b:執行到末尾就結束了

            ****if語句和switch語句各自的場景
    A:if
        針對boolean類型的判斷
        針對一個範圍的判斷
        針對幾個常量的判斷
    B:switch
        針對幾個常量的判斷

    **下面對循環語句做出解釋:
    for,while,do...while

    **for循環語句
    A:格式
        for(初始化語句;判斷條件語句;控制條件語句){
            循環體語句;
        }

     **執行流程:
            a:執行初始化語句
            b:執行判斷條件語句
                如果這裏是true,就繼續
                如果這裏是false,循環就結束
            c:執行循環體語句
            d:執行控制條件語句
            e:回到b
     **B:註意事項
        a:判斷條件語句無論簡單還是復雜,結果是boolean類型
        b:循環體語句如果是一條,可以省略大括號,但是不建議
        c:有分號就沒有左大括號,有左大括號就沒有分號

                    **while循環
    **A:基本格式
        while(判斷條件語句) {
            循環體語句;
        }

     **擴展格式:
        初始化語句;
        while(判斷條件語句){
            循環體語句;
            控制條件語句;
        }

        通過查看這個格式,我們就知道while循環可以和for循環等價轉換。

            **for和while的區別
        **a:使用上的區別
            for語句的那個控制條件變量,在循環結束後不能在使用了。
            而while的可以繼續使用。
        b:理解上的區別
            for適合於一個範圍的判斷
            while適合次數不明確的

                **do...while循環
   ** A:基本格式
        do {
            循環體語句;
        }while(判斷條件語句);

        **擴展格式:
        初始化語句;
        do {
            循環體語句;
            控制條件語句;
        }while(判斷條件語句);

        通過查看格式,我們就可以看出其實三種循環的格式可以是統一的。
   ** B:三種循環的區別
        a:do...while循環至少執行一次循環體
        b:for和while必須先判斷條件是否是true,然後後才能決定是否執行循環體

         **循環使用的註意事項(死循環)
    A:一定要註意修改控制條件,否則容易出現死循環。
    B:最簡單的死循環格式
        a:while(true){...}

        b:for(;;){}

java 運算符,流程控制語句,鍵盤錄入