Scanner類、Random類、ArrayList類
主要內容
- API概述
- Scanner類
- Random類
- ArrayList類
第1章 API
概述
API(Application Programming Interface),應用程式程式設計介面。Java API是一本程式設計師的 字典 ,是JDK中提供給
我們使用的類的說明文件。這些類將底層的程式碼實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學
習這些類如何使用即可。所以我們可以通過查詢API的方式,來學習Java提供的類,並得知如何使用它們。
API使用步驟
1. 開啟幫助文件。
2. 點選顯示,找到索引,看到輸入框。
3. 你要找誰?在輸入框裡輸入,然後回車。
4. 看包。java.lang下的類不需要導包,其他需要。
6. 學習構造方法。
第2章 Scanner類
瞭解了API的使用方式,我們通過Scanner類,熟悉一下查詢API,並使用類的步驟。
2.1 什麼是Scanner類
一個可以解析基本型別和字串的簡單文字掃描器。 例如,以下程式碼使使用者能夠從 System.in 中讀取一個數:
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
備註:System.in 系統輸入指的是通過鍵盤錄入資料。
2.2 引用型別使用步驟
導包
使用import關鍵字導包,在類的所有程式碼之前導包,引入要使用的型別,java.lang包下的所有類無需匯入。 格
import 包名.類名;
舉例:
java.util.Scanner;
建立物件
使用該類的構造方法,建立一個該類的物件。 格式:
資料型別 變數名 = new 資料型別(引數列表);
舉例:
Scanner sc = new Scanner(System.in);
呼叫方法
呼叫該類的成員方法,完成指定功能。 格式:
變數名.方法名();
舉例:
int i = sc.nextInt(); // 接收一個鍵盤錄入的整數
2.3 Scanner使用步驟
檢視類
- java.util.Scanner :該類需要import匯入後使用。
檢視構造方法
- public Scanner(InputStream source) : 構造一個新的 Scanner ,它生成的值是從指定的輸入流掃描的。
檢視成員方法
- public int nextInt() :將輸入資訊的下一個標記掃描為一個 int 值。
使用Scanner類,完成接收鍵盤錄入資料的操作,程式碼如下:
//1. 導包 import java.util.Scanner; public class Demo01_Scanner { public static void main(String[] args) { //2. 建立鍵盤錄入資料的物件 Scanner sc = new Scanner(System.in); //3. 接收資料 System.out.println("請錄入一個整數:"); int i = sc.nextInt(); //4. 輸出資料 System.out.println("i:"+i); } }
2.4 練習
求和
鍵盤錄入兩個資料並求和,程式碼如下:
import java.util.Scanner; public class Test01Scanner { public static void main(String[] args) { // 建立物件 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:" + sum); } }
取最值
鍵盤錄入三個資料並獲取最大值,程式碼如下:
import java.util.Scanner; public class Test02Scanner { public static void main(String[] args) { // 建立物件 Scanner sc = new Scanner(System.in); // 接收資料 System.out.println("請輸入第一個資料:"); int a = sc.nextInt(); System.out.println("請輸入第二個資料:"); int b = sc.nextInt(); System.out.println("請輸入第三個資料:"); int c = sc.nextInt(); // 如何獲取三個資料的最大值 int temp = (a > b ? a : b); int max = (temp > c ? temp : c); System.out.println("max:" + max); } }
2.5 匿名物件【瞭解】
概念
建立物件時,只有建立物件的語句,卻沒有把物件地址值賦值給某個變數。雖然是建立物件的簡化寫法,但是應用
場景非常有限。
- 匿名物件 :沒有變數名的物件。
格式:
new 類名(引數列表);
舉例:
new Scanner(System.in);
應用場景
1. 建立匿名物件直接呼叫方法,沒有變數名。
new Scanner(System.in).nextInt();
2. 一旦呼叫兩次方法,就是建立了兩個物件,造成浪費,請看如下程式碼。
new Scanner(System.in).nextInt(); new Scanner(System.in).nextInt();
小貼士:一個匿名物件,只能使用一次。
3. 匿名物件可以作為方法的引數和返回值
- 作為引數:
class Test { public static void main(String[] args) { // 普通方式 Scanner sc = new Scanner(System.in); input(sc); //匿名物件作為方法接收的引數 input(new Scanner(System.in)); } p ublic static void input(Scanner sc){ System.out.println(sc); } }
注意事項:匿名物件只能使用唯一的一次,下次再用不得不再建立一個新物件。
使用建議:如果確定有一個物件只需要使用唯一的一次,就可以用匿名物件。
- 作為返回值
class Test2 { public static void main(String[] args) { // 普通方式 Scanner sc = getScanner(); } p ublic static Scanner getScanner(){ //普通方式 //Scanner sc = new Scanner(System.in); //return sc; //匿名物件作為方法返回值 return new Scanner(System.in); } }
第3章 Random類
3.1 什麼是Random類
此類的例項用於生成偽隨機數。
例如,以下程式碼使使用者能夠得到一個隨機數:
Random r = new Random(); int i = r.nextInt();
3.2 Random使用步驟
檢視類
- java.util.Random :該類需要 import匯入使後使用。
檢視構造方法
- public Random() :建立一個新的隨機數生成器。
檢視成員方法
- public int nextInt(int n) :返回一個偽隨機數,範圍在 0 (包括)和 指定值 n (不包括)之間的int 值。
使用Random類,完成生成3個10以內的隨機整數的操作,程式碼如下:
//1. 導包 import java.util.Random; public class Demo01_Random { public static void main(String[] args) { //2. 建立鍵盤錄入資料的物件 Random r = new Random(); for(int i = 0; i < 3; i++){ //3. 隨機生成一個數據 int number = r.nextInt(10); //4. 輸出資料 System.out.println("number:"+ number); } } }
備註:建立一個 Random 物件,每次呼叫 nextInt() 方法,都會生成一個隨機數。
3.3 練習
獲取隨機數
獲取1-n之間的隨機數,包含n,程式碼如下:
// 導包 import java.util.Random; public class Test01Random { public static void main(String[] args) { int n = 50; // 建立物件 Random r = new Random(); // 獲取隨機數 int number = r.nextInt(n) + 1; // 輸出隨機數 System.out.println("number:" + number); } }
猜數字小遊戲
遊戲開始時,會隨機生成一個1-100之間的整數 number 。玩家猜測一個數字 guessNumber ,會與 number 作比較,系統提示大了或者小了,直到玩家猜中,遊戲結束。
小貼士:先執行程式程式碼,理解此題需求,經過分析後,再編寫程式碼
// 導包 import java.util.Random; public class Test02Random { public static void main(String[] args) { // 系統產生一個隨機數1‐100之間的。 Random r = new Random(); int number = r.nextInt(100) + 1; while(true){ // 鍵盤錄入我們要猜的資料 Scanner sc = new Scanner(System.in); System.out.println("請輸入你要猜的數字(1‐100):"); int guessNumber = sc.nextInt(); // 比較這兩個資料(用if語句) if (guessNumber > number) { System.out.println("你猜的資料" + guessNumber + "大了"); } else if (guessNumber < number) { System.out.println("你猜的資料" + guessNumber + "小了"); } else { System.out.println("恭喜你,猜中了"); break; } } } }
第4章 ArrayList類
4.1 引入——物件陣列
使用學生陣列,儲存三個學生物件,程式碼如下:
public class Student { private String name; private int age; public Student() { }
public Student(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
publicvoid setName(String name) { this.name = name; }
publicint getAge() { return age; }
publicvoid setAge(int age) { this.age = age; } }
public class Test01StudentArray { public static void main(String[] args) { //建立學生陣列 Student[] students = new Student[3]; //建立學生物件 Student s1 = new Student("曹操",40); Student s2 = new Student("劉備",35); Student s3 = new Student("孫權",30); //把學生物件作為元素賦值給學生陣列 students[0] = s1; students[1] = s2; students[2] = s3; //遍歷學生陣列 for(int x=0; x<students.length; x++) { Student s = students[x]; System.out.println(s.getName()+"‐‐‐"+s.getAge()); } } }
到目前為止,我們想儲存物件資料,選擇的容器,只有物件陣列。而陣列的長度是固定的,無法適應資料變化的需求。為了解決這個問題,Java提供了另一個容器 java.util.ArrayList 集合類,讓我們可以更便捷的儲存和操作物件資料。
4.2 什麼是ArrayList類
java.util.ArrayList 是大小可變的陣列的實現,儲存在內的資料稱為元素。此類提供一些方法來操作內部儲存的元素。 ArrayList 中可不斷新增元素,其大小也自動增長。
4.3 ArrayList使用步驟
檢視類
- java.util.ArrayList <E> :該類需要 import匯入使後使用。
<E> ,表示一種指定的資料型別,叫做泛型。 E ,取自Element(元素)的首字母。在出現 E 的地方,我們使用一種引用資料型別將其替換即可,表示我們將儲存哪種引用型別的元素。程式碼如下:
ArrayList<String>,ArrayList<Student>
檢視構造方法
- public ArrayList() :構造一個內容為空的集合。
基本格式:
ArrayList<String> list = new ArrayList<String>();
在JDK 7後,右側泛型的尖括號之內可以留空,但是<>仍然要寫。簡化格式:
ArrayList<String> list = new ArrayList<>();
檢視成員方法
- public boolean add(E e) : 將指定的元素新增到此集合的尾部。引數 E e ,在構造ArrayList物件時, <E> 指定了什麼資料型別,那麼 add(E e) 方法中,只能新增什麼資料型別的物件。
使用ArrayList類,儲存三個字串元素,程式碼如下:
public class Test02StudentArrayList { public static void main(String[] args) { //建立學生陣列 ArrayList<String> list = new ArrayList<>(); //建立學生物件 String s1 = "曹操"; String s2 = "劉備"; String s3 = "孫權"; //列印學生ArrayList集合 System.out.println(list); //把學生物件作為元素新增到集合 list.add(s1); list.add(s2); list.add(s3); //列印學生ArrayList集合 System.out.println(list); } }
4.4 常用方法和遍歷
對於元素的操作,基本體現在——增、刪、查。常用的方法有:
- public boolean add(E e) :將指定的元素新增到此集合的尾部。
- public E remove(int index) :移除此集合中指定位置上的元素。返回被刪除的元素。
- public E get(int index) :返回此集合中指定位置上的元素。返回獲取的元素。
- public int size() :返回此集合中的元素數。遍歷集合時,可以控制索引範圍,防止越界。
這些都是最基本的方法,操作非常簡單,程式碼如下:
public class Demo01ArrayListMethod { public static void main(String[] args) { //建立集合物件 ArrayList<String> list = new ArrayList<String>(); //新增元素 list.add("hello"); list.add("world"); list.add("java"); //public E get(int index):返回指定索引處的元素 System.out.println("get:"+list.get(0)); System.out.println("get:"+list.get(1)); System.out.println("get:"+list.get(2)); //public int size():返回集合中的元素的個數 System.out.println("size:"+list.size()); //public E remove(int index):刪除指定索引處的元素,返回被刪除的元素 System.out.println("remove:"+list.remove(0)); //遍歷輸出 for(int i = 0; i < list.size(); i++){ System.out.println(list.get(i)); } } }
4.5 如何儲存基本資料型別
ArrayList物件不能儲存基本型別,只能儲存引用型別的資料。類似 <int> 不能寫,但是儲存基本資料型別對應的包裝型別是可以的。所以,想要儲存基本型別資料, <> 中的資料型別,必須轉換後才能編寫,轉換寫法如下:
我們發現,只有 Integer 和 Character 需要特殊記憶,其他基本型別只是首字母大寫即可。那麼儲存基本型別數
據,程式碼如下:
public class Demo02ArrayListMethod { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); System.out.println(list); } }
4.6 ArrayList練習
數值新增到集合
生成6個1~33之間的隨機整數,新增到集合,並遍歷
public class Test01ArrayList { public static void main(String[] args) { // 建立Random 物件 Random random = new Random(); // 建立ArrayList 物件 ArrayList<Integer> list = new ArrayList<>(); // 新增隨機數到集合 for (int i = 0; i < 6; i++) { int r = random.nextInt(33) + 1; list.add(r); } // 遍歷集合輸出 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
物件新增到集合
自定義4個學生物件,新增到集合,並遍歷
public class Test02ArrayList { public static void main(String[] args) { //建立集合物件 ArrayList<Student> list = new ArrayList<Student>(); //建立學生物件 Student s1 = new Student("趙麗穎",18); Student s2 = new Student("唐嫣",20); Student s3 = new Student("景甜",25); Student s4 = new Student("柳巖",19); //把學生物件作為元素新增到集合中 list.add(s1); list.add(s2); list.add(s3); list.add(s4); //遍歷集合 for(int x = 0; x < list.size(); x++) { Student s = list.get(x); System.out.println(s.getName()+"‐‐‐"+s.getAge()); } } }
列印集合方法
定義以指定格式列印集合的方法(ArrayList型別作為引數),使用{}擴起集合,使用@分隔每個元素。格式參照 {元素@元素@元素}。
public class Test03ArrayList { public static void main(String[] args) { // 建立集合物件 ArrayList<String> list = new ArrayList<String>(); // 新增字串到集合中 list.add("張三丰"); list.add("宋遠橋"); list.add("張無忌"); list.add("殷梨亭"); // 呼叫方法 printArrayList(list); }
public static void printArrayList(ArrayList<String> list) { // 拼接左括號 System.out.print("{"); // 遍歷集合 for (int i = 0; i < list.size(); i++) { // 獲取元素 String s = list.get(i); // 拼接@符號 if (i != list.size() ‐ 1) { System.out.print(s + "@"); } else { // 拼接右括號 System.out.print(s + "}"); } } } }
注意事項:
對於ArrayList集合來說,直接列印得到的不是地址值,而是內容。
如果內容是空,得到的是空的中括號:[]
獲取集合方法
定義獲取所有偶數元素集合的方法(ArrayList型別作為返回值)
public class Test04ArrayList { public static void main(String[] args) { // 建立Random 物件 Random random = new Random(); // 建立ArrayList 物件 ArrayList<Integer> list = new ArrayList<>(); // 新增隨機數到集合 for (int i = 0; i < 20; i++) { int r = random.nextInt(1000) + 1; list.add(r); } / / 呼叫偶數集合的方法 ArrayList<Integer> arrayList = getArrayList(list); System.out.println(arrayList); }
public static ArrayList<Integer> getArrayList(ArrayList<Integer> list) { // 建立小集合,來儲存偶數 ArrayList<Integer> smallList = new ArrayList<>(); // 遍歷list for (int i = 0; i < list.size(); i++) { // 獲取元素 Integer num = list.get(i); // 判斷為偶數,新增到小集合中 if (num % 2 == 0){ smallList.add(num); } } / / 返回小集合 return smallList; }
}