1. 程式人生 > >ITLearnNote—-聚焦網際網路的技術革新

ITLearnNote—-聚焦網際網路的技術革新

3.1 邏輯運算子的基本用法

A:邏輯運算子有哪些

    邏輯與&,邏輯或|,邏輯異或^,邏輯非!

    短路與&&,短路或||

B:案例演示

class Demo1_Operator {

    public static void main(String[] args) {

       //&,|,^,!

       //int x = 10;

       //5 < x < 15

       //x > 5 & x < 15

       //邏輯與 & 並且and 遇false則false

       int a = 10;

       int b = 20;

       int c = 30;

/*System.out.println(a < b & b < c);//true & true = true

System.out.println(a < b & b > c);//true & false = false

System.out.println(a > b & b < c);//false & true = false

System.out.println(a > b & b > c);//false & false = false//邏輯或 或or 遇true則true

System.out.println(a < b | b < c);//true | true = true

System.out.println(a < b | b > c); //true | false = true

System.out.println(a > b | b < c); //false | true = true

System.out.println(a > b | b > c); //false | flase = false

//邏輯異或 ^ 兩邊相同為false,兩邊不同為true

/*System.out.println(a < b ^ b < c);//true | true = false

System.out.println(a < b ^ b > c); //true | false = true

System.out.println(a > b ^ b < c); //false | true = true

System.out.println(a > b ^ b > c); //false | flase = false*/

//邏輯非!

System.out.println(!true);

System.out.println(!!true);

    }

}

注意事項:

a:邏輯運算子一般用於連線boolean型別的表示式或者值。

b:表示式:就是用運算子把常量或者變數連線起來的符合java語法的式子。

算術表示式:a + b

比較表示式:a == b(條件表示式)

C:結論

&邏輯與:有false則false。

|邏輯或:有true則true。

^邏輯異或:相同為false,不同為true。

!邏輯非:非false則true,非true則false。

特點:偶數個不改變本身。

3.2 邏輯運算子&&和&的區別

&&和&的區別?

a:最終結果一樣。

b:&&具有短路效果。左邊是false,右邊不執行。

    &是無論左邊是false還是true,右邊都會執行

||與|的區別

a:最終的結果是一樣

b:||具有短路效果,左邊為true,右邊不執行

3.3 位運算子的基本用法1

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1541327161606&di=871e79358a7f00be308be2317e4565a8&imgtype=0&src=http%3A%2F%2Fs5.51cto.com%2Fwyfs02%2FM02%2F87%2F4D%2FwKiom1fbhkzQhuwAAABJ6NCWf20023.png

&:有0則0

|:有1則1

^:相同則0,不同則1

~:按位取反

System.out.println(6 & 3); //2

System.out.println(6 | 3); //7

System.out.println(6 ^ 3); //5

System.out.println(~6); //-7

3.4 位異或運算子的特點

位異或運算子的特點

^的特點:一個數據對另一個數據位異或兩次,該數本身不變。

class Demo2_Operator {

    public static void main(String[] args) {

        //System.out.println(5 ^ 10 ^ 10);

        //System.out.println(5 ^ 10 ^ 5);

        /*

        * 請自己實現兩個整數變數的交換(不需要定義第三方變數)

        * 注意:以後講課的過程中,我沒有明確指定資料的型別,預設int型別。

        */

        int x = 10;

        int y = 5;

        //需要第三方變數,開發推薦用這種

        /*int temp;

        temp = x;

        x = y;

        y = temp;*/

        //不需要定義第三方變數,有弊端,有可能會超出int的取值範圍

        /*x = x + y;  //10 + 5 = 15

        y = x - y; //15 - 5 = 10

        x = x - y; //15 - 10 = 5*/

        //不需要第三方變數,通過^來做

        x = x ^ y; // 10 ^ 5

        y = x ^ y; // 10 ^ 5 ^ 5   y = 10

        x = x ^ y; // 10 ^ 5 ^ 10  x = 5

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

    }

}

3.5 位運算的基本用法2及面試題

A:案例演示 >>,>>>,<<的用法: 

<<:左移 左邊最高位丟棄,右邊補齊0

>>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1

>>>:無符號右移 無論最高位是0還是1,左邊補齊0

最有效率的算出2 * 8的結果

class Demo3_Operator {

    public static void main(String[] args) {

       //左移,向左移動幾位就是乘以2的幾次冪

       //System.out.println(12 << 1);     //24

       //System.out.println(12 << 2);     //48

       /*

       00000000 00000000 00000000 00001100       12的補碼

     (0)0000000 00000000 00000000 000011000       24的補碼

    (00)000000 00000000 00000000 0000110000       48的補碼

       */

       //右移,向右移動幾位就是除以2的幾次冪

       //System.out.println(12 >> 1);

       //System.out.println(12 >> 2);

       /*

       00000000 00000000 00000000 00001100       12的補碼

       000000000 00000000 00000000 0000110(0) 6

       0000000000 00000000 00000000 000011(00) 3

       */

       //最有效率的算出2 * 8的結果

       System.out.println(2 << 3);

    }

}

3.6 三元運算子的基本用法

三元運算子的格式:(關係表示式) ? 表示式1 : 表示式2;

class Demo1_Operator {

    public static void main(String[] args) {

       //(關係表示式) ? 表示式1 : 表示式2;

       int x = 10;

       int y = 5;

       int z;

       z = (x > y) ? x : y;

       System.out.println("z = " + z);

    }

}

3.7 三元運算子的練習

class Test1_Operator {

    public static void main(String[] args) {

       /*

       * A:案例演示

           * 比較兩個整數是否相同

       * B:案例演示

           * 獲取三個整數中的最大值

       */

       //比較兩個整數是否相同

       /*int x = 10;

       int y = 10;

       //boolean b = (x == y) ? true : false;

       boolean b = (x == y);

       System.out.println("b = " +  b);*/

       //獲取三個整數中的最大值

       int a = 10;

       int b = 20;

       int c = 30;

       //先比較任意兩個數的值,找出這兩個數中的最大值

       int temp = (a > b) ? a : b;

       //用前兩個數的最大值與第三個數比較,獲取最大值

       int max = (temp > c) ? temp : c;

       System.out.println("max =" + max);

    }

}

3.8 鍵盤錄入的基本格式講解

A:為什麼要使用鍵盤錄入資料

a:為了讓程式的資料更符合開發的資料

b:讓程式更靈活一下

B:如何實現鍵盤錄入呢?

先照格式來。

a:導包

格式: import java.util.Scanner;

位置: 在class上面。

b:建立鍵盤錄入物件

格式: Scanner sc = new Scanner(System.in);

c:通過物件獲取資料

格式: int x = sc.nextInt();

3.9 鍵盤錄入的練習1

* 鍵盤錄入練習:鍵盤錄入兩個資料,並對這兩個資料求和,輸出其結果

* 鍵盤錄入練習:鍵盤錄入兩個資料,獲取這兩個資料中的最大值

import java.util.Scanner; //匯入包中的類Scanner

class Test2_Scanner {

    public static void main(String[] args) {

Scanner sc = new Scanner(System.in);//建立鍵盤錄入物件

//鍵盤錄入練習:鍵盤錄入兩個資料,並對這兩個資料求和,輸出其結果

/*System.out.println("請輸入第一個整數:");

int x = sc.nextInt();//將鍵盤錄入的資料儲存在x中

System.out.println("請輸入第二個整數:");

int y = sc.nextInt();//將鍵盤錄入的資料儲存在y中

int sum = x + y;

System.out.println(sum);*/

//鍵盤錄入練習:鍵盤錄入兩個資料,獲取這兩個資料中的最大值

System.out.println("請輸入第一個整數:");

int x = sc.nextInt();//將鍵盤錄入的資料儲存在x中

System.out.println("請輸入第二個整數:");

int y = sc.nextInt();//將鍵盤錄入的資料儲存在y中

int max = (x > y) ? x : y;//獲取x和y中的最大值

System.out.println("max = " + max);

    }

}

3.10 鍵盤錄入的練習2

    * 鍵盤錄入練習:鍵盤錄入兩個資料,比較這兩個資料是否相等

    * 鍵盤錄入練習:鍵盤錄入三個資料,獲取這三個資料中的最大值

import java.util.Scanner;                        //導包

class Test3_Scanner {

    public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);      //建立鍵盤錄入物件

       //鍵盤錄入練習:鍵盤錄入兩個資料,比較這兩個資料是否相等

       /*System.out.println("請輸入第一個整數:");

       int x = sc.nextInt();                     //將鍵盤錄入的資料儲存在x中

       System.out.println("請輸入第二個整數:");

       int y = sc.nextInt();                     //將鍵盤錄入的資料儲存在y中

       //boolean b = (x == y)? true : false;

       boolean b = (x == y);

       System.out.println(b);*/

       //鍵盤錄入練習:鍵盤錄入三個資料,獲取這三個資料中的最大值

       System.out.println("請輸入第一個整數:");

       int x = sc.nextInt();                     //將鍵盤錄入的資料儲存在x中

       System.out.println("請輸入第二個整數:");

       int y = sc.nextInt();                     //將鍵盤錄入的資料儲存在y中

       System.out.println("請輸入第三個整數:");

       int z = sc.nextInt();                     //將鍵盤錄入的資料儲存在y中

       //定義臨時變數記錄住比較出前兩個變數中的最大值

       int temp = (x > y) ? x : y;

       //將比較後的結果與第三個變數中的值比較,比較出三個數中的最大值

       int max = (temp > z) ? temp : z;

       System.out.println(max);

    }

}

3.11 順序結構語句

  • A:什麼是流程控制語句 
    • 流程控制語句:可以控制程式的執行流程。
  • B:流程控制語句的分類 
    • 順序結構
    • 選擇結構
    • 迴圈結構
  • C:執行流程: 
    • 從上往下,依次執行。
  • D:案例演示 

class Demo1_Sequence {                        //sequence 順序

    public static void main(String[] args) {

       System.out.println("Hello World!11111");

       System.out.println("Hello World!3333");

       System.out.println("Hello World!22222");

       System.out.println("Hello World!44444");

    }

}

3.12 選擇結構if語句格式1及其使用

  • A:選擇結構的分類 
    • if語句
    • switch語句
  • B:if語句有幾種格式 
    • 格式1
    • 格式2
    • 格式3
  • C:if語句的格式1

  • if(比較表示式) { 
    語句體; 
    }
  • D:執行流程: 
    • 先計算比較表示式的值,看其返回值是true還是false。
    • 如果是true,就執行語句體;
    • 如果是false,就不執行語句體;

class Demo1_If {

    public static void main(String[] args) {

       int age = 17;

       if (age >= 18) {

           System.out.println("可以瀏覽本網站");

       }

       System.out.println("完了");

    }

}

3.13 選擇結構if語句注意事項

比較表示式無論簡單還是複雜,結果必須是boolean型別

if語句控制的語句體如果是一條語句,大括號可以省略;

如果是多條語句,就不能省略。建議永遠不要省略。

一般來說:有左大括號就沒有分號,有分號就沒有左大括號

class Demo2_If {

    public static void main(String[] args) {

       int age = 17;

       if (age >= 18 && age <= 60) {

           System.out.println("可以瀏覽本網站");

           //int x = 10;            是兩句話,int x宣告是一句,x = 10 賦值是一句

       }

       System.out.println("完了");

    }

}

3.14 選擇結構if語句格式2及其使用

  • A:if語句的格式2
    if(比較表示式) { 
    語句體1; 
    }else { 
    語句體2; 
    }
  • B:執行流程: 
    • 首先計算比較表示式的值,看其返回值是true還是false。
    • 如果是true,就執行語句體1;
    • 如果是false,就執行語句體2;
  • C:案例演示
    • a:獲取兩個資料中較大的值
    • b:判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數
    • 注意事項:else後面是沒有比較表示式的,只有if後面有。

class Demo3_If {

    public static void main(String[] args) {

       /*int x = 0;

       if (x == 1) {

           System.out.println("男廁所歡迎您");

       }else {

           System.out.println("女廁所歡迎您");

       }*/   

       //a:獲取兩個資料中較大的值

       /*int x = 10;

       int y = 20;

       int z;

       if (x > y) {

           z = x;

       }else {

           z = y;

       }

       System.out.println(z);*/

       //b:判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數

       int num = 11;

       if (num % 2 == 0) {

           System.out.println(num + "是一個偶數");

       }else {

           System.out.println(num + "是一個奇數");

       }

    }

}

3.15 if語句的格式2和三元的相互轉換問題

  • A:案例演示 
    • if語句和三元運算子完成同一個效果
  • B:案例演示
    • if語句和三元運算子的區別
    • 三元運算子實現的,都可以採用if語句實現。反之不成立。
    • 什麼時候if語句實現不能用三元改進呢?
      • 當if語句控制的操作是一個輸出語句的時候就不能。
      • 為什麼呢?因為三元運算子是一個運算子,運算子操作完畢就應該有一個結果,而不是一個輸出。

class Demo4_If {

    public static void main(String[] args) {

       int x = 10;

       int y = 20;

       int z;

       if (x > y) {

           //z = x;

           System.out.println(x + "是最大值");

       }else {

           //z = y;

           System.out.println(y + "是最大值");

       }

       //System.out.println(z);

       int a = 20;

       int b = 30;

       int c = (a > b)? a : b;

    }

}

3.16 選擇結構if語句格式3及其使用

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

B:執行流程:

首先計算比較表示式1看其返回值是true還是false,

如果是true,就執行語句體1,if語句結束。

如果是false,接著計算比較表示式2看其返回值是true還是false,

如果是true,就執行語句體2,if語句結束。

如果是false,接著計算比較表示式3看其返回值是true還是false,

如果都是false,就執行語句體n+1。

C:注意事項:最後一個else可以省略,但是建議不要省略,可以對範圍外的錯誤值提示

class Demo5_If {

    public static void main(String[] args) {

       int x = 2;

       if (x == 1) {

           System.out.println("先生歡迎您");

       }else if (x == 0) {

           System.out.println("女生歡迎您");

       }else {

           System.out.println("無法識別您的性別");

       }

    }

}

3.17 選擇結構if語句格式3練習

A:練習1

需求:鍵盤錄入一個成績,判斷並輸出成績的等級。

90-100 優

80-89  良

70-79  中

60-69  及

0-59   差

B:練習2

需求:鍵盤錄入x的值,計算出y的並輸出。

x>=3 y = 2 * x + 1;

-1

x<=-1 y = 2 * x - 1;

import java.util.Scanner;

class Test1_If {

    public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);

       //需求:鍵盤錄入一個成績,判斷並輸出成績的等級。

       /*System.out.println("請輸入學生成績範圍在1到100之間");

       int x = sc.nextInt();

       if (x >= 90 && x <= 100) {

           System.out.println("優");

       }else if (x >= 80 && x <= 89 ) {

           System.out.println("良");

       }else if (x >= 70 && x <= 79 ) {

           System.out.println("中");

       }else if (x >= 60 && x <= 69 ) {

           System.out.println("及");

       }else if (x >= 0 && x <= 59 ) {

           System.out.println("差");

       }else {

           System.out.println("成績錄入錯誤");

       }*/

       //需求: 鍵盤錄入x的值,計算出y的並輸出

       System.out.println("請輸入一個整數:");

       int x = sc.nextInt();

       int y = 0;

       if (x >= 3) {

           y = 2 * x + 1;

       }else if (x > -1 && x < 3) {

           y = 2 * x;

       }else if (x <= -1) {

           y = 2 * x - 1;

       }

       System.out.println(y);

    }

}

3.18 選擇結構if語句的巢狀使用

需求:獲取三個資料中的最大值(if的巢狀使用)

class Demo6_IfIf {

    public static void main(String[] args) {

       int a = 40;

       int b = 50;

       int c = 30;

       if (a > b) {

           if (a > c) {

              System.out.println(a + "是最大值");

           }else {

              System.out.println(c + "是最大值");

           }

       }else {    //b >= a

           if (b > c) {

              System.out.println(b + "是最大值");

           }else {

              System.out.println(c + "是最大值");

           }

       }

    }

}

3.19 選擇結構switch語句的格式及其解釋

A:switch語句的格式

int x = 10;

switch(表示式) {     //基本資料型別可以接收byte,short,char,int

case 值1:     //引用資料型別可以接收列舉(JDK1.5)String字串(JDK1.7)

語句體1;

break;

case 值2:

語句體2;

break;

default:

語句體n+1;

break;

}

B:執行流程

先計算表示式的值,然後和case後面的匹配,如果有就執行對應的語句,否則執行default控制的語句

class Demo1_Switch {

    public static void main(String[] args) {

       String name = "rose";

       String gender = "妖";

       switch (gender) {

       case "男士":

           System.out.println(name + "是一位" + gender + "喜歡吃飯睡覺打dota");

       break;

       case "女士":

           System.out.println(name + "是一位" + gender + "喜歡逛街購物美容");

       break;

       default:

           System.out.println(name + "是一位" + gender + "打雌性激素維持美貌容顏");

       break;

       }

    }

}

3.20 選擇結構switch語句的練習

給定一個值,輸出對應星期幾

class Test1_Switch {

    public static void main(String[] args) {

       int week = 1;

       switch (week) {

       case 1:

           System.out.println("星期一");

       break;

       case 2:

           System.out.println("星期二");

       break;

       case 3:

           System.out.println("星期三");

       break;

       case 4:

           System.out.println("星期四");

       break;

       case 5:

           System.out.println("星期五");

       break;

       case 6:

           System.out.println("星期六");

       break;

       case 7:

           System.out.println("星期日");

       break;

       default:

           System.out.println("對不起沒有對應的星期");

       break;

       }

    }

}

3.21 選擇結構switch語句的注意事項

A:案例演示

  • a:case後面只能是常量,不能是變數,而且,多個case後面的值不能出現相同的

b:default可以省略嗎?

    • 可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
    • 特殊情況:
      • case就可以把值固定。
      • A,B,C,D

c:break可以省略嗎?

    • 最後一個可以省略,其他最好不要省略
    • 會出現一個現象:case穿透。
    • 最終我們建議不要省略

d:default一定要在最後嗎?

    • 不是,可以在任意位置。但是建議在最後。

e:switch語句的結束條件

    • a:遇到break就結束了
    • b:執行到switch的右大括號就結束了

3.22 選擇結構switch語句練習

class Test2_Switch {

    public static void main(String[] args) {

       // A:看程式寫結果:

       /*int x = 2;

       int y = 3;

       switch(x){

           default:

              y++;

              break;

           case 3:

              y++;

           case 4:

              y++;

       }

       System.out.println("y="+y);*/

    //B:看程式寫結果:

       int x = 2;

       int y = 3;

       switch(x){

           default:

              y++;

           case 3:

              y++;

           case 4:

              y++;

       }

       System.out.println("y="+y);

    }

}

3.23 選擇結構if語句和switch語句的區別

A:總結switch語句和if語句的各自使用場景

switch建議判斷固定值的時候用

if建議判斷區間或範圍的時候用

B:案例演示

分別用switch語句和if語句實現下列需求:

鍵盤錄入月份,輸出對應的季節

import java.util.Scanner;

class Test3_SwitchIf {

    public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);   //建立鍵盤錄入物件

       System.out.println("請輸入月份");

       int month = sc.nextInt();       //將鍵盤錄入的結果儲存在month

       /*switch (month) {

       case 3:

       case 4:

       case 5:

           System.out.println(month + "月是春季");

       break;

       case 6:

       case 7:

       case 8:

           System.out.println(month + "月是夏季");

       break;

       case 9:

       case 10:

       case 11:

           System.out.println(month + "月是秋季");

       break;

       case 12:

       case 1:

       case 2:

           System.out.println(month + "月是冬季");

       break;

       default:

           System.out.println("對不起沒有對應的季節");

       break;

       }*/

       //用if語句來完成月份對應季節

       if (month > 12 || month < 1) {

           System.out.println("對不起沒有對應的季節");

       }else if (month >= 3 && month <= 5) {

           System.out.println(month + "月是春季");

       }else if (month >= 6 && month <= 8) {

           System.out.println(month + "月是夏季");

       }else if (month >= 9 && month <= 11) {

           System.out.println(month + "月是秋季");

       }else {

           System.out.println(month + "月是冬季");

       }

    }

}