Java基礎語法(數(shù)據(jù)類型蜒程、運算符、流程控制語句)

Java基礎語法

數(shù)據(jù)類型

注意 : Java語言是強制類型語言. 任何的數(shù)據(jù),都是進行嚴格分類的

方便管理數(shù)據(jù),Java語言將數(shù)據(jù)分成了兩大類別.

  • 基本數(shù)據(jù)類型 (四類八種)

    • 整型

      • 字節(jié)型 (關鍵字 byte)

        字節(jié)型在內存中,占用1個字節(jié)(8個二進制位)

        字節(jié)型的數(shù)據(jù)的取值范圍 -128 ~ 127

      • 短整型(關鍵字 short)

        短整型在內存中,占用2個字節(jié)(16個二進制位)

        短整型的數(shù)據(jù)的取值范圍 -32768 ~ 32767

      • 整型(關鍵字 int) Java的默認類型

        整型在內存中,占用4個字節(jié)(32個二進制位)

        整型的數(shù)據(jù)的取值范圍 -2147483648~ 2147483647

      • 長整型(關鍵字 long)

        長整型在內存中,占用8個字節(jié)(64個二進制位)

        長整型的數(shù)據(jù)的取值范圍 -9223372036854775808~ 9223372036854775807

    • 浮點

      • 單精度(關鍵字 float)

        單精度浮點在內存中,占用4個字節(jié)

        單精度浮點的數(shù)據(jù)的取值范圍 1.4E-45~ 3.4028235E38

      • 雙精度(關鍵字 double)Java的默認類型

        雙精度浮點在內存中,占用8個字節(jié)

        雙精度浮點的數(shù)據(jù)的取值范圍 4.9E-324~ 1.7976931348623157E308

    • 字符 (關鍵字 char)

      • 類型每次只能存儲1個字符
      • 字符型在內存中,占用2個字節(jié) (和short一致)
    • 布爾 (關鍵字 boolean)

      • 布爾類型只有true和false
      • 內存中占1個字節(jié)
  • 引用數(shù)據(jù)類型 (5種)

    • 數(shù)組 (英語 Array)
    • 類 (英語 class 也是關鍵字)
    • 接口 (英語 interface 也是關鍵字)
    • 枚舉 (英語 enum 也是關鍵字)
    • 注解 (英語 Annotation)

變量

變量 : 常量是固定不變化, 變量的數(shù)據(jù)是可以隨時改變的, 變量方便進行運算

變量的定義三要素 :

  • 明確數(shù)據(jù)類型
  • 變量的名字
  • 變量的值

變量定義的格式 :

數(shù)據(jù)類型 變量名字 = 值

public static void main(String[] args) {
        /*
         * 定義出所有的基本數(shù)據(jù)類型變量 
         * 4類8種
         * 定義格式:
         *   數(shù)據(jù)類型  變量名字 =  值
         */

    //定義字節(jié)型,關鍵字 byte
    byte b = 100;
    System.out.println(b);

    //定義短整型,關鍵字 short
    short s = 10000;
    System.out.println(s);

    //定義整型,關鍵字 int 最常用的類型
    int i = 999999;
    System.out.println(i);

    //定義長整型,關鍵字 long
    //注意 : Java語言,任何整數(shù)默認都是int類型
    //將整數(shù)變成long類型, 數(shù)字后面寫字母L (不分大小寫,建議大寫)
    long l = 1234567890123L;
    System.out.println(l);

    //定義浮點數(shù)據(jù),單精度 關鍵字float
    //Java中浮點數(shù)據(jù),默認是double
    //浮點數(shù)變成float類型,數(shù)字后面寫字母F (不分大小寫,建議大寫)
    float f = 3.14F;
    System.out.println(f);

    //定義浮點數(shù)據(jù),雙精度 關鍵字 double
    double d = 3.14;
    System.out.println(d);

    //定義字符類型, 關鍵字char
    char c = '去';
    System.out.println(c);

    //定義布爾類型,關鍵字 boolean
    boolean bool = true;
    System.out.println(bool);
}

變量定義的注意事項

  • 變量定義,但是沒有賦值,不能使用

    public static void main(String[] args) {
        int i ;
        System.out.println(i);
    }
    
  • 可以先定義變量,再賦值

    public static void main(String[] args) {
        int i ;
        i = 1;
        System.out.println(i);
    }
    
  • 在同一個大括號內,變量名不能相同

    public static void main(String[] args) {
        int i ;
        i = 1;
        System.out.println(i);
    
        int i = 2;
        System.out.printl(i);
    }
    
  • 作用范圍,變量只能作用在定義的一對大括號內有效,出去大括號無效

變量定義格式補充

先聲明變量,后賦值

public static void main(String[] args) {
    int a;
    a = 1;
    //一次定義多個變量名字
    int b,c,d,e;
    //分別進行賦值
    b=1;
    c=2;
    d=3;
    e=4;

    //比較惡心
    int f = 1, m=2, n,g;
    n=1;
    g=2;
}

數(shù)據(jù)類型轉換 (有點難)

Java語言是強制類型語言,要求在數(shù)據(jù)進行運算的時候,必須保證類型的一致性.

如果數(shù)據(jù)在運算的時候,類型不一致,發(fā)生類型轉換現(xiàn)象.

所有的基本數(shù)據(jù)類型中,只有布爾類型不參與轉換

自動類型轉換

  • 轉換原則 : 數(shù)據(jù)類型取值范圍小的會自動提升為取值范圍大的類型

    • byte -> short -> int -> long -> float -> double

          public static void main(String[] args) {
              /*
               * 字節(jié)byte和整型int 求和
               * byte取值范圍小的類型,int取值范圍大
               * 求和的時候,發(fā)生類型的轉換!!
               */
              byte b = 1;
              int i = 2;
              int j = b + i; // b+1  類型轉換 b轉成int
              System.out.println(j);
          }
      
    • byte和short的計算,默認轉成int

      public static void main(String[] args) {
          //求和計算
          //1 == Java默認int
          //1.1 == Java默認double
          //1 自動轉換double 補: 1.0
          double d = 1+1.1; //計算后的最終的類型結果是 double
          System.out.println(d);
      
          d = 1+0.0;
          System.out.println(d);
      
          /*
            *  求和計算,認真思考
          */
          byte b = 1;
          short s = 1;
          //b+s不能運算,數(shù)據(jù)類型不同,類型的轉換,計算結果的數(shù)據(jù)類型int
          //Java規(guī)定 : byte short 進行運算,都會自動轉成int!!
          int k = b+s;
          System.out.println(k);
      }
      
    • char類型計算的時候,查詢ASCII編碼表,取出整數(shù)進行計算 (轉成int類型)

      public static void main(String[] args) {
          //char 字符類型,內存中占用2個字節(jié)
          char c = 'a';
          System.out.println(c);
      
          //char字符類型,也可以進行計算
          //字符char類型計算的時候,轉成int類型
          //會到ASCII編碼表中查詢數(shù)字出來
          System.out.println(c+1);// 98
      }
      
字符編碼表.jpg
  • char類型是否存在取值范圍

    在內存中,和short占用2個字節(jié) 0-65535

強制類型轉換

強制 : 程序人員手動的參與轉換

強制類型轉換 : 取值范圍大的類型,轉成取值范圍小的類型

盡量少做,出現(xiàn)數(shù)據(jù)精度丟失問題.

  • 浮點數(shù),轉成整數(shù)

    • 1.5 轉成整數(shù) 結果是1,小數(shù)部分直接丟棄
  • 轉換的公式 :

    被轉換后的類型 變量名字 = (被轉換后的類型)要轉換的數(shù)據(jù);
    
    public static void main(String[] args) {
        //浮點數(shù)據(jù),轉成整數(shù)
        double d = 1.5;
        //d取值范圍大的類型,轉成int類型 (丟失精度)
        //被轉換后的類型 變量名字 = (被轉換后的類型)要轉換的數(shù)據(jù);
        int i = (int)d;
        System.out.println(i);
    }
    
  • 整數(shù)之間的類型轉換

    public static void main(String[] args) {
          byte b = 1;
          
          int i = 2;
          /*
           *  b 1個字節(jié)
           *  i 4個字節(jié)
           *  b+i 的結果還是4個字節(jié)
           *  
           *  4個字節(jié)的結果,復制到1個字節(jié)的c中  
           *  b + i 的結果,強制的轉成byte類型
           *  
           *  被轉換后的類型 變量名字 = (被轉換后的類型)要轉換的數(shù)據(jù);
           */
          byte c = (byte) (b + i);
          System.out.println(c);
          
          short s = 1 ;
          /*
           *  s + 1 int類型,和short類不能計算
           *  s 提升為int類型,求和后變成int
           *  賦值回變量s ,需要類型的強制轉換
           *  s + 1的結果,強制轉換為short
           */
          s = (short) (s + 1);
          System.out.println(s);
      }
    
    public static void main(String[] args) {
          /*
           * 1 是int類型
           * int類型, 賦值到byte了呢
           * 
           * javac 編譯器 : .java文件,編譯為可以執(zhí)行的class文件
           * 編譯的時候,檢測1是否超過byte的范圍
           * 沒有超過byte范圍, javac幫你將int類型的1,轉成byte類型
           */
          byte b = 1;
          System.out.println(b);
          
          byte b2 = (byte)300; //超過byte范圍的300,強制轉byte類型
          System.out.println(b2);
      
      }
    
  • 計算中,常量是已經確定計算結果,(固定不變)

  • 變量,在計算中,不確定結果,運行完畢才可知

    short s1 = 1;
    short s2 = 1;
    
    /*
    *  s1 + s2 == > 變成int
    */
    short s3 = (short) (s1 + s2);
    System.out.println(s3);
    /*
    *  s4 = 1+1 是正確的
    *  變量計算和常量計算的區(qū)別
    *  s1 + s2 是變量, 編譯的時候javac, 編譯器不確定的值是什么
    *  求和的結果按照int計算
    *  
    *  1 + 1是常量,固定不變 javac編譯,可以確定計算的結果
    *  判斷出結果沒有超過short范圍,不會報錯
    */
    short s4 = 1 + 1;
    System.out.println(s4);
    

運算符

運算符在程序中作用是數(shù)據(jù)之間進行運算.運算符分類

算數(shù)運算符

  • + - * / %
    • % 取模, 計算的結果要余數(shù)

賦值運算符

  • = 符號右邊的數(shù)據(jù),賦值到左邊的變量

  • += -= *= /= %= 不能分開

    public static void main(String[] args) {
          int i = 1;
          /*
           *  i+1的結果,再賦值變量i
           */
          i = i + 1;
          System.out.println(i);
          
          /*
           *  += 賦值運算符
           *  j+=1; 本質上理解為 j = j+1
           */
          int j = 1;
          j+=1; // 等價于 j = j + 1
          System.out.println(j);
          
          /*
           * += 另一個問題
           * s += 2; 等價于s  = s + 2
           * += 是一個符號,運算是一次完成 (javac自動的進行強制轉換)
           */
          short s = 1;
          s += 2;
          System.out.println(s);
      }
    
  • ++ 和 --

    public static void main(String[] args) {
        //++ 符號,含義是變量自增1   -- 變量自減1
        int i = 1;
        i++;
        System.out.println(i);
    
        /*
       *  ++或者--符號,可以出現(xiàn)在變量的前面或者是后面
      */
        ++i;
        System.out.println(i);
    
        /*
       *  ++在前在后的區(qū)別
      */
        int m = 1;
        //++在后面,后運算
        //先將m的值,賦值變量n, m自己在增1
        int n = m++;
        System.out.println(m); //2
        System.out.println(n); //1
        //++在前面,先運算
        //m自己先增1, 增1后的結果,賦值到n
        n = ++m;
        System.out.println(m);//3
        System.out.println(n);//3
    }
    
    • ++ 和--的結論:
      • 變量只有自己的時候 ++ 寫在前還是后沒有區(qū)別,自己都會增1
      • 變量和其他變量做運算
        • 寫后面,是先將自己的值賦給其他變量,自己在增1
        • 寫前面,先自己增1,增1后賦值另一個變量

比較運算符

比較運算符,是數(shù)據(jù)之間做比較的,特點:比較運算符的執(zhí)行結果只能是布爾類型

比較運算符的運算結果,要么是true,要么是false,不會出現(xiàn)其他的結果

  • == 等等于 比較符號兩邊的數(shù)據(jù)是否相等,如果相等,計算結果是true
  • != 不等于 比較符號兩邊的數(shù)據(jù)是否不相等,如果不等待,結算結果是true
  • >大于號 比較符號左邊的數(shù)是否大于右邊的數(shù),如果大于結果是true
  • <小于號 結果略
  • >=大于等于 <=小于等于 結果略

邏輯運算符

邏輯的運算符,計算結果也是布爾類型,要么是true,要么是false

  • & 邏輯與 &符號的兩邊 一邊結果是false,整體運算結果是false,兩邊都是true,結果是true
  • | 邏輯或 |符號的兩邊 一邊結果是true,整體的運算結果是true,兩邊都是false,結果是false
  • ! 邏輯非 ! 取反 true取反變false, false取反變true
  • && 雙與 提高運算效率,和單符號的計算結果無區(qū)別
    • 高效處理 : 左邊是false,右邊不計算
  • || 雙或 提高運算效率,和單符號的計算結果無區(qū)別
    • 高效處理 : 左邊是true,右邊不計算
public static void main(String[] args) {
    //&符號的兩邊  一邊結果是false,整體運算結果是false
    System.out.println(2==2 &  2==1);
    //System.out.println(false & true );

    //|符號的兩邊 一邊結果是true,整體的運算結果是true
    System.out.println( 1==1 | 2==3);

    //! 取反  true取反變false, false取反變true
    System.out.println( !false );

    int i = 1;
    int j = 1;
    System.out.println( i==2 && ++j==2);
    System.out.println(j);

    System.out.println(i==1 || j==3);
}

位運算符

位運算,數(shù)字的二進制位的運算

運算之前,先將數(shù)字轉成二進制后,才能計算

  • & | ^ << >> >>>

    • 計算過程中,二進制0表示false,1表示true
    • 計算結果,和邏輯運算符一致
    • ^ (異或)相同結果是false,不相同結果是true
    • <<左移動 >>右移動 數(shù)字的二進制進行位置移動
    • >>> 無符號右移動
    public static void main(String[] args) {
        System.out.println( 6 & 7 );
    
        System.out.println(6 | 7);
    
        // ^異或 計算結果,相同為false,不同為true
        System.out.println( 6 ^ 7);
    
        //2 向右移動1位 相當于原數(shù)字/2
        System.out.println(2 >> 1);
        //2左移動2位  相當于原數(shù)字*2*2
        System.out.println( 2 << 2);
    
        //無論數(shù)據(jù)的最高位是1還是0,移動后全部補0
        System.out.println(-1 >>> 2);
    }
    

三元運算符

三元又稱為三目運算

  • 運算符格式 :

    布爾表達式?結果1:結果2
    
    public static void main(String[] args) {
        //布爾表達式?結果1:結果2
        //布爾表達式 : 怎么寫都可以,運算結果是true,false即可
        //三元運算符的計算結果 : 布爾表達式結果是true,執(zhí)行結果1,否則執(zhí)行結果2
        int i = 2==2?100:200;
        System.out.println(i);
    
        System.out.println(1==2?"等于":"不等于");
        //System.out.println(1==1?5:1.0);
    }
    

字符串數(shù)據(jù)的+計算

字符串和+一起計算, +變成連接作用,失去的求和的含義

計算的結果都是字符串類型.

    public static void main(String[] args) {
        //"5" 是字符串類型 ,5是int類型
        //不計算,遇到字符串, + 變成連接作用
        //計算的結果的類型,是字符串
        System.out.println("5" + 5);
        System.out.println(1+2+"3");
        System.out.println(true+"1");
    }

Scanner 鍵盤輸入作用

在Java基礎階段 SE技術平臺中,是有意義

Scanner是Java中,已經做好的一個類,拿來使用即可

注意 : 使用已經做好的類Scanner,我們自己創(chuàng)建類,類名不能是Scanner

//1: 導入該類所在的包
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        //2: 創(chuàng)建Scanner類的對象
        Scanner sc = new Scanner(System.in);
        //3: 創(chuàng)建好的對象,調用方法,實現(xiàn)鍵盤的輸入 (整數(shù),字符串)
        int i = sc.nextInt();//接收鍵盤輸入,整數(shù)
        System.out.println(i+1);
    }
}

Sacnner接收字符串類型

public static void main(String[] args) {
        //Scanner鍵盤輸入字符串
        Scanner sc = new Scanner(System.in);
        //接收字符串, Scanner類中方法 next() 
        //String s = sc.next(); //字符串中有空格,空格后面不接收
        
        //接收字符串,Scanner類中方法 nextLine()
        String s = sc.nextLine(); //接收一行
        System.out.println(s+123);
}

Scanner反復接收數(shù)據(jù)的問題

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //輸入int
        int i = sc.nextInt(); // 123 回車
        System.out.println(i);
        //輸入字符串
        String s = sc.nextLine();
        System.out.println(s);  
    }

流程控制語句

現(xiàn)在階段,寫的所有程序,都稱為順序解構.程序只能從上向下依次執(zhí)行.

實現(xiàn)更加復雜的功能,使用流程控制語句

判斷語句 if ,選擇語句 switch ,循環(huán)語句 for while do while

if判斷語句

只有一個關鍵字 if (如果)

格式 :

  if(條件的判斷){
     if語句的執(zhí)行體
  }
  條件的判斷 : 這里的結果必須是布爾類型
  if的語句體 : 如果條件判斷的結果是true,執(zhí)行該語句體,判斷的結果是false,什么也不做
  • if的語句實現(xiàn)
public static void main(String[] args) {
    int i = 1;
    //if的判斷語句
    if( i > 0) {
        System.out.println("執(zhí)行了大括號里面程序");
        System.out.println("if的條件判斷是true");
    }
}

if語句注意事項

if語句是可以省略大括號的 : 0基礎,新手,大括號一定要寫

如果不寫大括號, if判斷語句只能控制距離他最近的一行程序!!

public static void main(String[] args) {
    int i = 1 ;
    if( i == 1)
        System.out.println("你好");
    System.out.println("我好");           
}

if語句: (判斷條件) 有一個寫法,希望你用, 建議在判斷里面,常量寫在變量的前面.

public static void main(String[] args) {
    //定義布爾類型的變量
    boolean bool = false;
    //System.out.println(false == false);
    if(false == bool) { 
        System.out.println("if的判斷條件是true"); 
    }
}

if...else語句

if是如果,else是否則. 如果怎么樣,就怎么樣. else語句是不能單獨出現(xiàn),只能跟隨if出現(xiàn)

語句格式 :

 if(條件判斷){
     if語句的執(zhí)行體
 }else{
     else語句的執(zhí)行體
 }
  • 執(zhí)行流程 :
    • 程序先執(zhí)行if中的條件判斷語句,如果判斷語句是true,那么就執(zhí)行if的語句體
    • 如果if中的條件判斷結果是false,那么就會執(zhí)行else的語句體
  • if語句和else語句,永遠不會同時執(zhí)行,不會都不執(zhí)行
    • if和else每天雞犬相聞,但是老死不相往來
  • 適合于多個條件的判斷

if...else if...else if...else

多分支語法格式:

 if(條件判斷){
 
 } else if(條件判斷){
 
 } else if(條件判斷){
 
 }  else {
     
 }

適合與多條件的判斷,但是 if else過多,會導致程序的閱讀性下降

優(yōu)勢 : 高效的優(yōu)勢,只要有一個if的條件判斷結果是true,整體的語句結構就結束了

public static void main(String[] args) {
    int i = 99;
    //if else if的多分支
    if(i < 100) {
        System.out.println("第一個if的條件是true");
    }else if(i > 100){
        System.out.println("第二個if的條件是true");
    }else if (i == 100) {
        System.out.println("第三個if的條件是true");
    }else {
        System.out.println("所有的條件都是false");
    }
}

多分支語句的練習

需求 : 請你輸入你的考試成績,對成績進行等級劃分

90-100 : 優(yōu)

80-89 : 良

70-79 : 中

60-69 : 差

<60 : 不及格

switch選擇語句

程序也是進行選擇的, switch語句中包含的關鍵字比較多

switch case default break

switch語句的格式 :

 switch (變量){
     case 常量1 :
         要執(zhí)行的語句1;
         break;
     case 常量2 :
         要執(zhí)行的語句2;
         break;
     case 常量3 :
         要執(zhí)行的語句3;
         break;
     default:
         要執(zhí)行的語句;
         break;
 }
  • 語句流程詳細解釋

    • switch中的變量,和case后面的常量,進行比較 (是否相同)
    • 如果和 常量1相等,執(zhí)行 : 語句1, 執(zhí)行break,整體switch結束
    • 如果和 常量2相等,執(zhí)行 : 語句2, 執(zhí)行break,整體switch結束
    • switch中的變量,和任何一個case后面的常量都不相等,執(zhí)行default后面的語句, 執(zhí)行break,整體switch結束
  • switch語句中的變量的數(shù)據(jù)類型有限制

    • byte short int char (JDK1.0-1.4)
    • 添加數(shù)據(jù)類型 enum 枚舉 (JDK1.5)
    • 添加數(shù)據(jù)類型字符串 (JDK1.7)
    • 使用的是JDK1.8 (支持的類型 byte short int char 枚舉 字符串)
    public static void main(String[] args) {
          int i = 5;
          switch (i) {
          case 1:
              System.out.println("case1");
              break;
              
          case 2:
              System.out.println("case2");
              break;
              
          case 3:
              System.out.println("case3");
              break;
    
          default:
              System.out.println("所有case都不相等");
              break;
          }
      }
    

選擇語句的練習

需求 : 根據(jù)輸入的月份,判斷是哪個季節(jié)

春季 : 3,4,5 夏季 : 6,7,8 秋季 : 9 ,10 ,11 冬季 12 , 1, 2

采用if和switch分別完成

        if(month < 1 || month > 12) {
            System.out.println("輸入的月份不存在");
        }
        //季節(jié)判斷  春季 : 3,4,5
        else if(month >=3  && month <=5) {
            System.out.println("春季");
        }
        //季節(jié)判斷  夏季 : 6,7,8 
        else if (month >= 6 && month <=8 ) {
            System.out.println("夏季");
        }
        //季節(jié)判斷  秋季 : 9 ,10 ,11
        else if (month >= 9 && month <= 11) {
            System.out.println("秋季");
        }
        //季節(jié)判斷  冬季 12 , 1, 2
        else {
            System.out.println("冬季");
        }

case穿透特性

在switch的語句中,不寫break,出現(xiàn)case的穿透性

 switch (變量){
     case 常量1 :
         要執(zhí)行的語句1;
        // break;
     case 常量2 :
         要執(zhí)行的語句2;
        // break;
     case 常量3 :
         要執(zhí)行的語句3;
        // break;
     default:
         要執(zhí)行的語句;
       //  break;
 }
case穿透.jpg

case穿透特性實現(xiàn)季節(jié)判斷

public static void main(String[] args) {
    //鍵盤輸入,接收月份
    Scanner sc = new Scanner(System.in);
    int month = sc.nextInt(); // 4
    //利用case穿透特性
    switch(month) {
        case 3:
        case 4:
        case 5:
            System.out.println("春季");
            break;
        case 6:
        case 7:
        case 8:
            System.out.println("夏季");
            break;
        case 9:
        case 10:
        case 11:
            System.out.println("秋季");
            break;

        case 1:
        case 2:
        case 12:   
            System.out.println("冬季");
            break;
            
        default:
            System.out.println("月份不存在");
    }
}

循環(huán)語句

循環(huán) : 程序中的語句(代碼)多次的反復的執(zhí)行

使用的頻率非常的高

輸出10次 "HelloWorld"

System.out.println("HelloWorld"); 語句復制10次,不行

while循環(huán)

語法格式 :

while(布爾類型的表達式){
  //while的循環(huán)體
}
  • while循環(huán)的執(zhí)行流程
    1. 執(zhí)行布爾表達式,如果是true
    2. 執(zhí)行循環(huán)體中的程序
    3. 再次執(zhí)行布爾表達式,如果還是true
    4. 再次執(zhí)行循環(huán)體中的程序
    5. 再次執(zhí)行布爾表達式,如果是false
    6. while循環(huán)就結束了
  • 結論: 只要while中的布爾表達式結果是true,就執(zhí)行循環(huán)體,直到布爾類型為false,循環(huán)結束
public static void main(String[] args) {
        int i = 1;
        while(i < 10) {
            System.out.println("while的循環(huán)體 "+i);
            //變量i 發(fā)生變化 ++
            i++;
        }
        //打印10次HelloWorld
        //j變化到10的時候,循環(huán)結束
        int j = 0;
        while(j < 10) {
            System.out.println("HelloWorld");
            j++;
        }
    }

while循環(huán)練習

  • 輸出10以內的所有偶數(shù)

    public static void main(String[] args) {
        //定義變量,默認值是0, 變化到10
        int i = 0; 
        while(i <= 10) {
            //判斷是不是偶數(shù)
            if(i % 2 == 0) {
                System.out.println(i + "是偶數(shù)");
            }
            i++;
        }
    }
    
    public static void main(String[] args) {
      //定義變量,默認值是0, 變化到10
      int i = 0;
      //變量i在循環(huán)的時候,每次+2行不?  不需要判斷了
      while(i <= 10) {
          System.out.println(i + "是偶數(shù)");
          //i=i+2;
          i+=2;
      }
    }
    

for循環(huán)

語法格式 :

for (初始化變量 ; 條件 ; 增量){
    //for的循環(huán)主體
}
  • 循環(huán)的三個部分解釋

    • 初始化變量 : 定義變量 數(shù)據(jù)類型 變量名 = 值
    • 條件 : 條件必須是布爾類型結果 true 或者 false
    • 增量 : 循環(huán)變量的變化
    • 條件 : 控制循環(huán)是否執(zhí)行,條件是true,循環(huán),條件是false結束循環(huán)
    public static void main(String[] args) {
        for(int i = 0 ; i < 5 ; i++) {
            System.out.println("這里是for循環(huán)的循環(huán)體  "+i);
        }
    }
    
  • for循環(huán)的執(zhí)行流程

    1. 執(zhí)行初始化的變量. (只會執(zhí)行一次)
    2. 執(zhí)行條件的判斷 (判斷條件是false,循環(huán)直接結束), 判斷條件是true
    3. 進入到for的循環(huán)體執(zhí)行
    4. 執(zhí)行變量的自增
    5. 執(zhí)行條件的判斷 (判斷條件是false,循環(huán)直接結束), 判斷條件是true
    6. 執(zhí)行循環(huán)體
    7. 執(zhí)行變量的自增
    8. 執(zhí)行條件的判斷 (判斷條件是false,循環(huán)直接結束)

for循環(huán)實現(xiàn)練習

  • for循環(huán)實現(xiàn)0-10之間的偶數(shù)

    public static void main(String[] args) {
        //利用for循環(huán)中的變量
        for(int i = 0 ; i <= 10 ;i+=2) {
          System.out.println(i +"是偶數(shù)");
        }
    }
    
  • for實現(xiàn)求和計算 1 + 2 + 3 +......+ 100 = 5050 (高斯算法)

    public static void main(String[] args) {
        //定義變量int類型,保存求和后的結果
        int sum = 0;
        //進行1-100之間的循環(huán)
        for(int i = 1 ; i <= 100 ;i++) {
            //求和計算, sum變量保存求和后的結果
            sum = sum + i; 
        }
        System.out.println(sum);
    }
    

do...while

格式 :

 do{
    //循環(huán)主體
 }while(條件判斷);
  • 循環(huán)執(zhí)行流程
    • 判斷while中的循環(huán)條件
    • 如果條件是true,執(zhí)行循環(huán)體
    • 如果條件是false,結束循環(huán)
  • 注意 : do ... while 無條件先執(zhí)行一次循環(huán)體

break和continue

  • break : 終止 作用就是終止循環(huán), 在循環(huán)中遇到break,循環(huán)就結束,只能在循環(huán)中或者switch出現(xiàn)

    public static void main(String[] args) {
        int i = 0;
        while(true) {
        i++;
        //判斷變量的值,如果=10,執(zhí)行break終止循環(huán)
        if(i == 10) {
          break;
          }
        }
    
        for( ; ;) {
          break;
        }
    }
    
  • continue : 終止本次循環(huán),開始下一次循環(huán)

    public static void main(String[] args) {
        for(int i = 0 ; i <=10 ;i++) {
        //判斷,如果變量是偶數(shù),執(zhí)行下一次循環(huán)
          if(i % 2 == 0) {
                  continue;
               }
               System.out.println(i);
        }
    }
    

嵌套循環(huán)

引出 : 上體育課遲到20分鐘,處罰

操場跑圈 : 跑5圈, 再跑5圈, 再跑5圈, 再跑5圈

跑了4組,每組跑了5圈, 一共跑了多少圈 20 組數(shù)*每組圈數(shù)

理解 : 第一組5圈...... 我的第一次循環(huán) 5圈 我的第二次循環(huán) 5圈 (圍繞操場循環(huán)了5次)

一次大的循環(huán),包含5次小的循環(huán) : 程序 嵌套循環(huán), 總的循環(huán)次數(shù) = 大循環(huán)次數(shù)*小循環(huán)次數(shù)

嵌套for

兩個for循環(huán)在一起,形成嵌套形式, 雙循環(huán)

一個for是另一個for的循環(huán)體

格式 :

 for(初始化變量 ; 條件 ; 增量){  //外循環(huán)
     for(初始化變量 ; 條件 ; 增量){ //內循環(huán)
     }
 }
//內循環(huán)是外鍵循環(huán)的循環(huán)體
public static void main(String[] args) {
    //外循環(huán),循環(huán)5次
    for(int i = 0 ; i < 5 ;i++) {
        //內循環(huán),循環(huán)3次
        for(int j = 0; j < 3 ; j++) {
            System.out.println("內循環(huán)");
        }
        System.out.println("外循環(huán)");
    }
}
forfor循環(huán)的執(zhí)行流程.JPG

嵌套for循環(huán)練習

  • 外循環(huán)一次,內循環(huán)多次

    • 結論 : 外循環(huán)控制行數(shù) ,內循環(huán)控制每行的個數(shù)
    public static void main(String[] args) {
          //外循環(huán)5次
          for(int i = 0 ; i < 5 ;i++) {
              //內循環(huán)5次
              for(int j = 0 ; j < 5 ;j++) {
                  //內循環(huán)輸出星號
                  System.out.print("*");
              }
              //外循環(huán)輸出空的換行
              System.out.println();
          }
      }
    
  • 尖向下的直角三角形

    public static void main(String[] args) {
          // 有幾個行 5行 外循環(huán)5次
          for(int i = 0 ; i < 5; i++) {
              /*
               *  每個行有幾個星號 第一行是5個,逐行遞減
               *  變量j 0 1 2 3 4 
               *  
               *  外循環(huán)第一行的時候,內循環(huán)5個
               *  外循環(huán)第二行的時候,內循環(huán)4個
               *  j變化 : 每次執(zhí)行內循環(huán)的時候,變量j的初始化都+1
               *  
               *  外循環(huán)的i 變量  0 1 2 3 4
               */
              for(int j = i ; j < 5 ;j++) {
                  System.out.print("*");
              }
              System.out.println();
          }
      }
    
  • 尖向上的直角三角形

    public static void main(String[] args) {
          // 有幾個行 5行 外循環(huán)5次
          for(int i = 0 ; i < 5 ;i++) {
              /*
               * 內循環(huán) : 循環(huán)次數(shù)不固定  每行遞增效果
               * 第一行 : 內循環(huán)1次
               * 第二行 : 內循環(huán)2次
               * 內循環(huán)的變量 j
               * 
               *   第一行 : 內循環(huán)1次  j<1
               *   第二行 : 內循環(huán)1次  j<2
               *   內 : 變量j每次都從0開始,但是條件在改變
               */
              for(int j = 0 ; j <= i ;j++) {
                  System.out.print("*");
              }
              System.out.println();
          }
      }
    
  • 乘法表

    public static void main(String[] args) {
          //i  1-9
          for(int i = 1 ; i <= 9 ;i++) {
              // 第一次循環(huán)1 ,第二次循環(huán) 1 2  
              for(int j = 1; j<=i ;j++) {
                  /*
                   *  替換為乘法計算即可
                   */
                  System.out.print(j+"*"+i+"="+j*i+"\t");
              }
              System.out.println();
          }
      }
    
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末伺帘,一起剝皮案震驚了整個濱河市昭躺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伪嫁,老刑警劉巖领炫,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異张咳,居然都是意外死亡帝洪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門脚猾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葱峡,“玉大人,你說我怎么就攤上這事龙助∨檗龋” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長军援。 經常有香客問我仅淑,道長,這世上最難降的妖魔是什么胸哥? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任涯竟,我火速辦了婚禮,結果婚禮上空厌,老公的妹妹穿的比我還像新娘昆禽。我一直安慰自己,他們只是感情好蝇庭,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布醉鳖。 她就那樣靜靜地躺著,像睡著了一般哮内。 火紅的嫁衣襯著肌膚如雪盗棵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天北发,我揣著相機與錄音纹因,去河邊找鬼。 笑死琳拨,一個胖子當著我的面吹牛瞭恰,可吹牛的內容都是我干的。 我是一名探鬼主播狱庇,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼惊畏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了密任?” 一聲冷哼從身側響起颜启,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浪讳,沒想到半個月后缰盏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡淹遵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年口猜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透揣。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡济炎,死狀恐怖,靈堂內的尸體忽然破棺而出淌实,到底是詐尸還是另有隱情冻辩,我是刑警寧澤猖腕,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站恨闪,受9級特大地震影響倘感,放射性物質發(fā)生泄漏。R本人自食惡果不足惜咙咽,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一老玛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钧敞,春花似錦蜡豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愚战,卻和暖如春娇唯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂玲。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工塔插, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拓哟。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓想许,卻偏偏與公主長得像,于是被迫代替她去往敵國和親断序。 傳聞我的和親對象是個殘疾皇子流纹,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容