Java笔记_07(ArrayList、学生管理系统)
一、ArrayList
1.1、集合的基本使用
集合与数组的对比
- 长度
- 数组的长度固定不变
- 集合的长度是可变的
- 存储类型
- 数组可以存储基本数据类型和引用数据类型
- 集合只可以存引用数据类型,需要存基本数据只能先转为对应的包装类
ArrayList
成员方法
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
1.2、集合练习-添加字符串和整数并遍历
集合的遍历方式
- 需求:定义一个集合,添加字符串,并进行遍历
- 遍历格式参考:[元素1,元素2,元素3]
package itheimaTest;
import java.util.ArrayList;
public class ArrayListTest1 {
public static void main(String[] args) {
//1.创建集合
ArrayList<String> list = new ArrayList<>();
//2.添加元素
list.add("111");
list.add("222");
list.add("333");
list.add("444");
//3.遍历数组
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if(i == list.size() - 1){
System.out.print(list.get(i));
}else{
System.out.print(list.get(i) + ", ");
}
}
System.out.println("]");
}
}
基本数据类型对应的包装类
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
添加元素并遍历
- 需求:定义一个集合,添加数字,并进行遍历
- 遍历格式参照:[元素1,元素2,元素3]
package itheimaTest;
import java.util.ArrayList;
public class ArrayListTest1 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Integer> list = new ArrayList<>();
//2.添加元素
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//3.遍历数组
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if(i == list.size() - 1){
System.out.print(list.get(i));
}else{
System.out.print(list.get(i) + ", ");
}
}
System.out.println("]");
}
}
1.3、集合练习-添加学生对象并遍历
练习一
- 需求:定义一个集合,添加一些学生对象,并进行遍历
- 学生类的属性为:姓名,年龄
package itheimaTest;
import java.util.ArrayList;
public class ArrayTeat2 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> list = new ArrayList<>();
//创建学生对象
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
Student s3 = new Student("wangwu",20);
//添加元素
list.add(s1);
list.add(s2);
list.add(s3);
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
练习二
在练习一的基础上多一个要求:对象的数据来自键盘录入
package itheimaTest;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayTeat2 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> list = new ArrayList<>();
//键盘录入数据并添加到数组当中去
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//创建一个学生对象
Student s = new Student();
System.out.println("请输入学生的姓名");
String name = sc.next();
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
//将键盘录入的name和age赋值给学生对象
s.setName(name);
s.setAge(age);
//将创建好的学生对象添加到集合当中
list.add(s);
}
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
1.4、集合练习-查找用户是否存在
添加用户对象并判断是否存在
- 需求
- main方法中定义一个集合,存入三个用户信息
- 用户属性:id,username,password
- 要求
- 定义一个方法,根据id查找对应的用户信息
- 如果存在,返回true
- 如果不存在,返回false
package itheimaTest;
import java.util.ArrayList;
public class UserTest {
public static void main(String[] args) {
//创建集合
ArrayList<User> list = new ArrayList<>();
//创建三个用户对象
User u1 = new User("001","zhangsan","123456");
User u2 = new User("002","lisi","12345678");
User u3 = new User("003","wangwu","123456789");
//把用户对象添加到集合当中
list.add(u1);
list.add(u2);
list.add(u3);
//调用方法看id是否存在
boolean flag = checkId(list, "004");
//打印结果
System.out.println(flag);
}
//定义一个方法用来根据id查找对应的用户信息
public static boolean checkId (ArrayList<User> list , String id){
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
if (u.getId().equals(id)){
return true;
}
}
return false;
}
}
1.5、集合练习-返回多个数据
添加手机对象并返回要求的数据
需求:
- 定义一个Javabean类:Phone
- Phone属性:品牌,价格
- main方法中定义一个集合,存入三个手机对象
- 分别为:小米,1000。苹果,8000。锤子,2999。
- 定义一个方法,将价格低于3000的手机信息返回
package itheimaTest;
import java.util.ArrayList;
public class PhoneTest {
public static void main(String[] args) {
//创建一个集合
ArrayList<Phone> list = new ArrayList<>();
//创建三个手机对象
Phone p1 = new Phone("小米", 2000);
Phone p2 = new Phone("苹果", 8000);
Phone p3 = new Phone("锤子", 2999);
//添加数据
list.add(p1);
list.add(p2);
list.add(p3);
//调用方法
ArrayList<Phone> phoneInfo = getPhoneInfo(list);
//打印结果
for (int i = 0; i < phoneInfo.size(); i++) {
Phone phone = phoneInfo.get(i);
System.out.println(phone.getBrand() + ", " + phone.getPrice());
}
}
//定义一个方法,将手机价格低于3000的返回
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
//定义一个集合用来存储价格低于3000的手机对象
ArrayList<Phone> resultList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
if(p.getPrice() < 3000){
resultList.add(p);
}
}
return resultList;
}
}
二、学生管理系统
2.1、业务分析并搭建主菜单
student类
package itheimaTest;
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
代码
package itheimaTest;
import java.util.Scanner;
public class StudentSystem {
public static void main(String[] args) {
loop: while (true) {
//打印系统主页面
System.out.println("-------欢迎来到黑马管理系统------");
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.println("请输入你的选择:");
//键盘录入用户输入的数字
Scanner sc = new Scanner(System.in);
String choose = sc.next();
;
//根据用户的输入选择合适的功能
switch (choose){
case "1" : {
addStudent();
break;
}
case "2" : {
deleteStudent();
break;
}
case "3" : {
modifyStudent();
break;
}
case "4" : {
queryStudent();
break;
}
case "5" : {
System.out.println("退出");
break loop;
//System.exit(0);//停止虚拟机运行
}
default : {
System.out.println("没有这个选项");
break;
}
}
}
}
//添加学生
public static void addStudent(){
System.out.println("添加学生");
}
//删除学生
public static void deleteStudent(){
System.out.println("删除学生");
}
//修改学生
public static void modifyStudent(){
System.out.println("修改学生");
}
//查询学生
public static void queryStudent(){
System.out.println("查询学生");
}
}
2.2、查询并添加
查询
public static void queryStudent(ArrayList<Student> list){
System.out.println("查询学生");
if (list.size() == 0){
System.out.println("当前无学生信息,请添加后再查询");
return;
}
//遍历集合
System.out.println("id\t\t姓名\t年龄\t家庭住址\t");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getId() + "\t" +stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
添加
//添加学生
public static void addStudent(ArrayList<Student> list){
//利用空参构造添加学生对象
Student s = new Student();
//键盘录入学生对象
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入学生id");
String id = sc.next();
boolean flag = checkId(list, id);
if (flag){
System.out.println("该id已经存在,请重新输入id");
}else {
s.setId(id);
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.next();
s.setName(name);
System.out.println("请输入学生年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输入学生家庭住址");
String address = sc.next();
s.setAddress(address);
//将学生对象添加到数组当中
list.add(s);
//提醒用户数据添加成功
System.out.println("学生信息添加成功");
}
//创建一个方法来查询id是否已经存在
public static boolean checkId(ArrayList<Student> list,String id){
//遍历数组
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if (sid.equals(id)){
//存在,返回true
return true;
}
}
//不存在,返回false
return false;
}
2.3、删除和修改
删除代码
public static void deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除学生的id");
String id = sc.next();
int index = toIndex(list, id);
if (index < 0){
System.out.println("该id不存在");
}else {
list.remove(index);
System.out.println("id为:" + id + "的学生删除成功");
}
}
//定义一个方法来返回索引
public static int toIndex(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if (sid.equals(id)){
return i;
}
}
return -1;
}
修改学生
//修改学生
public static void modifyStudent(ArrayList<Student> list){
//键盘录入要修改学生的id
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的id");
String id = sc.next();
//调用方法
int index = toIndex(list, id);
if (index == -1){
System.out.println("输入的id为:" + id + "的学生不存在") ;
return;
}
//修改学生信息
Student stu = list.get(index);
System.out.println("请输入要修改后的学生姓名");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入修改后的学生年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入修改后的学生家庭住址");
String newAddress = sc.next();
stu.setAddress(newAddress);
//打印结果
System.out.println("学生信息修改成功");
}