天天看點

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

目錄

一,環境搭建

1,Java體系與特點

2,Java跨平台原理

2.1 Java虛拟機(JVM)

2.2 垃圾回收器(GC)

2.3 Java SE組成概念圖

2.4 JDK與JRE

2.5 環境變量

3,Java程式開發的三個步驟

4, 文法

注釋

Java代碼的位置

文法規則

二,基礎文法

1,變量與基本資料類型

1.1 變量

1.2 資料類型

1.3 辨別符

1.4 資料類型的轉換

1.5 部分變量的使用

1.6 ASCII碼表

2,方法

2.1 概述

2.2 格式

2.3 權限修飾符詳解

2.4 傳回值

2.5 參數清單詳解

2.6 方法執行個體

3,運算符

3.1 算數運算符

3.2 指派運算符

3.3 關系運算符

3.4 邏輯運算符

3.5 字元串連接配接運算符

3.6 三目運算符

4,命名規範

5,轉義字元

三,流程控制

1,接收使用者輸入

2,程式的執行結構

3,分支執行結構

3.1 if條件語句

3.2 switch語句

4,循環執行結構

4.1 while循環

4.2  do-while 循環

4.3 for循環

4.4 break、continue與多重循環的跳出

4.5 判斷使用者輸入類型

四,數組

1,數組

1.1 數組概念

1.2 數組建立格式

1.3 數組相關操作

2,數組常見問題

2.1 下标越界

2.2 空指針問題

3,數組應用

3.1 尋找數組最大最小值

3.2 常用算法

五,綜合案例

一,環境搭建

1,Java體系與特點

Java1.2之後分為三個方向——Java SE、Java EE、Java ME;
  1. Java SE:Java Platform ,Standard Edition。标準版:各種應用平台的基礎,桌面開發和低端商務應用的解決方案。
  2. Java EE:Java Platform ,Enterprise Edition。企業版:以企業為環境而開發應用程式的解決方案。
  3. Java ME:Java Platform ,Micro Edition。微型版:緻力于消費産品和嵌入式裝置的最佳解決方案。
Java可以做什麼?
  • 開發桌面應用程式:銀行軟體、商場結算軟體;
  • 開發面向Internet的web應用程式:門戶網站(工商銀行)、網上商城、阿裡巴巴、電子商務網站;
  • 提供各行業的解決方案:提供各行業的解決方案;
  • 嵌入式開發:行動電話、可視電話、數字機頂盒和汽車導航系統;
Java的特性
  1. 一種純面向對象的程式設計語言;
  2.  一種與平台無關(跨平台)的語言;(它提供了在不同平台下運作的解釋環境)【當時九幾年Java提出這個特性,然而現在很多語言都具備了】
  3.  一種健壯的語言,吸收了 C/C++語言的優點。;
  4. 有較高的安全性。(自動回收垃圾【C++中需要手動new/delete】,強制類型檢查,取消指針);

2,Java跨平台原理

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

2.1 Java虛拟機(JVM)

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
JVM 可以了解成一個可運作 Java 位元組碼的虛拟計算機系統
  • 它有一個解釋器元件,可以實作 Java 位元組碼和計算機作業系統之間的通信;
  • 對于不同的運作平台,有不同 的 JVM;
JVM 屏蔽了底層運作平台的差别,實作了“一次編譯,随處運作”。

2.2 垃圾回收器(GC)

簡單介紹
  • 不再使用的記憶體空間應當進行回收-垃圾回收。 
  • 在 C/C++等語言中,由程式員負責回收無用記憶體。 
  • Java 語言消除了程式員回收無用記憶體空間的責任: JVM 提供了一種系統線程跟蹤存儲空間的配置設定情況。并在 JVM 的空閑時,檢查并釋放那些可以被釋放的存儲空間。 
  • 垃圾回收器在 Java 程式運作過程中自動啟用,程式員無法精确控制和幹預。

2.3 Java SE組成概念圖

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

單純運作Java程式:JRE;

進行Java項目開發:JDK;

2.4 JDK與JRE

JDK(Java Development Kits)Java 開發工具集 

JDK(Java Development Kit)又稱J2SDK(Java2 Software Development Kit),是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用于将java檔案編譯為class檔案)和運作環境(提 供了JVM和Runtime輔助包,用于解析class檔案使其得到運作)。如果你下載下傳并安裝了JDK,那麼你不僅可以開發Java程式,也同時擁有了運 行Java程式的平台。JDK是整個Java的核心,包括了Java運作環境(JRE),一堆Java工具tools.jar和Java标準類庫 (rt.jar)。

具體包括:

  • JRE(Java Runtime Environment)Java 運作時環境 
  • JVM
  • Java API (應用程式程式設計接口) 
  • Java 編譯器(javac.exe)、Java 運作時解釋器(java.exe)、Java 文檔化化工具(javadoc.exe)及其它工具及資源

JRE(Java Runtime Enviroment)Java運作環境:

JRE(Java Runtime Enviroment)是Java的運作環境。面向Java程式的使用者,而不是開發者。如果你僅下載下傳并安裝了JRE,那麼你的系統隻能運作Java程式。JRE是運作Java程式所必須環境的集合,包含JVM标準實作及 Java核心類庫。它包括Java虛拟機、Java平台核心類和支援檔案。它不包含開發工具(編譯器、調試器等)。

主要功能有:

  • 加載代碼:由類加載器(class loader)完成;
  • 校驗代碼:由位元組碼校驗器(byte code verifier)完成;
  • 執行代碼:由運作時解釋器(runtime interpreter)完成;

2.5 環境變量

環境變量一般指的是:我的電腦-》屬性-》進階系統設定-》環境變量
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
環境變量的配置:
  • 為了使得安裝的JDK檔案在任意檔案夾中可以正常運作,需要對環境變量中的Path變量進行修改;(不配置的話,隻能在JDK安裝目錄中才能正常運作Java程式,比如在該目錄下輸入指令:java -version,可以正常出現JDK版本。而在其他目錄輸入指令時,則會報錯:不是内部或外部指令)
  • 将 JDK安裝檔案夾路徑\bin; 添加到Path中;
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
  • 然而由于日常生活中不同項目所用的JDK版本有可能不一緻,是以需要頻繁地更換Path中JDK的位置,這就使得配置過程中極易出錯,萬一誤删了環境變量Path中重要的值,很有可能系統部分功能無法正常運作;
  • 是以采取的方法是:用一個一個變量JAVA_HOME代替JDK的位置,并在原先Path中的位置替換為 %JAVA_HOME%\bin; ,這樣就可以實作原先配置同樣的功能;
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3,Java程式開發的三個步驟

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

4, 文法

注釋

單行注釋://注釋

多行注釋:

文檔注釋:

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

Java代碼的位置

class必須寫在 .java 檔案中;

文法規則

  • Java是一種純面向對象的語言,任何代碼語句必須包含在class中;
  • 嚴格區分大小寫;
  • 是一種自由格式的語言;
  • 代碼分為結構定義語句和功能執行語句;
  • 功能執行語句最後必須以分号結束;

二,基礎文法

1,變量與基本資料類型

1.1 變量

變量就是系統為程式配置設定的一塊記憶體單元,用來存儲各種類型的資料。由于該存儲單元中的資料可以發生改變,是以得名為"變量"。

變量分類

按所屬的資料類型劃分: 
  • 基本資料類型變量 
  • 引用資料類型變量 (比如字元串)
按被聲明的位置劃分: 
  • 局部變量:方法或語句塊内部定義的變量
  • 成員變量:方法外部、類的内部定義的變量 

特别注意:類的外面不能有變量的聲明

1.2 資料類型

由于變量記錄的資料内容大小不同, 導緻所需的存儲單元大小不同,在 Java 語言中使用資料類型的概念加以描述 . (C/C++、Java都屬于強類型語言,聲明變量時必須指定變量類型。相對應的,python屬于弱類型語言)

位元組是計算機資訊技術用于計量存儲容量的一種計量機關,作為一個機關來處理的一個二進制數字串,是構成 資訊的一個小機關。Java 中的位元組是八位的位元組,即它包含八位的二進制數。

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

1.3 辨別符

Java 對包、類、方法、參數和變量等要素命名時使用的字元序列稱為辨別符。

規則如下:  

  • 由字母、數字、下劃線(_)和美元符号($)組成。(甚至可以使用中文作為部分變量,但不建議這樣做)
  • 不能以數字開頭。
  • 區分大小。
  • 長度無限制。
  • 不能是 Java 中的保留關鍵字。 

辨別符命名習慣:見名知意。

示例:

  • 合法辨別符:HelloWord、username2、user_name、_userName、$abc_123 
  • 非法辨別符:2UserName、user#Name、Hello World、class

1.4 資料類型的轉換

boolean 類型不能轉換成任何其它資料類型。 

自動類型轉換:

  • 容量小的類型自動轉換成容量大的資料類型 byte,short,int -> float ->long ->double 
  • byte,short,int 不會互相轉換,它們三者在計算時會轉換成 int 類型 
強制類型轉換:
  • 容量大的類型轉換成容量小的資料類型時,要加上強制轉換符 
  • long l = 100L;
  • int i = (int)l; 
  • 有可能造成精度降低或資料溢出,使用時要小心

1.5 部分變量的使用

當出現以下場景時,編譯器會提示錯誤:

float num1 = 10.1;// 浮點數預設為double類型,由于左邊float,右邊double,是以提示需要強制類型轉換。解決方法:在浮點數後加字元 f,即 float num1 = 10.1f;

long num2 = 2200000000;// 整型預設為int,最大值為21億多,long型變量雖然足夠容納,但由于左邊為long,右邊為int,是以還是會提示超出範圍。解決方法:在整型後加字元l,即long num2 = 2200000000l;

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

1.6 ASCII碼表

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

2,方法

2.1 概述

方法用于封裝一段特定的邏輯功能。方法的主要要素有:權限修飾符、方法名、參數清單和傳回值。

2.2 格式

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

2.3 權限修飾符詳解

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

2.4 傳回值

方法調用結束後可以傳回一個資料,稱之為傳回值。 

方法在聲明時必須指定傳回值的類型。 

通過 return 語句傳回,return 語句的作用在于結束方法且将資料傳回。 

如果方法沒有傳回值(即方法不需要傳回資料),需将傳回值類型聲明為 void

2.5 參數清單詳解

方法的參數清單:在調用時傳遞給方法,需要被方法處理的資料。 

在方法定義時,需要聲明該方法所需要的參數變量。 

在方法調用時,會将實際參數值傳遞給方法的參數變量。

必須保證傳遞參數的類型和個數符合方法的聲明。

2.6 方法執行個體

public void say(int a, int b) {
    System.out.println("say函數正在執行");
}
           
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3,運算符

3.1 算數運算符

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

++: 

如果是變量字首:先對此變量加 1,再執行其他的操作。 

如果是變量字尾:先執行目前語句的其他操作,再對此變量加 1 

--: 

如果是變量字首:先對此變量減 1,再執行其他的操作。 

如果是變量字尾:先執行目前語句的其他操作,再對此變量減 1

3.2 指派運算符

指派運算符作用是将一個值賦給一個變量,運算順序從右到左;
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3.3 關系運算符

關系運算符作用是比較兩邊的操作數,結果總是 boolean 型的。
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3.4 邏輯運算符

邏輯運算符用于對 boolean 型結果的表達式進行運算,運算結果總是 boolean 型,後面結合條件結構講解。
  • &:與,需要左右兩端都計算出,結果全0為false,否則為true;
  • &&:短路與,左邊計算出為false則停止後面的運算,否則繼續執行運算符後面的表達式,全部為true,才判斷為true;
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3.5 字元串連接配接運算符

String s="He" + "llo"; 結果"Hello" 

"+"除了可用于字元串相連接配接,也能将字元串與其它的資料類型相連成一個新的字元串。 (“+”兩邊任意一邊為字元串,結果就為字元串);

如:String s="x" + 123; 結果"x123

3.6 三目運算符

X ? Y : Z 

X 為 boolean 類型表達式,先計算 x 的值,若為 true,整個三目運算的結果為表達式 y 的值,否則整個運算結果為表達式 z 的值。 

例:

  • int score = 75; 
  • String type = score >=60 ? "及格" : "不及格";

4,命名規範

辨別符 :Java 對包、類、方法、參數和變量等要素命名時使用的字元序列稱為辨別符。

規則如下: 

  • 由字母、數字、下劃線(_)和美元符号($)組成。
  • 不能以數字開頭。 
  • 區分大小。 
  • 長度無限制。
  • 不能是 Java 中的保留關鍵字。 
命名規範: 軟性建議 
  • 類名規範:首字母大寫,後面每個單詞首字母大寫(大駝峰式)。 
  • 方法名規範: 首字母小寫,後面每個單詞首字母大寫(小駝峰式)。 
  • 變量名規範:全部小寫。

5,轉義字元

所有的ASCII碼都可以用“\”加數字(一般是8進制數字)來表示。而C中定義了一些字母前加"\"來表示常見的那些不能 顯示的ASCII字元,如\0,\t,\n等,就稱為轉義字元,因為後面的字元,都不是它本來的ASCII字元意思了。
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

三,流程控制

1,接收使用者輸入

首先,建立Scanner工具類對應的實體對象input,用于操作輸入,需要注意以下兩點:
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
更具體的輸入,需要使用上一步建立的實體input帶有的函數,比如:
  • input.nextInt();     // 傳回值為int
  • input.nextFloat(); // 傳回值為float
  • input.nextByte();  // 傳回值為byte
  • ......
然而上述函數要求輸入必須與預定類型一緻。為了友善接受各種不同類型的輸入,可以使用函數:
  • input.next();        // 傳回值為String
  • input.nextLine(); // 傳回值為String

注意:

next與nextLine盡量不要同時使用,以下面的例子為例:
package com.kaikeba.demo;
import java.util.Scanner;
public class Demo4 {		
	public static void main(String[] args) {	
		Scanner input = new Scanner(System.in);
		System.out.println("請輸入next接受的内容:");
		String s1 =  input.next();
		System.out.println(s1);
		System.out.println("請輸入nextLine接受的内容:");
		String s2 = input.nextLine();
		System.out.println(s2);
		System.out.println("------我是分界線------");
	}
}
           

原先設想的是可以在控制台輸入兩次資料,一次給next函數,另一次給nextLine函數。然而運作時會發現,next接收資料後,敲下回車,可以正常顯示,等到nextLine函數接受資料時,卻不能繼續在控制台進行輸入。

原因是:敲下回車後,next函數接受了資料,nextLine函數接收了後面的換行字元;是以s2中存放的是換行字元;

2,程式的執行結構

1996 年,計算機科學家 Bohm 和 Jacopini 證明了:任何簡單或複雜的算法都可以由順序結構、分支結構和循環結構這三種基本 結構組合而成。 

它們的共同點是都包含一個入口和一個出口,它們的每個代碼都有機會被執行,不會出現死循環。

  • 順序結構 :順序結構是一種基本的控制結構,它按照語句出現的順序執行操作 ;
  • 分支結構 :分支結構又被稱為選擇結構,根據條件成立與否來執行操作;
  • 循環結構 :循環結構是一種重複結構,如果條件成立,它會重複執行某一循環體,直到出現不滿足的條件為止;

3,分支執行結構

3.1 if條件語句

if 條件結構是根據條件判斷之後再做處理 
  • if(條件語句){…} 
  • if (條件語句){…}else{…} 
  • if (條件語句){…}else if(條件語句){…} 
  • if (條件語句){…}else if(條件語句){…}else{…} 
例子:使用者輸入學生成績,判斷成績是否及格,判斷條件為 優良: > 90、良好:81-90、中:60-80、不及格:<60
import java.util.Scanner; 
public class Demo4{ 
	public static void main(String[] args){ 
		Scanner input = new Scanner(System.in); 
		System.out.println("請輸入成績:"); 
		int score s= input.nextInt(); // 91 優 81-90 良 60-80 中 60 差 
		if(score >= 91){ 
			System.out.println("您的成績是優秀!繼續加油哦!"); 
		}else if(score >= 81 & score < 91){ 
			System.out.println("您的成績是良好!還要努力哦!"); 
		}else if(score >= 60 & score <= 80){ 
			System.out.println("您的成績是中等!還要加倍努力哦!"); 
		}else{ 
			System.out.println("您的成績是差!準備補考費吧!"); 
		} 
	}
}
           

3.2 switch語句

switch(表達式){ 

case 取值 1: 語句塊 1;break; 

case 取值 n: 語句塊 n;break; 

default: 語句塊 n+1;break;

}

switch 語句有關規則 

  • 表達式的傳回值必須是下述幾種類型之一:int, byte, char, short,String; 
  • case 子句中的取值必須是常量,且所有 case 子句中的取值應是不同的; 
  • default 子句是可選的; 
  • break 語句用來在執行完一個 case 分支後使程式跳出 switch 語句塊;
  • 如果 case 後面沒有寫 break 則直接往下面執行! 
  • Case 後面的執行體可寫{ }也可以不寫{ } 
例題:多分支月份輸出天數(充分利用語句特性)
import java.util.Scanner; 
public class Demo6{ 
	public static void main(String[] args){ 
		Scanner input = new Scanner(System.in); 
		System.out.println("請輸入月份:"); 
		int month = input.nextInt(); 
		switch(month){ 
			case 1: 
			case 3: 
			case 5: 
			case 7: 
			case 8: 
			case 10: 
			case 12: 
				System.out.println(month + "月共有 31 天"); 
				break; 
			case 4: 
			case 6: 
			case 9: 
			case 11: 
				System.out.println(month + "月共有 30 天"); 
				break; 
			case 2: 
				System.out.println(month + "月共有 28 天");  
				break; 
			default : 
				System.out.println("友情提示,您輸入有誤!"); 
				break; 
		} 
	} 
}
           

4,循環執行結構

循環語句功能 
  • 在循環條件滿足的情況下,反複執行特定代碼 
循環語句分類 
  • for 循環 
  • while 循環 
  • do/while 循環

4.1 while循環

符合條件,循環繼續執行;否則,循環退出 

特點:先判斷,再執行

  • while(條件表達式){ 
  •     //語句塊;
  • }
int sum = 0;
int score = 0; 
int avg = 0;
int studentNum = 20; 
while(i<=studentNum){ 
	System.out.print("請輸入第" + i + "位同學的成績:"); 
	score = input.nextInt(); 
	sum = sum + score; 
	i++; 
}
avg = sum / stuNum ;
           

4.2  do-while 循環

先執行一遍循環操作,符合條件,循環繼續執行;否則,循環退出 (保證函數體内的代碼至少執行一次)

特點:先執行,再判斷

  • do { 
  •     循環操作 
  • }while ( 條件表達式 );
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

4.3 for循環

  • for(初始化參數;判斷條件 ;更新循環變量){ 
  •     循環體; 
  • }
public class ForLoop { 
	public static void main(String [] args){ 
		int result = 0; 
		for(int i=1; i<=100; i++) { 
			result += i; 
		}
		System.out.println("result=" + result); 
	} 
}
           

4.4 break、continue與多重循環的跳出

break:跳出包含break的最近的一個循環體;

continue:跳過此次循環體中continue語句後的代碼,并執行下一次循環;

多重循環的跳出使用别名的方法,舉例如下:

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

4.5 判斷使用者輸入類型

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

四,數組

1,數組

1.1 數組概念

數組是相同資料類型的多個資料的容器。

這些元素按線性順序排列。所謂線性順序是指除第一個元素外,每一個元素都有唯一的前驅元素;除最後一個元素外,每一個元素都有唯一的後繼元素。(“簡單了解就是:一個跟一個順序排列”)。

1.2 數組建立格式

格式 1. 資料類型[] 數組名稱 = new 資料類型[數組長度];

格式 2. 資料類型[] 數組名稱 = {數組内容 1,數組内容 2,數組内容 3...數組内容 n};

格式 3. 資料類型[] 數組名;

格式 3 屬于隻建立了數組引用名, 并未在記憶體建立數組空間。

格式 4. 資料類型[] 數組名稱 = new 資料類型[]{内容 1,内容 2,内容 3...内容 n};

package com.kaikeba.demo;
import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		/*
		 * 建立數組的格式
		 */
		// 常用格式1:建立數組同時指定數組内容
		// 資料類型[] 數組名 = {資料1,資料2,資料3,......};
		int[] tem1 = {1, 2, 3, 4};
		
		// 常用格式2:建立數組,指定長度,不指定内容
		// 資料類型[] 數組名 = new 資料類型[數組長度(int)類型]
		int[] tem2 = new int[10];
		
		// 不常用格式1:建立數組 不初始化
		// 資料類型[] 數組名
		int[] tem3;
		
		// 不常用格式2:建立數組并指定内容
		// 資料類型[] 數組名 = new 資料類型[]{資料1,資料2,資料3,......}
		int[] tem4 = new int[] {1, 2, 3, 4};
	}
}
           

1.3 數組相關操作

1,通過下标操作資料的方式
  • 給數組某個下标指派:
tem1[2] = 66;
           
  • 從下标取值:
System.out.println(tem1[2]);
           
2,獲得數組長度
  • 數組名.length
System.out.println(tem2.length);
           

2,數組常見問題

2.1 下标越界

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

2.2 空指針問題

名稱與值未綁定;
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3,數組應用

3.1 尋找數組最大最小值

建立變量,存儲最大值,周遊數組更新最大值;

建議:将變量初始化為數組的第一個元素;

01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例

3.2 常用算法

冒泡排序:

原理:
  • - 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 
  • - 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的 數。 
  • - 針對所有的元素重複以上的步驟,除了最後一個。 
  • - 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
名字來由:
  • 是因為最小(或最大)的元素會經由交換慢慢“浮”到數列的頂端(降序或升序),就如同水中的氣泡最終會上浮到 頂端一樣,故名“冒泡排序”。 
package com.kaikeba.demo1;

public class Demo4 {

	/**
	 * 冒泡排序
	 * @param args
	 */
	public static void main(String[] args) {
		int[] nums = {20,15,18,13,30,60};
		int temp;
		//外層循環控制的是, 比較的輪數。
		//外層循環次數: length-1
		for(int i=0;i<nums.length-1;i++) {
			//内層循環控制的是,每輪比較的次數
			//第i輪(i從0開始計算), 比較次數為:length-i-1
			for(int j=0;j<nums.length-i-1;j++) {
				if(nums[j]>nums[j+1]) {
					//兩兩相比, 滿足移動條件
					temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}
		
		
		//排序已經完成。 下面是周遊列印檢視的過程
		for(int i=0;i<nums.length;i++) {
			System.out.println(nums[i]);
		}
		
		
		
	}

}
           

二分查找

概述
  • 二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。但是,二分查找要求數組資料必須采用順序存儲結構有序排列。
原理
  • 首先,假設數組中元素是按升序排列,将數組中間位置的資料與查找資料比較,如果兩者相等,則查找成功;否則利用 中間位置記錄将數組分成前、後兩個子數組,如果中間位置資料大于查找資料,則進一步查找前子數組,否則進一步查 找後子數組。 
  • 重複以上過程,直到找到滿足條件的資料,則表示查找成功, 直到子數組不存在為止,表示查找不成功。
package com.kaikeba.demo1;

public class Demo5 {

	/**
	 * 二分查找(折半查找)
	 */
	public static void main(String[] args) {
		int[] nums = {10,20,30,40,50,60,70,80,90};
		
		//要查找的資料
		int num = 20;
		
		//關鍵的三個變量:
		//1.	最小範圍下标
		int minIndex = 0;
		//2.	最大範圍下标
		int maxIndex = nums.length-1;
		//3.	中間資料下标
		int centerIndex = (minIndex+maxIndex)/2;
		while(true) {
			System.out.println("循環了一次");
			if(nums[centerIndex]>num) {
				//中間資料較大
				maxIndex = centerIndex-1;
			}else if(nums[centerIndex]<num) {
				//中間資料較小
				minIndex = centerIndex+1;
			}else {
				//找到了資料  資料位置:centerIndex
				break;
			}
			
			if(minIndex > maxIndex) {
				centerIndex = -1;
				break;
			}
			//當邊界發生變化, 需要更新中間下标
			centerIndex = (minIndex+maxIndex)/2;
		}
		
		System.out.println("位置:"+centerIndex);
		
	}
}
           

多元數組

package com.kaikeba.demo;
import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		/*
		 * 多元數組
		 * 
		 * 建立格式:
		 * 		資料類型[] 數組名 = new 資料類型[長度]
		 * 		int[][] tem = new int[10][];
		 */
		int[][] tem = new int[10][];
//		tem[0] = {1, 2, 3};		// 這樣寫會報錯 
		tem[0] = new int[]{1, 2, 3};
		System.out.println(tem[0][2]);
	}
}
           

五,綜合案例

雙色球彩票訓練任務
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
01-Java基礎文法一,環境搭建二,基礎文法三,流程控制四,數組五,綜合案例
參考代碼:
package com.kaikeba.demo;

import java.util.Scanner;

public class Demo1 {
	
	public static void main(String[] args) {
		int[] winRed = new int[6];	// 中獎紅色球号碼
		int[] userRed = new int[6];	// 使用者紅色球号碼
		int winBlue;	// 中獎藍色球号碼
		int userBlue;	// 使用者藍色球号碼
		Scanner input = new Scanner(System.in);
		
		// 生成随機數
		for(int i = 0; i < 6; i++) {
			winRed[i] = (int)(Math.random() * (33 - 1) + 1);
		}
		winBlue = (int)(Math.random() * (16 - 1) + 1);
		
		// 擷取使用者提供的數字
		System.out.println("請輸入6個紅色球号碼(1-33):");
		for(int i = 0; i < 6; i++) {
			userRed[i] = input.nextInt();
		}
		System.out.println("請輸入1個藍色球号碼(1-16):");
		userBlue = input.nextInt();
		
		// 輸出中獎号碼
		System.out.println("中獎紅色球号碼分别為:");
		for(int i = 0; i < 6; i++) {
			System.out.print(winRed[i] + " ");
		}
		System.out.println();
		System.out.println("中獎藍色球号碼分别為:");
		System.out.println(winBlue);
		
		// 對比 獲得中獎号碼個數
		int scoreOfRed = 0, scoreOfBlue = 0;
		for(int i = 0; i < 6; i++) {
			for(int j = 0; j < 6; j++) {
				if(userRed[i] == winRed[i]) {
					scoreOfRed++;
					break;
				}
			}
		}
		if(userBlue == winBlue) {
			scoreOfBlue++;
		}
		
		if(scoreOfRed == 6 && scoreOfBlue == 1) {
			System.out.println("一等獎");
		}else if(scoreOfRed == 6 && scoreOfBlue == 0) {
			System.out.println("二等獎");
		}else if(scoreOfRed == 5 && scoreOfBlue == 1) {
			System.out.println("三等獎");
		}else if((scoreOfRed == 5 && scoreOfBlue == 0) ||
				(scoreOfRed == 4 && scoreOfBlue == 1)) {
			System.out.println("四等獎");
		}else if((scoreOfRed == 4 && scoreOfBlue == 0) ||
				(scoreOfRed == 3 && scoreOfBlue == 1)) {
			System.out.println("五等獎");
		}else if((scoreOfRed == 2 && scoreOfBlue == 1) ||
				(scoreOfRed == 1 && scoreOfBlue == 1) ||
				(scoreOfRed == 0 && scoreOfBlue == 1)) {
			System.out.println("六等獎");
		}else {
			System.out.println("很遺憾,未中獎");
		}
		
	}
}
           

繼續閱讀