Java學習筆記---基礎語法(上)

1. Java語言的發展史

java是哪家公司哪一年推出的?
sun公司在1995推出的編程語言
java之父是誰?
詹姆斯.高斯林
java的主要發展歷程?
1995由sun公司推出。
2004推出JDK1.5,這是里程碑式的版本。
2009年sun公司被oracle(甲骨文公司)收購。
目前最新版本JDK12。
java的三大技術架構
JavaSE:java標準版,主要用於桌面應用軟件的開發。比如計算器,QQ軟件等。
JavaEE:java企業版,基於JavaSE的企業級應用的開發。比如淘寶,京東,ERP系統等。(大型互聯網)
JavaME:java微型版,應用於移動設備和電子類產品的嵌入式開發。比如手機遊戲,手機軟件等。(安卓,IOS,HTML,微信小程序)

2. Java語言跨平臺原理

java語言的特點
java語言具有簡單易學、面向對象、健壯性、安全性、與平臺無關性等特點。
什麼是平臺?
平臺即操作系統,目前主流的有微軟Windows系統,蘋果Mac系統,Linux系統
什麼是java跨平臺?
通過java語言編寫的應用程序可以在不同的操作系統上直接運行。具有一次編譯,到處運行的特點。
java如何實現跨平臺?
通過JVM虛擬機實現的跨平臺。在不同的操作系統上安裝對應的JVM虛擬機。
在這裏插入圖片描述
java跨平臺的原理
java程序並非是直接運行的, javac編譯器將java源程序(.java文件)編譯成與平臺無關的字節碼文件(.class文件),然後通過java運行工具啓動java虛擬機,由java虛擬機(JVM)對字節碼文件解釋執行。所以在不同的操作系統下, 只需安裝不同的java虛擬機即可實現java程序的跨平臺
在這裏插入圖片描述

3. JVM、JRE、JDK

JVM、JRK、JDK三者之間的關係

JVM:Java虛擬機,保證java程序跨平臺。 
			//JVM保證java程序的跨平臺性
JRE:Java運行環境,包含JVM和核心類庫。如果只是想運行java程序,只要安裝JRE即可。
			//JRE=JVM+核心類庫
			核心類庫包括:java.util包中的Random/Scanner/Arrays等
JDK:Java開發工具包,包含JRE和開發工具。如果程序員想要開發java程序,需要安裝JDK環境 
			//JDK=JRE+開發工具
			開發工具包括:編譯工具javac.exe  ,運行工具java.exe 等

JVM、JRE、JDK關係圖解
在這裏插入圖片描述

4. 常用的DOS命令

進入DOS命令行窗口
快捷鍵win + R打開運行窗口,輸入cmd,按回車進入。
常用DOS命令

操作 說明
盤符名稱 盤符切換。E:回車,表示切換到E盤
dir 查看當前路徑下的內容
cd 目錄 進入單級目錄。cd develop,表示進入develop文件夾
cd … 回退到上一級目錄
cd 目錄1\目錄2… 進入多級目錄。cd develop\java,表示進入develop下的java文件夾
cd \ 回退到盤符根目錄
cls 清屏
exit 退出命令提示符窗口

5. Path環境變量的配置

什麼是環境變量
環境變量:指在操作系統中用來指定操作系統運行環境的一些參數
爲什麼要配置環境變量
開發java程序, 需要使用JDK提供的開發工具(比如javac.exe、java.exe等命令),而這些工具在JDK的安裝目錄的bin目錄下,如果不配置環境變量,那麼這些命令只可以在該目錄下執行。 我們不可能把所有的java文件都放到JDK的bin目錄下, 所以配置環境變量的作用就是可以使bin目錄下的java相關命令可以在任意目錄下使用。
常見配置的環境變量

環境變量名 作用
JAVA_HOME 指 JDK 安裝的根目錄,如:C:\develop\Java\jdk-11
PATH 指 java 開發工具的位置,如:C:\develop\Java\jdk-11\bin
CLASSPATH 指 JVM 在運行時到哪一個目錄去加載字節碼文件

6. 註釋

註釋的作用?
對代碼進行解釋說明,便於開發人員理解和維護代碼。
註釋不會被程序編譯和運行。
註釋的分類?
單行註釋 // 註釋內容,單行註釋可以嵌套。
多行註釋 /* 註釋內容 /,多行註釋不能嵌套使用。
文檔註釋 /
* 註釋內容 */,文檔註釋不能嵌套使用。

7. 關鍵字

什麼是關鍵字?
在java語言中有特殊意義的英文單詞。
java關鍵字的特點?
單詞全部小寫。
在高級開發工具中,關鍵字會有特殊的顏色標記。
java中的關鍵字/保留字
goto和const是java中的預留關鍵字(goto和const也叫保留字)。
在這裏插入圖片描述

8. 常量

什麼是常量?
在程序運行過程中,其值不可以發生改變的量。
常量的分類

字符串常量:使用雙引號 "" 括起來的0到多個字符。"java" ,"程序員" , "" , "  ","A" // 大於等於0個字符
字符常量:使用單引號 '' 括起來的單個字符。 'a' , '0' ,'我' //1個字符
整數常量:正負整數  10  -20
小數常量:帶小數點的數字  -3.14   5.12
布爾常量:表示真或假,只有true或false兩個值
空常量:值爲null,不能使用輸出語句直接輸出。//System.out.println(null),會編譯報錯
定義的final變量

9. 數據類型

java是強類型的語言,每一個數據都有對應的數據類型。
位:計算機計算的基本單位,計算機底層是二進制 0 1
字節:計算機存儲的基本單位,1字節=8位。
java數據類型分類
基本數據類型:4型8種
整數:byte short int long (整數默認是:int類型)
小數:float double (小數默認是:double類型)
字符:char
布爾:boolean
引用數據類型:字符串,數組,類,接口 ,null
基本數據類型分類
在這裏插入圖片描述

1.定義 long 類型加L
		int number = 100L;
2.定義 float 類型加F
		int f = 10.0F;

10. 變量

什麼是變量?
變量指程序運行過程中,其值在一定範圍內會發生變化的量。
變量的定義格式

數據類型 變量名 = 初始化值
int a = 12;

變量的分類

成員變量:(也叫全局變量,字段)
	直接定義在類中,方法外,默認有初始值
	1.類成員變量:使用static修飾符修飾的成員變量
	2.實例成員變量:沒有使用static修飾符修飾的成員變量
局部變量:變量除了成員變量之外,其他就是局部變量
	分爲:方法形參,方法內變量,代碼塊變量
	沒有初始化值,必須先初始化才能使用

變量使用的注意事項

1、變量可以定義時初始化,也可以先定義,使用前進行初始化。
	//定義的時候初始化
	double d = 3.14;
	//先定義,後初始化
    double d;
    d = 3.14;
    
2、沒有初始化的變量不能直接使用。
    int a ;
    System.out.println(a);  //編譯報錯,
	
3、相同範圍內,變量名不能重複。

	//第一種:方法的形參上變量名不能相同
    public static void sum(int a,int a){ //編譯報錯

    }
    //第二種:一對 {} 內變量名不能相同
    public static void sum(){
        int a = 10;     //編譯報錯
        int a = 20;		//編譯報錯
    }

4、整數默認是int類型,定義long類型時需要加L 或者l,建議加L。
	long num = 10L;

5、小數默認是double類型,定義float類型的時候需要在數字後面加F或者f,建議加F。
	float f = 3.14F;

6、一行代碼上可以定義多個變量。(不推薦)
	int a=10,b=20;

    int a,b =20;
    a=10;

變量的生命週期

存在位置 生命週期開始 生命週期結束 在內存中的位置
類成員變量 使用static修飾的成員變量 當所在字節碼被加載進JVM 當JVM停止 方法區
實例成員變量 沒有使用static修飾的成員變量 當創建所在類的對象的時候 當該對象被垃圾回收器回收
局部變量 方法形參,代碼塊中,方法內 當代碼執行到初始化變量的時候 所在的方法/代碼塊結束

11. 標識符

標識符的作用
給 包,類,方法,變量起名的符號。
標識符的組成規則
大小寫英文字母、數字、下劃線_、美元符$、中文(不推薦)
注意事項:
1、不能是數字開頭
2、不能是關鍵字
3、區分大小寫
標識符的命名規範
小駝峯式命名:變量名、方法名
第一個單詞首字母小寫,從第二個單詞開始每個單詞的首字母大寫。

userName,maxValue等

大駝峯式命名:類名
每個單詞的首字母都大寫。

String, ArrayList等

建議:標識符的起名儘量做到見名知意。

12. 類型轉換

隱式類型轉換(自動類型轉換)
從範圍小的類型到範圍大類型的轉換,系統會自動進行類型提升,稱爲自動類型轉換。
在這裏插入圖片描述

1.boolean不參與類型轉換
2.byte不能自動類型轉換爲char
3.char不能自動類型轉換爲short
4.short不能自動類型轉換爲char

強制類型轉換
從範圍大的類型到範圍小的類型的轉換,需要進行強制類型轉換。
格式:

目標數據類型 變量名 = (目標數據類型)變量值(常量值);

弊端:會造成數據精度丟失。儘量少用強制轉換。
在這裏插入圖片描述

1.boolean不參與類型轉換
2.char可以強制類型轉換爲byte
3.short可以強制類型轉換爲char
4.char可以強制類型轉換爲short

13. 運算符和表達式

運算符:對常量或者變量進行操作的符號。
表達式:通過運算符連接起來的式子

例如:
+ 是運算符,10 + 20 是表達式
- 是運算符,a - b   是表達式

常用的運算符
算術運算符、賦值運算符、自增自減運算符、關係運算符、邏輯運算符、三元運算符

13.1 算術運算符

符號 作用 說明
+ 對數字進行加法運算,對字符串進行拼接
- 進行減法操作
* 進行乘法操作
/ 整數相除的結果只能是整數,想要得到小數,必須有浮點數參與運算。 a / b ,獲得 a 和 b 的商
% 取餘 a%b 獲得 a 和 b 相除的餘數

13.1.1 表達式類型提升

byte、short、char變量之間進行運算時,類型自動提升爲int。
變量參與運算時,最終結果以最高類型爲準。
在這裏插入圖片描述

/*
	表達式類型提升:
		1. byte、short、char變量之間進行運算時,類型自動提升爲int。
		2. 變量參與運算時,最終結果以最高類型爲準。
*/
public class OperatorDemo02 {
	public static void main(String[] args) {
		
		// 1、byte、short、char變量之間進行運算時,類型自動提升爲int。
		byte b = 10;
        
         //編譯報錯,b+5,變量b會自動提升爲int類型,運算結果爲int,賦值給byte需要強轉。
		// byte b2 = b + 5;  
       
		int b2 = b+5; 
		System.out.println(b2);
		
		// 2. 變量參與運算時,最終結果以最高類型爲準。
		int num1 = 10;
		long num2 = 20L;
		long num3 =  num1 + num2; //int + long --->long
		System.out.println(num3);
	}
}

13.1.2 字符的 + 運算

字符參與運算的規則:
將字符換算成編碼表裏對應的數值進行運算。
等價於:把char類型數據換成對應的十進制數來參與運算
編碼表:
計算機底層使用二進制運算,所以文字和符號必須轉換成二進制數才能被計算機識別,編碼表就是將文字等符號編成對應的數的表格,因爲二進制記錄起來比較麻煩,所以使用十進制數進行文字編碼。
世界上第一張編碼表ASCII(美國標準信息交換碼)。常用編碼表都兼容ASCII碼錶。
常用的編碼:
ASCII編碼:美國標準信息交換碼,世界上第一張編碼表。
GB2312編碼:簡體中文編碼,對常用漢字進行了編碼,兼容ASCII。
GBK:加強版的中文編碼表,對更多漢字進行了編碼,兼容ASCII
UTF-8編碼:萬國碼表,常作爲瀏覽器上的網頁編碼,可以統一顯示各國文字,兼容ASCII。
常見字符對應的十進制數:
‘ a’ ~ ‘z’ : 97 ~ 122
‘A’ ~ ‘Z’ : 65 ~ 90
‘0’ ~ ‘9’ : 48 ~ 57
基本漢字:19968 ~ 40869
char類型表示的範圍:0~65535
ASCII編碼表
在這裏插入圖片描述

/*
	字符參與運算的規則:
		將字符換算成編碼表裏對應的數值進行運算。
*/
public class CharDemo2{
	public static void main(String[] args){
		//a~z  97~122
		//A~Z  65-90
		//0~9  48~57
		//基本漢字:19968 ~ 40869
	
		char c = 'a';
		int b = c + 10;
		System.out.println(b); //c是char類型,參與運算先轉爲十進制,在參與運算 //107
		
		char  c2 = 97;
		System.out.println(c2); //c2是char,打印c2就是打印他的char類型數據 //a
		
		//char類型範圍 0~65535
		// char c3 = 65536;  //報錯,超過了char的範圍
		
		int c3 = '中';
		int c4 = '國';
		
		System.out.println(c3); //20013
		System.out.println(c4); //22269
		
		char c5 = 20013;
		char c6 = 22269;
		System.out.println(c5); //中
		System.out.println(c6); //國
		
		char c7 = '9';  //9
		char c8 = 57;  //9
		char c9 = 9; //打印的結果不是數字9,而是9對應的編碼表的符號73
	}
}

13.1.3 字符串的+運算

與字符串進行 “+” 運算,是進行字符串拼接操作,運算結果還是字符串。
字符串只能進行 + 運算

//字符串的加法運算
public class StringAddDemo{
	public static void main(String[] args){
		int age = 25;
		System.out.println("我的年齡是:"+age+"歲"); //輸出結果:我的年齡是:25歲
	}
}

13.2 賦值運算符

賦值運算符作用
將表達式或者常量值賦給變量。
賦值運算符分類

符號 作用 說明
= 賦值 a=10,將10賦值給變量a
+= 加後賦值 a+=b,將a+b的值給a
-= 減後賦值 a-=b,將a-b的值給a
*= 乘後賦值 a*=b,將a×b的值給a
/= 除後賦值 a/=b,將a÷b的商給a
%= 取餘後賦值 a%=b,將a÷b的餘數給a

注意:擴展的賦值運算符隱含了強制類型轉換。

/*
	賦值運算符:
		擴展賦值運算符隱含了強制類型轉換
*/
public class FuZhiDemo {
	public static void main(String[] args) {
		//1. 基本賦值運算符 =
		int a = 10;
		System.out.println(a);
		
		//2. 擴展賦值運算符
		int b = 20;
		// b+=5;
		// b-=5;
		// b*=5;
		// b/=5;
		b%=5;  //b = b%5; 
		System.out.println(b);//0
		
		// 3. 擴展賦值運算符隱含了強制類型轉換
		byte num = 10;
		num+=5;  // 相當於:num = (byte)(num+5);
        
        // num  = num + 5; //報錯
        
        System.out.println(num);	
	}
}

13.3 自增自減運算符

1、++ 、 – 可以放在變量的前面,也可以放在變量的後面。
單獨進行運算時放在前面或者後面,效果一樣。
2、參與其他運算的時候:
a++ :先將a的值參與其他運算,運算結束後再自身加1。
++a :先將a自身加1,再將自增後的值參與其他運算。
自減與自增規則相同。
3、最常見用法:單獨使用。

13.4 關係運算符

符號 作用 說明
== 等於 a == b,判斷如果a等於b,則爲true,否則爲false
!= 不等於 a!=b,判斷如果a不等於b,則爲true,否則爲false
> 大於 a>b,如果a大於b,則爲true,否則爲false
>= 大於等於 a>=b,如果a大於等於b,則爲true,否則爲false
< 小於 a<b,如果a小於b,則爲true,否則爲false
<= 小於等於 a<=b,如果a小於等於b,則爲true,否則爲false

注意:

  1. 關係運算符的運算結果都是boolean類型,要麼是true,要麼是false。
  2. = 是賦值符號, == 纔是判斷是否相等的符號。

13.5 邏輯運算符

什麼是邏輯運算符?
1、邏輯運算符用於連接關係表達式,描述更復雜的邏輯關係。
2、邏輯運算符的運算結果是boolean類型。
邏輯運算符有哪些

符號 說明 格式 運算結果
& 邏輯與 表達式1 & 表達式2 有false則false
| 邏輯或 表達式1 | 表達式2 有true則true
邏輯非 ! (表達式) 對表達式結果取反
^ 邏輯異或s 表達式1 ^ 表達式2 不同爲true,相同爲false

短路邏輯運算符(掌握)

符號 作用 說明
&& 短路與 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果

區別:

  • 表達式1 & 表達式2 :所有表達式都會執行。
  • 表達式1 && 表達式2 :如果表達式1爲false,則右邊表達式不再執行,可以提高效率。
  • 表達式1 | 表達式2 :所有表達式都會執行。
  • 表達式1 || 表達式2 :如果表達式1爲true,則右邊表達式不再執行,可以提高效率。
    實際開發中,會使用短路與&&、短路或||來提高運算效率。

13.6 三元運算符(三目運算符)

語法格式:

判斷表達式 ? 表達式1 : 表達式2;

執行流程:
執行判斷表達式,判斷結果是boolean類型,爲true時執行表達式1並返回結果,false執行表達式2並返回結果。
在這裏插入圖片描述
應用場景

/*
	需求:(使用三元運算符)把三個整數按從小到大打印。	
	步驟:
		求最小值
		求最大值
		中間值:三個數的和 - 最小值 - 最大值
	
*/
public class SanYuanDemo4{
	public static void main(String[] args){
		int a = 60;
		int b = 20;
		int c = 30;
		
		//求最小值
		int tempMin = a<b? a:b;
		int min = tempMin<c? tempMin:c;
		
		//求最大值
		int tempMax = a>b?a:b;
		int max = tempMax>c?tempMax:c;
		
		//中間值:三個數的和 - 最小值 - 最大值
		int mid = a+b+c-min-max;

		//按從小到大打印
		System.out.println(min);
		System.out.println(mid);
		System.out.println(max);
	}
}

14. 鍵盤錄入:Scanner類

Scanner類的作用是什麼
Scanner是JDK提供的用於獲取鍵盤輸入的數據的工具類。該類位於java.util包下。
Scanner的使用步驟

1、導包	import java.util.Scanner
2、創建Scanner的對象	Scanner sc = new Scanner(System.in);
3、調用方法接收數據	int num = sc.nextInt();
/*
	需求:Scanner錄入數據求兩個整數的和
*/
//導包
import java.util.Scanner;
public class ScannerDemo2 {
	public static void main(String[] args) {
		//創建Scanner對象
        Scanner sc = new Scanner(System.in);

        //提示用戶輸入
        System.out.println("請輸入第一個數字:");
        //獲得鍵盤輸入
        int a = sc.nextInt();

        System.out.println("請輸入第二個數字:");
        int b = sc.nextInt();

        //求和
        int sum = a + b;
        //打印求和結果
        System.out.println("和爲:" + sum);
    }
}

15. 進制

15.1 概念

進制也就是進位制,是人們規定的一種進位方法。 對於任何一種進制—X進制,就表示某一位置上的數運算時是逢X進一位。
十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,x進制就是逢x進位。

15.2 常見的進制

二進制:由兩個基本數字0,1組成,運算規律是逢二進一.計算機都使用二進制表示數據.
八進制:由0、1、2、3、4、5、6、7組成,運算規律是逢八進一.
十進制:由0,1,2、3、4、5、6、7、8、9組成.
十六進制:由0~9以及A,B,C,D,E,F組成.

15.3 進制之間的轉換

15.3.1 十進制和二進制之間轉換

十進制—>二進制

對於整數部分,用被除數反覆除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的餘數。
另外,所得到的商的最後一位餘數是所求二進制數的最高位。

二進制—>十進制

進制數第1位的權值是2的0次方,第2位的權值是2的1次方,第2位的權值是2的2次方……公式:第N位 * 2的N-1次方,結果再相加.
在這裏插入圖片描述

15.3.2 十進制和十六進制之間轉換

十進制—>十六進制:

10進制數轉換成16進制的方法,和轉換爲2進制的方法類似,唯一變化:除數由2變成16。

十六進制—>十進制:
第0位的權值爲16的0次方,第1位的權值爲16的1次方,第2位的權值爲16的2次方……

在這裏插入圖片描述

16. 原碼、反碼、補碼

16.1 概述

在計算機內,有符號數有3種表示法:原碼、反碼和補碼,所有數據的運算都是採用補碼進行的

16.2 原碼

寫出二進制,正數符號位爲0,負數符號位爲1

16.3 反碼

正數的反碼是本身,負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反

16.4 補碼

正數的補碼就是其本身,負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
在這裏插入圖片描述

17. 流程控制語句

流程控制語句分爲哪幾類
順序結構、選擇(分支)結構、循環結構

17.1 順序結構

按照代碼書寫順序,從上往下執行。
在這裏插入圖片描述

17.2 選擇結構(if switch)

17.2.1 if結構

if語句格式1

if (關係表達式) {
    語句體;	
}

執行流程
1、首先計算關係表達式的值。
2、表達式的值爲 true 時執行語句體,爲 false 時不執行語句體。
3、往下執行 if結構後面的語句內容。

if語句格式2

if(關係表達式){
    語句體1;
}else{
    語句體2;
}

執行流程:
1、首先計算關係表達式的值。
2、表達式的值爲 true 時執行語句體1,爲 false 時執行語句體2。
3、繼續執行 if-else 結構後面的語句內容。

if語句格式3

if(關係表達式1){
    語句體1;
}else if(關係表達式2){
    語句體2;
}else{
    語句體3;
}
//【注意】 該格式中可以有多個else if結構,可以沒有else結構。

執行流程
1、首先計算關係表達式1的值。
2、如果爲 true 則執行語句體1,爲 false 時計算關係表達式2的值。
3、如果爲 true 則執行語句體2,爲 false 時計算關係表達式3的值,以此類推。
4、所有關係表達式都爲false時,執行else裏的語句體n+1。

//案例:鍵盤錄入一個1~7的整數,輸出對應的星期一到星期日。
//導包
import java.util.Scanner;
public class IfTest{
	public static void main(String[] args){
		//創建Scanner對象
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入一個整數(1~7):");
		
		//接收鍵盤錄入的整數
		int week = sc.nextInt();
		
		//使用if-elseif結構判斷
		if(week==1){
			System.out.println("星期一");
		}else if(week==2){
			System.out.println("星期二");
		}else if(week==3){
			System.out.println("星期三");
		}else if(week==4){
			System.out.println("星期四");
		}else if(week==5){
			System.out.println("星期五");
		}else if(week==6){
			System.out.println("星期六");
		}else if(week==7){
			System.out.println("星期日");
		}else{
			System.out.println("您輸入的數字無效!");
		}
	}
}

17.2.2 switch結構

switch語句格式

switch(表達式){ //整數 byte short int  //char 字符串 //枚舉
        case 值1:
            語句體1;
           	break;
        case 值2:
            語句體2;
           	break;
        ...
        default 
            語句體n+1;
           	break;
}

執行流程:
1、先計算括號中表達式的值。
2、將結果依次和case後面的值比較,匹配上的就執行case對應的語句體,遇到break就結束switch結構。
3、當所有的case值都不匹配時,執行default後面的語句體n+1, default省略break,效果一樣。

/*
	需求: 鍵盤輸入1 2 3, 輸出對應的 "冠軍" ,"亞軍", "季軍" 

*/	
public class SwitchDemo {
	public static void main(String[] args) {
		//獲取鍵盤錄入
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入一個整數(1~3):");
		int num = sc.nextInt();
	
		switch(num){
			case 1:
				System.out.println("冠軍");
				break;
			case 2:
				System.out.println("亞軍");
				break;
			case 3:
				System.out.println("季軍");
				break;
            default:
                System.out.println("無");
		}
	}
}

switch的注意事項:
1、switch中表達式的值:byte short char int , 枚舉, 字符串
2、case 後面的值不能重複,不能是變量,只能是常量
3、case的值都不匹配的時候,執行default的內容,default可以省略(不建議),default可以改變位置(不建議)
4、break的作用是結束switch語句
5、break可以省略,但是會有case穿透現象
case穿透現象:不用再判斷case的值,直接執行下面的語句,直到遇到break或者程序結束。

case穿透案例:

/*
	春夏秋冬

	需求:
		一年有12個月,分屬於春夏秋冬4個季節,鍵盤錄入一個月份,
		請用程序實現判斷該月份屬於哪個季節,並輸出。

	春:3、4、5
	夏:6、7、8
	秋:9、10、11
	冬:12、1、2
*/

import java.util.Scanner;

public class SwitchDemo {
	public static void main(String[] args) {
		//鍵盤錄入月份數據,使用變量接收
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入一個月份:");
		int month = sc.nextInt();
	
		//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 12:
			case 1:
			case 2:
				System.out.println("冬季");
				break;
			default:
				System.out.println("你輸入的月份有誤");
		}		
	}
}

17.3 循環結構

循環語句可以在滿足循環條件的情況下,反覆執行某一段代碼,這段被重複執行的代碼被稱爲循環體語句,當反覆 執行這個循環體時,需要在合適的時候結束循環,否則循環將一直執行下去,形成死循環。

17.3.1 for循環

for循環格式

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

//案例:for循環打印5次HelloWorld
for(int i=1; i<=5; i++){
    System.out.println("HelloWorld");
}

執行流程
1、執行初始化語句:int i = 1(只會執行一次)。
2、執行條件判斷語句 i<=5,如果爲true,執行循環體語句,如果爲false,則結束循環。
3、執行循環體語句 : System.out.println(“HelloWorld”);
4、執行條件控制語句 :i++
5、回到第2步繼續往下執行。
在這裏插入圖片描述

/*
	需求:使用for循環統計水仙花數的個數
*/
public class ForDemo5 {
    public static void main(String[] args) {
        //定義統計變量
        int count = 0;
        
		// 1. for循環獲取所有三位數
		for(int i=100; i<1000; i++) {
            
			// 2. 得到每個三位數的個,十,百位上的數字
			int unit = i/1%10;
			int ten = i/10%10;
			int hundred = i/100%10;
			
			// 3. 判斷是否是水仙花數 : 個, 十, 百位立方和等於該三位數本身
			if(unit*unit*unit + ten*ten*ten + hundred*hundred*hundred == i) {
				//4. 統計個數
				count++;
			}
		}
        // 5. 循環結束打印個數
        System.out.println(count);
    }
}

17.3.2 while循環

while循環格式

初始化語句;
while(條件判斷語句){
    循環體語句;
    條件控制語句;
}
//案例:while循環打印5次HelloWorld 
int i = 1;
while(i<=5){
    System.out.println("HelloWorld");
    i++;
}

執行流程圖
在這裏插入圖片描述

/*
	需求:使用while循環求1~100的偶數個數
*/
public class WhileDemo{
	public static void main(String[] args){
		//定義統計變量
		int count = 0;
        
		//初始化循環條件
		int i = 1;
		//循環獲得1~100的整數
		while(i<=100){
			//獲得偶數
			if(i%2==0){
				//統計個數
				count++;
			}
			//控制循環條件
			i++;
		}
		//循環結束,打印偶數個數
		System.out.println("1~100的偶數個數爲:"+count);
	}
}

17.3.3 do while循環

do-while循環格式

初始化語句;
do {
	循環體語句;
	條件控制語句;
}while(條件判斷語句);
//案例:while循環打印5次HelloWorld 
int i = 1;
do{
    System.out.println("HelloWorld");
    i++;
}while(i<=5);

執行流程
1、執行初始化語句。(只執行一次)
2、執行循環體語句。
3、執行條件控制語句。
4、執行條件判斷語句,如果爲false則結束循環,如果爲true則回到第2步繼續執行。
注意:do-while循環至少會執行一次循環體語句。
在這裏插入圖片描述

17.3.4 三種循環的區別

for while do-while
特點 先判斷,再執行 先判斷,再執行 先執行,後判斷(至少執行一次)
初始化變量 for循環外無法使用初始化變量 循環結束後,初始化變量能繼續使用 循環結束後,初始化變量能繼續使用
適用場景 循環次數確定的情況 循環次數不確定的情況 循環至少需要執行一次

依次推薦使用:for循環 、while循環 、do-while循環
三種循環的死循環簡單寫法:

//1、for循環
for(;;){
    
}

//2、while循環(建議)
while(true){
    
}

//3、do-while循環
do{
    
}while(true);

17.4 跳轉控制語句

17.4.1 break關鍵字

break使用場景:
    1、在switch中,用於結束switch結構。
    2、在循環中,用於結束break所在循環。
    3、當有循環嵌套時,可以爲循環加上標籤,讓break結束指定循環。

注意:
	break語句後面不能直接跟其他語句,否則會編譯報錯。

17.4.2 continue關鍵字

continue使用場景:
	1. continue只能在循環中使用,用於跳過一次循環,開始下一次循環。
	2. 當有循環嵌套時,可以配合標籤,跳到指定循環繼續執行。
	
注意:	
	continue後面不能直接跟其他語句,否則會編譯報錯。

17.4.3 break和continue的區別

break:結束整個循環。
continue:跳過本次循環,繼續下一次循環。

public class ControlDemo{
    public static void main(String[] args){
        
        for(int i=1; i<=5; i++){
            if( i%2==0 ){
                continue; //遇到continue開始下次循環:打印奇數
               // break; //遇到break結束整個循環
            }
        }
        
        System.out.println(i);
    }
}
/*
	模擬一個用戶系統
	控制檯顯示一個用戶菜單:
		輸入數字選擇您要的操作:
		1.新增用戶  2.修改用戶  3.刪除用戶  4.查看信息  5.退出系統
	工作人員輸入對應的編號進行操作,當輸入5時退出系統。
*/
import java.util.Scanner;
public class BreakDemo{
	public static void main(String[] args){
		//創建鍵盤錄入對象
		Scanner sc =  new Scanner(System.in);
		
		//死循環
		loop:while(true){
			System.out.println("輸入數字選擇您要的操作:");
			System.out.println("1.新增用戶  2.修改用戶  3.刪除用戶  4.查看信息  5.退出系統");
			
			int num = sc.nextInt();
			
			switch(num){
				case 1:
					System.out.println("新增成功");
					break;
				case 2:
					System.out.println("修改成功");
					break;
				case 3:
					System.out.println("刪除成功");
					break;
				case 4:
					System.out.println("當前用戶數1000");
					break;
				case 5:
					System.out.println("歡迎使用本軟件");
					//結束指定循環:loop  
					break loop; //結束loop標誌的的循環
				default:
					System.out.println("您的輸入有誤,請重新輸入!");
			}
		}
	}
}

18. 隨機數:Random類

認識Rondom類
Random是java提供的工具類,位於【 java.util 】包下,用於產生隨機數。
Random類的使用步驟

1.導包
	import java.util.Random;

2.創建對象	
	Random r = new Random();

3.產生隨機數	
	int num = r.nextInt(100);//獲取0~99的隨機數

注意:r.nextInt(100); 獲取0~99的隨機數
	r.nextInt(200);  獲取0~199的隨機數

說明
nextInt( 數值 ):代表隨機生成並返回一個整數,如果括號數值爲10,表示生成0-9的整數,數值20,表示生成0~19的整數

產生範圍65~90之間的整數   int num =  r.nextInt(26)+65; 0~25 + 65
產生範圍97~122之間的整數  int num =  r.nextInt(26)+97; 0~25 + 97
/*
	需求:隨機生成一個1~100之間的整數.
*/
//1.導包
import java.util.Random;
public class RandomDemo{
	public static void main(String[] args){
        
		//2.創建Random對象
		Random r = new Random();
		//3.調用方法產生隨機數
		int num = r.nextInt(100)+1; 
        
		System.out.println(num);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章