1. 程式人生 > >java基礎複習(三)

java基礎複習(三)

一、運算子

  1.算術運算子

    1) 加法(+ 加法   正號  字串拼接

    2) 減法(- 減法 負號

    3) 乘法 * 乘法

    4) 除法(/) 除法

      •     整數(小數)相除的例子

            10/3 =3;  10.0/3=3.33333

      •      0/0
      •      0.0/0.0  

            結果是NaN ,任何的NaN都不等於自己(面試題)

      •     1.0/0.0

            Infinity,表示無窮大

            

    5) 取模(%)

            

  2.自增自減

  ++(自增)     --(自減)

     自增自減只能夠用於 變數,不能用於常量  

     自增自減運算的優先順序  

 算術運算子  

    1)基本的使用

      1)

int  i=3;  // 表示把3賦值給變數i

i++;      //表示變數i的值加1i的值變成4

++i;      //表示變數i的值加 1i的值變成5

        

      2)

        

int i=3;

int j = i++;

i等於多少,j等於多少?


        

      3)

        

int i=3;

int j = ++i;

i等於多少,j等於多少?

         

        區別

          把整個表示式看成是一個整體。

          如果變數名在前面,那麼整個表示式的值就是原來值不變。

          如果變數名在後面,那麼整個表示式的值就是原來的值加

    2)常見的面試題

       1.

        

      2.

        

      3.

        

    3)練習

      1.

int i=5;

i++;

System.out.println("i="+i);//6

++i;

System.out.println("i="+i);//7

int a=++i;

System.out.println("a="+a);//8 i=8

a = a++;

System.out.println("a="+a);//8

a = ++a;

System.out.println("a="+a);//9

 

 

       2.

     4)總結

       不要把單獨的  自增自減    有表示式的自增自減搞混淆了

      

i++;

 

int j =i++;

 

    

       一定要弄清楚計算規則,表示式的值     具體計數器的值的變化是什麼

 

  3.賦值運算   

    =    +=     -=     *=     /=    %=

    1) 賦值符號的運算順序?    

      從右到左,把符號右邊的值賦值到左邊的變數中

    2) 上面 後五個分別看成是一個整體: 例如 += 看成是一個符號,不要看成兩個;

int i=3; 

i +=2;// 表示把2 累加到變數 i 中

i -=1;

i *=3;

i /=3;

i%=3;

 

       特例

short s = 3;

s += 2;   ----OK

 

short  s = 3;

s = s+2;//結果值是intint不能自動轉換為short

 

  

  4.比較運算子

  ==    !=     >    <    >=    <=    instanceof

    規律:比較運算的結果是一個布林型別的值(true false);   

  • 舉例:

 

    定義一個布林表示式,列印輸出

 

  • 特別說明:instanceof 是判斷一個物件是否屬於某種型別

 

             是否可以用於我們之前學習的基本資料型別(回憶一下我們之前學習的資料型別除了基本資料型別 還有什麼?)

  

  

  5.邏輯運算 

    &    |     &&     ||   ^    

  是應用於多個條件的組合判斷。

    •   示例說明:

    例如小明參加2個學科的考試 java php  

    1) java php 同時考100分,獎勵 歐洲十日遊

    虛擬碼描述:java==100 並且 php==100

    2) java php,只要有一門考100分,獎勵 原始碼優惠券2000元一張

     虛擬碼描述:java==100 或者 php==100

  • 邏輯運算的兩邊結果值都必須是什麼型別?  布林

  &   :兩邊都為true ,結果為true

  |     只要有一邊為true,結果為true

  &&    兩邊都為true ,結果為true

  ||    : 只要有一邊為true,結果為true

  ^    : 兩邊不一樣,結果為true ,否則為false,舉個例子列印一下

  !   邏輯非,舉個例子列印一下

  

  

  &&  ||   和   & |    區別?

    1)  & | 既可以充當邏輯運算,也可以是位運算子,怎麼區分是邏輯運算還是位運算?

       根據表示式的結果是否為 布林型別 來判斷

    2) 雙與  雙或  具有短路行為  什麼意思?

    舉個例子 上面小明的考試的成績 要求是兩科都為100分,看到第一科低於100分之後沒有必要再看第二科成績

    程式碼表示:Java = 100  && php = 100   (java只考了5

    如果邏輯運算左邊的值能夠確定整個邏輯運算表示式的值,那麼右邊就不執行了,短路了。

        && 何時短路 ?    左邊表示式結果為false

        ||  何時短路 ?    左邊表示式結果為true

  • 思考:如何驗證短路行為?

  提示:

    右邊表示式用  自增自減,例如 ++i = 5

    或者使用一個編譯正常,執行報錯的表示式,例如 1/0

      

     常見錯誤

        例如:判斷一個整數的變數 a裡面的資料  在0-100之間

        正確寫法 a>0   &&  a<100

        錯誤寫法:   0<  a < 100  (java沒有這種語法,不支援)

  6.位運算子 

  &    |    ^     ~    <<      >>     >>>

   位運算就是 二進位制的位進行運算。

 

  •   示例:比如計算 125+176 ,從數學的角度是怎麼計算的?
  •   同理,位運算也類似,比如 3&4

 

 

  可以把1看成是true,0看成是false

 

  &  :與 位運算,兩邊為1,結果為1

 

  |   :或 位運算,有一個為1,結果為1

 

  ^  :  異或,兩邊不一樣,就為1,否則為0

 

  ~  :  取反,1變成0  ,0 變成1

 

  << :  向左位移動,例如1<<3                      

 

  >> :   向右位移動,例如8>>2        

 

  >>>:  無符號向右移動

  

  

    注意:正數的補碼,反碼,原碼 都一樣;

              負數的反碼:符號為不變,其他位取反;

              負數的補碼:它的反碼+1;

  7.三目運算子  

    語法格式: X ? Y : Z

      1) 上面的三目運算整體看成是一個表示式,應該有一個結果值

      2) X ?  布林型別的值或者結果為布林型別的表示式

      3) Y  Z  ? 一般來說資料型別相同的值或者表示式

      4) 運算的規則?  

      X true,就是 Y 的結果值 ( 冒號前面的表示式的值)

      Xfalse,就是Z的結果值 ( 冒號後面的表示式的值)

      x ? y : z

 

    注意  不要受      :  的干擾,它們只是一個固定語法格式而已

    示例1 找出兩個整型變數中的最大值

    

    示例2:判斷一個數是 奇數 還是 偶數

    

    示例3 例如小明學習java 考試成績  >=60 顯示 非常優秀   否則輸出 還有很大的提升空間。

    

二、條件選擇結構

  

  • 舉例: 加個條件 列印一句話。

 

           if(1==2){

 

  System.out.println(“今晚請大家吃大餐!”);

 

                   }

 

 

 

  • 示例  

 

智慧機器人開發一套軟體負責智慧上廁所應該獲取硬體裝置上的性別標識)。

 

1.

 

                     

 

 

if(判斷條件){

滿足 判斷條件(true),就執行此大括號裡面的內容

}

 

 

 

                     2.

 

 

 

  if(判斷條件A){

          滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else不會執行

   }else{

           前面的 判斷條件Afalse),執行else大括號裡面的內容

   }

 

 

 

                   3.  

 

 

 

 if(判斷條件A){

 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行

}else if(判斷條件B){

滿足 判斷條件B(true),就執行此大括號裡面的內容

}

 

 

                    4.

 

 

 

if(判斷條件A){

 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行

   }else if(判斷條件B){

       滿足 判斷條件B(true),就執行此大括號裡面的內容

         }else{

前面的if  esle-if 都不滿足條件(false),執行此大括號裡面的內容

        }

 

 

 

    

 

5

 

   else if 可以有多個

 

if(判斷條件A){

 滿足 判斷條件A(true),就執行此大括號裡面的內容,後面的else-if不執行

   }else if(判斷條件B){

       滿足 判斷條件B(true),就執行此大括號裡面的內容,後面的else-if else 不執行

  } else if(判斷條件C){

       滿足 判斷條件C(true),就執行此大括號裡面的內容,後面的 else 不執行

         }else{

前面的if  esle-if 都不滿足條件(false),執行此大括號裡面的內容

        }

 

 

 

 

 

 

  • 總結 
  • if 後面的大括號如果不寫,表示執行是後面的第一行程式碼(不建議這樣寫)

    

  • 練習
  1. 求出2個變數中的最大值
  2. 判斷一個數是否是3的倍數

       ①  int a = 10;

      a %3 == 0 ?”就是3的倍數”:”不是”

       ②if(a %3 == 0 ){

           System.out.println(”就是3的倍數”)

      }else{

           System.out.println(”不是3的倍數”); 

      }

  3.小明java 考試成績  按等級分   A B C  D ,判斷變數值在不同的範圍的,列印輸出不同的等級

 

90~100 A等。

80-89 B等。

70-79 C等。

60-69 D等。

60以下E等。

 

    int score = 99;

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

            }else if(score>=80 && scorce <90 ){

             }else if(score>=70 && scorce <80 ){

             }else if(score>=60 && scorce <70){

             }else{

             }

 

三、條件選擇結構-switch

 

作用和if差不多,只是語法結構不一致而已。

  語法

switch(變數或者一個表示式){

case 變數的可能值1: 功能語句;break;

case 變數的可能值2: 功能語句;break;

case 變數的可能值3: 功能語句;break;

........

default:功能語句;break;

}

 

 

   

  示例 假設定義一個變量表示星期,然後使用switch結構,根據不同星期列印做不同的事情。

   

  

---------------------------------

  特殊的一些情況:

  1)  case的順序(包括default) 可以是任意的,           但是建議先按照case的值的大小順序排列,default放最後

  2) 執行順序,是先依次找完所有的case,如果都不匹配才會執行default

  3)  break的作用,結束當前的這個switch結構

    •   從第一個匹配的條件開始,到第一個break之間的所有case判斷失效
    • 在執行功能語句時,如果到末尾都沒有break,自動結束,不會再迴圈回去。
    • 最後一個break 可以省略掉,但是建議還是寫上
    • 再舉例 一個 列印 春夏秋冬的例子?

        

  5) ase後面的值應該和變數的型別一致;

  6)  switch中的()中的變數地方型別可以是哪些?

  java5之前   :  byte short char int

  java5支援   :   enum列舉  (面向物件部分學習了之後回頭測試)

  java7支援   :  String 型別

 四、迴圈的作用

  

  • 每一天重複乾的事情? 

      睡覺 吃飯 耍朋友

  • 比如酷狗音樂的播放模式? 

       單曲迴圈 列表迴圈

  • 再比如說列印10句相同的內容?

  

Java中提供了3  種迴圈?

while  do-while  for

  1.上面的3中迴圈功能都是一樣的,只是語法結構不一樣,很多時候是可以相互交換的 既然都差不多,為什麼有多個呢?  

    不同的迴圈結構,有不同的使用場景和優勢

  2.在寫迴圈程式碼之前呢?

    1) 要做什麼事情

    2) 次數

    3) 要寫迴圈,必須知道迴圈的語法

五、while的基本用法

  

while

語法格式:

while(條件(布林型別的)){

// 迴圈體à具體做什麼事情

}

 

 

  • 執行流程

1.一個迴圈可能會迴圈執行多次

  第一次判斷條件true,繼續執行

  第二次判斷條件true,繼續執行

  第三次判斷條件true,繼續執行

  。。。。。

  直到第n次判斷條件false,終止迴圈

 2.為什麼第一次 第二次是true 。。。 n次就是false?

  • 條件可以是一個常量

  舉個例子(條件為布林值true)

  

  • 一般我們使用一個變數來充當條件迴圈,

  舉個例子:播放一首歌,迴圈播放10

    1) 定義一個整數的變數記錄迴圈的次數

    2) 迴圈一次,自增一次

    3) 根據次數進行判斷

  

3.寫一段程式碼計算1-10的和

  1) 傳統的做法

    1+2+3+4+5+6+7+8+9+10

    如果要求計算1-100 1-1000 這樣寫是否合理?

     可以動態的獲得每一個加數

  2) 使用while迴圈每迴圈一次把取到的加數累加起來

  3) 在迴圈的外面定義一個變數用來放計算的和的值

  

練習

  1. 求出10以內2的倍數的數字 和 個數。
  2. 求出 1-10的所有偶數的和

六、do-while基本用法

 

l do-while    先執行一次,再判斷

 

語法格式:

 

do{

    // 迴圈體

}while(條件);

 

 

 

舉例:迴圈10

 

  • while區別?

 

  1) 定義一個 布林變數,預設值false

 

  2) 將這個布林變數放在 while  do-while 條件中,看有什麼區別