更新時(shí)間:2020-08-14 來(lái)源:黑馬程序員 瀏覽量:
大伙兒快來(lái)看這個(gè)學(xué)生管理系統(tǒng)啊,竟然還在使用數(shù)組來(lái)存儲(chǔ)學(xué)生信息數(shù)據(jù),太low了吧。增加學(xué)生數(shù)量還要不停地新建數(shù)組,看來(lái)一定是不知道數(shù)組的長(zhǎng)度是不可以改變的,是不是應(yīng)該吐槽一下,來(lái)我們一起喊,小菜雞~。我們自己來(lái)實(shí)現(xiàn)一個(gè)比較牛學(xué)生管理系統(tǒng)。
來(lái)我們來(lái)普及一下數(shù)組的最基本概念,數(shù)組是可以用來(lái)存儲(chǔ)相同數(shù)據(jù)類型的數(shù)據(jù)的一種容器,數(shù)組一經(jīng)創(chuàng)建長(zhǎng)度是固定的。如果需要改變長(zhǎng)度,需要重新創(chuàng)建,不適合在對(duì)象數(shù)量未知的情況下使用的。
那么我們應(yīng)該使用什么容器可以在未知數(shù)量情況下使用呢?那是不是有一種存儲(chǔ)空間可變的存儲(chǔ)模型,存儲(chǔ)的數(shù)據(jù)容量可以發(fā)生改變的容器?一定有的啊,它就是ArrayList集合,長(zhǎng)度可以發(fā)生改變,可以在未知數(shù)量的情況下使用,這樣的容器它不香嗎?嗯,香~,那我們一起學(xué)習(xí)一下它的使用吧。
3.1 構(gòu)造方法
方法名 | 說(shuō)明 |
public ArrayList() | 創(chuàng)建一個(gè)空的集合對(duì)象 |
代碼演示:
public class TestArrayList{ public static void main(String[] args){ // 創(chuàng)建一個(gè)集合對(duì)象 ArrayList<String> list = new ArryaList<String>(); /* 泛型的使用:<String> 用來(lái)約束集合中存儲(chǔ)的數(shù)據(jù)類型 比如:int[] arr = new int[5]; int類型的數(shù)組,可以想到存儲(chǔ)的是int類型的數(shù)據(jù) ArrayList<String> list; <String>可以想到存儲(chǔ)的是String類型的數(shù)據(jù) jdk1.7之后new ArryaList<String>();后面的這個(gè)尖括號(hào)中的String可以不寫 */ } }
3.2 成員方法
方法名 | 說(shuō)明 |
public boolean remove(Object o) | 刪除指定的元素,返回刪除是否成功 |
public E remove(int index) | 刪除指定索引處的元素,返回被刪除的元素 |
public E set(int index,E element) | 修改指定索引處的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引處的元素 |
public int size() | 返回集合中的元素的個(gè)數(shù) |
public boolean add(E e) | 將指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
代碼演示:
public class TestArrayList{ public static void main(String[] args) { // 創(chuàng)建集合 ArrayList<String> array = new ArrayList<String>(); // 添加元素 array.add("hello"); array.add("world"); array.add("java"); // public boolean remove(Object o):刪除指定的元素,返回刪除是否成功 System.out.println(array.remove("world")); System.out.println(array.remove("javaee")); // public E remove(int index):刪除指定索引處的元素,返回被刪除的元素 System.out.println(array.remove(1)); // 發(fā)生索引越界異常 IndexOutOfBoundsException System.out.println(array.remove(3)); // public E set(int index,E element):修改指定索引處的元素,返回被修改的元素 System.out.println(array.set(1,"javaee")); // 發(fā)生索引越界異常 IndexOutOfBoundsException System.out.println(array.set(3,"javaee")); // public E get(int index):返回指定索引處的元素 System.out.println(array.get(0)); System.out.println(array.get(1)); System.out.println(array.get(2)); // public int size():返回集合中的元素的個(gè)數(shù) System.out.println(array.size()); // 輸出集合 System.out.println("array:" + array); } }
注意:集合是不可以存儲(chǔ)基本數(shù)據(jù)類型的數(shù)據(jù),只能存儲(chǔ)引用數(shù)據(jù)類型的數(shù)據(jù)。
4.1 演示案例需求
創(chuàng)建一個(gè)存儲(chǔ)字符串的集合,存儲(chǔ)3個(gè)字符串元素,使用程序?qū)崿F(xiàn)在控制臺(tái)遍歷該集合。
代碼演示:
/* 思路: 1:創(chuàng)建集合對(duì)象 2:往集合中添加字符串對(duì)象 3:遍歷集合,首先要能夠獲取到集合中的每一個(gè)元素,這個(gè)通過(guò)get(int index)方法實(shí)現(xiàn) 4:遍歷集合,其次要能夠獲取到集合的長(zhǎng)度,這個(gè)通過(guò)size()方法實(shí)現(xiàn) 5:遍歷集合的通用格式 */ public class TestArrayList{ public static void main(String[] args) { //創(chuàng)建集合對(duì)象 ArrayList<String> array = new ArrayList<String>(); //往集合中添加字符串對(duì)象 array.add("林青霞"); array.add("朱茵"); array.add("王祖賢"); //遍歷集合,其次要能夠獲取到集合的長(zhǎng)度,這個(gè)通過(guò)size()方法實(shí)現(xiàn) // System.out.println(array.size()); //遍歷集合的通用格式 for(int i=0; i<array.size(); i++) { String s = array.get(i); System.out.println(s); } } }
5.1 演示案例需求
創(chuàng)建一個(gè)存儲(chǔ)學(xué)生對(duì)象的集合,存儲(chǔ)3個(gè)學(xué)生對(duì)象,使用程序?qū)崿F(xiàn)在控制臺(tái)遍歷該集合。
代碼演示:
/* 思路: 1:定義學(xué)生類 2:創(chuàng)建集合對(duì)象 3:創(chuàng)建學(xué)生對(duì)象 4:添加學(xué)生對(duì)象到集合中 5:遍歷集合,采用通用遍歷格式實(shí)現(xiàn) */ public class TestArrayList { public static void main(String[] args) { //創(chuàng)建集合對(duì)象 ArrayList<Student> array = new ArrayList<>(); //創(chuàng)建學(xué)生對(duì)象 Student s1 = new Student("林青霞", 30); Student s2 = new Student("朱茵", 33); Student s3 = new Student("張曼玉", 18); //添加學(xué)生對(duì)象到集合中 array.add(s1); array.add(s2); array.add(s3); //遍歷集合,采用通用遍歷格式實(shí)現(xiàn) for (int i = 0; i < array.size(); i++) { Student s = array.get(i); System.out.println(s.getName() + "," + s.getAge()); } } } //定義學(xué)生類 public class Student{ // 私有化屬性 private String name; private int age; // 提供構(gòu)造方法 public Student(){ } public Student(String name,int age){ this.name = name; this.age = age; } // 提供get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
我們?cè)谧詈笠粋€(gè)案例中,用來(lái)存儲(chǔ)對(duì)象信息,是不是完全OK,效果顯而易見(jiàn)。如果再繼續(xù)增加學(xué)員信息個(gè)數(shù),是不是可以隨便增加。那我們?cè)趩为?dú)編寫學(xué)員管理系統(tǒng),可以直接使用ArrayList集合來(lái)代替數(shù)組的使用,是不是很方便我們。來(lái)我們演示一下:
7.1 演示步驟:
案例需求
針對(duì)目前我們的所學(xué)內(nèi)容,完成一個(gè)綜合案例:學(xué)生管理系統(tǒng)!該系統(tǒng)主要功能如下:
添加學(xué)生:通過(guò)鍵盤錄入學(xué)生信息,添加到集合中
刪除學(xué)生:通過(guò)鍵盤錄入要?jiǎng)h除學(xué)生的學(xué)號(hào),將該學(xué)生對(duì)象從集合中刪除
修改學(xué)生:通過(guò)鍵盤錄入要修改學(xué)生的學(xué)號(hào),將該學(xué)生對(duì)象其他信息進(jìn)行修改
查看學(xué)生:將集合中的學(xué)生對(duì)象信息進(jìn)行展示
退出系統(tǒng):結(jié)束程序
實(shí)現(xiàn)步驟:
1. 定義學(xué)生類,包含以下成員變量
private String sid // 學(xué)生id
private String name // 學(xué)生姓名
private String age // 學(xué)生年齡
private String address // 學(xué)生所在地
2. 學(xué)生管理系統(tǒng)主界面的搭建步驟
2.1 用輸出語(yǔ)句完成主界面的編寫
2.2 用Scanner實(shí)現(xiàn)鍵盤輸入
2.3 用switch語(yǔ)句完成選擇的功能
2.4 用循環(huán)完成功能結(jié)束后再次回到主界面
3. 學(xué)生管理系統(tǒng)的添加學(xué)生功能實(shí)現(xiàn)步驟
3.1 定義一個(gè)方法,接收ArrayList集合
3.2 方法內(nèi)完成添加學(xué)生的功能
①鍵盤錄入學(xué)生信息
②根據(jù)錄入的信息創(chuàng)建學(xué)生對(duì)象
③將學(xué)生對(duì)象添加到集合中
④提示添加成功信息
3.3 在添加學(xué)生的選項(xiàng)里調(diào)用添加學(xué)生的方法
4. 學(xué)生管理系統(tǒng)的查看學(xué)生功能實(shí)現(xiàn)步驟
4.1 定義一個(gè)方法,接收ArrayList集合
4.2 方法內(nèi)遍歷集合,將學(xué)生信息進(jìn)行輸出
4.3 在查看所有學(xué)生選項(xiàng)里調(diào)用查看學(xué)生方法
5. 學(xué)生管理系統(tǒng)的刪除學(xué)生功能實(shí)現(xiàn)步驟
5.1 定義一個(gè)方法,接收ArrayList集合
5.2 方法中接收要?jiǎng)h除學(xué)生的學(xué)號(hào)
5.3 遍歷集合,獲取每個(gè)學(xué)生對(duì)象
5.4 使用學(xué)生對(duì)象的學(xué)號(hào)和錄入的要?jiǎng)h除的學(xué)號(hào)進(jìn)行比較,如果相同,則將當(dāng)前學(xué)生對(duì)象從集合中刪除
5.5 在刪除學(xué)生選項(xiàng)里調(diào)用刪除學(xué)生的方法
6. 學(xué)生管理系統(tǒng)的修改學(xué)生功能實(shí)現(xiàn)步驟
6.1 定義一個(gè)方法,接收ArrayList集合
6.2 方法中接收要修改學(xué)生的學(xué)號(hào)
6.3 通過(guò)鍵盤錄入學(xué)生對(duì)象所需的信息,并創(chuàng)建對(duì)象
6.4 遍歷集合,獲取每一個(gè)學(xué)生對(duì)象。并和錄入的修改學(xué)生學(xué)號(hào)進(jìn)行比較.如果相同,則使用新學(xué)生對(duì)象替換當(dāng)前學(xué)生對(duì)象:
6.5 在修改學(xué)生選項(xiàng)里調(diào)用修改學(xué)生的方法
7. 退出系統(tǒng)
使用外層循環(huán)添加標(biāo)記,終止系統(tǒng)。
7.2 實(shí)現(xiàn)代碼:
// 定義學(xué)生類 public class Student { //學(xué)號(hào) private String sid; //姓名 private String name; //年齡 private String age; //居住地 private String address; public Student() { } public Student(String sid, String name, String age, String address) { this.sid = sid; this.name = name; this.age = age; this.address = address; } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } // 案例實(shí)現(xiàn) public class StudentManager { /* 1:用輸出語(yǔ)句完成主界面的編寫 2:用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù) 3:用switch語(yǔ)句完成操作的選擇 4:用循環(huán)完成再次回到主界面 */ public static void main(String[] args) { //創(chuàng)建集合對(duì)象,用于保存學(xué)生數(shù)據(jù)信息 ArrayList<Student> array = new ArrayList<Student>(); //用循環(huán)完成再次回到主界面 wc:while (true) { //用輸出語(yǔ)句完成主界面的編寫 System.out.println("--------歡迎來(lái)到學(xué)生管理系統(tǒng)--------"); System.out.println("1 添加學(xué)生"); System.out.println("2 刪除學(xué)生"); System.out.println("3 修改學(xué)生"); System.out.println("4 查看所有學(xué)生"); System.out.println("5 退出"); System.out.println("請(qǐng)輸入你的選擇:"); //用Scanner實(shí)現(xiàn)鍵盤錄入數(shù)據(jù) Scanner sc = new Scanner(System.in); String line = sc.nextLine(); //用switch語(yǔ)句完成操作的選擇 switch (line) { case "1": addStudent(array); break; case "2": deleteStudent(array); break; case "3": updateStudent(array); break; case "4": findAllStudent(array); break; case "5": System.out.println("謝謝使用"); break wc: // 根據(jù)標(biāo)記終止系統(tǒng) } } } //定義一個(gè)方法,用于添加學(xué)生信息 public static void addStudent(ArrayList<Student> array) { //鍵盤錄入學(xué)生對(duì)象所需要的數(shù)據(jù),顯示提示信息,提示要輸入何種信息 Scanner sc = new Scanner(System.in); String sid; while (true) { System.out.println("請(qǐng)輸入學(xué)生學(xué)號(hào):"); sid = sc.nextLine(); boolean flag = isUsed(array, sid); if (flag) { System.out.println("你輸入的學(xué)號(hào)已經(jīng)被占用,請(qǐng)重新輸入"); } else { break; } } System.out.println("請(qǐng)輸入學(xué)生姓名:"); String name = sc.nextLine(); System.out.println("請(qǐng)輸入學(xué)生年齡:"); String age = sc.nextLine(); System.out.println("請(qǐng)輸入學(xué)生居住地:"); String address = sc.nextLine(); //創(chuàng)建學(xué)生對(duì)象,把鍵盤錄入的數(shù)據(jù)賦值給學(xué)生對(duì)象的成員變量 Student s = new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); //將學(xué)生對(duì)象添加到集合中 array.add(s); //給出添加成功提示 System.out.println("添加學(xué)生成功"); } //定義一個(gè)方法,判斷學(xué)號(hào)是否被使用 public static boolean isUsed(ArrayList<Student> array, String sid) { //如果與集合中的某一個(gè)學(xué)生學(xué)號(hào)相同,返回true;如果都不相同,返回false boolean flag = false; for(int i=0; i<array.size(); i++) { Student s = array.get(i); if(s.getSid().equals(sid)) { flag = true; break; } } return flag; } //定義一個(gè)方法,用于查看學(xué)生信息 public static void findAllStudent(ArrayList<Student> array) { //判斷集合中是否有數(shù)據(jù),如果沒(méi)有顯示提示信息 if (array.size() == 0) { System.out.println("無(wú)信息,請(qǐng)先添加信息再查詢"); //為了讓程序不再往下執(zhí)行,我們?cè)谶@里寫上return; return; } //顯示表頭信息 //\t其實(shí)是一個(gè)tab鍵的位置 System.out.println("學(xué)號(hào)\t\t\t姓名\t\t年齡\t\t居住地"); //將集合中數(shù)據(jù)取出按照對(duì)應(yīng)格式顯示學(xué)生信息,年齡顯示補(bǔ)充“歲” for (int i = 0; i < array.size(); i++) { Student s = array.get(i); System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "歲\t\t" + s.getAddress()); } } //定義一個(gè)方法,用于刪除學(xué)生信息 public static void deleteStudent(ArrayList<Student> array) { //鍵盤錄入要?jiǎng)h除的學(xué)生學(xué)號(hào),顯示提示信息 Scanner sc = new Scanner(System.in); System.out.println("請(qǐng)輸入你要?jiǎng)h除的學(xué)生的學(xué)號(hào):"); String sid = sc.nextLine(); //在刪除/修改學(xué)生操作前,對(duì)學(xué)號(hào)是否存在進(jìn)行判斷 //如果不存在,顯示提示信息 //如果存在,執(zhí)行刪除/修改操作 int index = -1; for (int i = 0; i < array.size(); i++) { Student s = array.get(i); if (s.getSid().equals(sid)) { index = i; break; } } if (index == -1) { System.out.println("該信息不存在,請(qǐng)重新輸入"); } else { array.remove(index); //給出刪除成功提示 System.out.println("刪除學(xué)生成功"); } } //定義一個(gè)方法,用于修改學(xué)生信息 public static void updateStudent(ArrayList<Student> array) { //修改之前判斷學(xué)號(hào)是否存在 Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入要修改的學(xué)號(hào):"); String sid = scanner.nextLine(); //先判斷是否存在 boolean flag = isUsed(array, sid); if(flag){ System.out.println("你輸入的學(xué)號(hào)不存在,請(qǐng)確認(rèn)后修改!"); return; }else { System.out.println("請(qǐng)輸入姓名:"); String name = scanner.nextLine(); System.out.println("請(qǐng)輸入年齡:"); String age = scanner.nextLine(); System.out.println("請(qǐng)輸入居住地:"); String address = scanner.nextLine(); //創(chuàng)建對(duì)象 Student student = new Student(sid,name,age,address); //得到索引然后修改 for (int i = 0; i < array.size(); i++) { Student s = array.get(i); if (s.getSid().equals(sid)) { array.set(i,student); } } } System.out.println("修改成功!"); }
好了,我們自己的學(xué)生管理系統(tǒng)實(shí)現(xiàn)了,是不是比使用數(shù)組來(lái)實(shí)現(xiàn)的效果好多了,更加的優(yōu)雅啊。大家要自己學(xué)會(huì)使用這么好用的ArrayList集合哦。
猜你喜歡: