2020-09-04(引用数据类型之数组的增删改查排)暂留Scanner多次调用关闭问题

       在写Tools工具类的时候,多次使用了Scanner sc = new Scanner(System.in);但是Scanner一旦关闭就不能再次启用,否则会报错,网上试了很多办法,多不能完成,可能时技术不行吧,暂留一个问题!

 

 

package com.wdd.week02.day05.text02;


/**
 * 
 * 引用数据类型-->数组-->增删改查
 * CRUD(create, read, update, delete
 * 以及排序
 * @author WDD
 *
 */

public class Main {
	
	
	public static void main(String[] args) {
		
		
		Student[] grade = new Student[10];
		
		grade[0] = new Student("张三", 18, '男', 85);
		grade[1] = new Student("李四", 19, '女', 95);
		grade[2] = new Student("王五", 18, '男', 58);
		grade[3] = new Student("赵六", 16, '男', 98);
		grade[4] = new Student("孙七", 13, '女', 97);
		
		//打印数组
		Tools.printArray(grade);
		System.out.println();
		
		//排序:把同学按成绩排序
		Tools.sortArray(grade);
		Tools.printArray(grade);
		System.out.println();
		
		//增加一个学生
		Tools.createArray(grade);
		Tools.printArray(grade);
		System.out.println();
		
		//删除一个学生
		Tools.deleteArray(grade);
		Tools.printArray(grade);
		System.out.println();
		
		//修改一个学生的信息
		Tools.updateArray(grade);
		Tools.printArray(grade);
		
		//查找一个学生的信息
		Tools.readArray(grade);
		
	}

}

 

package com.wdd.week02.day05.text02;

public class Student {
	private String name;//姓名
	private int age;//年龄
	private char sex;//性别
	private int score;//成绩
	
	
	public Student() {
		super();
	}
	
	public Student(String name, int age, char sex, int score) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.score = score;
	}
	
	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 char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", score=" + score + "]";
	}
	
	
	

}

 

package com.wdd.week02.day05.text02;

import java.util.Scanner;

public class Tools {
	
	//打印
	public static void printArray(Student[] grade) {
		for (int i = 0; i < grade.length; i++) {
			if (grade[i] == null) {
				break;
			} else {
				System.out.println(grade[i].toString());
			}
		}
	}
	
	//排序
	public static void sortArray(Student[] grade) {
		for (int i = 0; i < grade.length - 1; i++) {
			for (int j = 0; j < grade.length - 1 - i; j++) {
				if (grade[j+1] == null) {
					break;
				} else if (grade[j].getScore() < grade[j+1].getScore()) {
					Student temp = grade[j];
					grade[j] = grade[j+1];
					grade[j+1] = temp;
				}
			}
		}
	}
	
	//增加一个学生
	public static void createArray(Student[] grade) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入新增学生的name:");
		String name = sc.next();
		System.out.println("请输入新增学生的age:");
		int age = sc.nextInt();
		System.out.println("请输入新增学生的sex:");
		char sex = sc.next().charAt(0);
		System.out.println("请输入新增学生的score:");
		int score = sc.nextInt();
		
		//找出数组为null的那个位置的下标,并赋值
		for (int i = 0; i < grade.length; i++) {
			if (grade[i] == null) {
				grade[i] = new Student(); //类的实例数组,每一个都需要单独创建。切记!切记!
				grade[i].setName(name);   //当增加时就要想到这个
				grade[i].setAge(age);
				grade[i].setSex(sex);
				grade[i].setScore(score);
				break;
			}
		}
		
	}
	
	//删除一个学生
	public static void deleteArray(Student[] grade) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入想要删除的学生的姓名:");
		String name = sc.next();
		int k = 0;//记录要删除学生的下标
		for (int i = 0; i < grade.length; i++) {
			if (grade[i].getName().equals(name)) {    //String 类型的要用.equals去判断,不                    
                                                      // 能直接用==号!!!!
				k = i;								 //下次看到String 就要想到
				break;
			} else if (grade[i] == null) {
				break;
		}
		}
		int m = 0; //记录数组开始为空的位置
		for (int i = 0; i < grade.length; i++) {
			if (grade[i] == null) {
				m = i;
				break;
			}
		}
		
		for (int j = k; j < m; j++) {
			grade[j] = grade[j+1];
		}
	}
	
	//修改一个学生的信息
	public static void updateArray(Student[] grade) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要修改信息学生的姓名:");
		String name = sc.next();
		//判断时那一个学生需要修改信息
		for (int i = 0; i < grade.length; i++) {
			if(grade[i] == null) {
				break;
			} else if (grade[i].getName().equals(name)) {
				System.out.println("请输入修改后的名字:");
				grade[i].setName(sc.next());
				System.out.println("请输入修改后的年龄:");
				grade[i].setAge(sc.nextInt());
				System.out.println("请输入修改后的性别:");
				grade[i].setSex(sc.next().charAt(0));
				System.out.println("请输入修改后的成绩:");
				grade[i].setScore(sc.nextInt());
			}
		}
	}
	
	//查找一个学生的信息
	public static void readArray(Student[] grade) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要查找学生的姓名:");
		String name = sc.next();
		
		for (int i = 0; i < grade.length; i++) {
			if(grade[i] == null) {
				System.out.println("没有你要查找的学生信息。");
				break;
			} else if (grade[i].getName().equals(name)) {
				System.out.println(grade[i].toString());
				break;
			} 
		}
	}
	
}
执行结果:

Student [name=张三, age=18, sex=男, score=85]
Student [name=李四, age=19, sex=女, score=95]
Student [name=王五, age=18, sex=男, score=58]
Student [name=赵六, age=16, sex=男, score=98]
Student [name=孙七, age=13, sex=女, score=97]

Student [name=赵六, age=16, sex=男, score=98]
Student [name=孙七, age=13, sex=女, score=97]
Student [name=李四, age=19, sex=女, score=95]
Student [name=张三, age=18, sex=男, score=85]
Student [name=王五, age=18, sex=男, score=58]

请输入新增学生的name:
孙三
请输入新增学生的age:
28
请输入新增学生的sex:
男
请输入新增学生的score:
55
Student [name=赵六, age=16, sex=男, score=98]
Student [name=孙七, age=13, sex=女, score=97]
Student [name=李四, age=19, sex=女, score=95]
Student [name=张三, age=18, sex=男, score=85]
Student [name=王五, age=18, sex=男, score=58]
Student [name=孙三, age=28, sex=男, score=55]

请输入想要删除的学生的姓名:
孙七
Student [name=赵六, age=16, sex=男, score=98]
Student [name=李四, age=19, sex=女, score=95]
Student [name=张三, age=18, sex=男, score=85]
Student [name=王五, age=18, sex=男, score=58]
Student [name=孙三, age=28, sex=男, score=55]

请输入要修改信息学生的姓名:
孙三
请输入修改后的名字:
孙大
请输入修改后的年龄:
11
请输入修改后的性别:
女
请输入修改后的成绩:
44
Student [name=赵六, age=16, sex=男, score=98]
Student [name=李四, age=19, sex=女, score=95]
Student [name=张三, age=18, sex=男, score=85]
Student [name=王五, age=18, sex=男, score=58]
Student [name=孙大, age=11, sex=女, score=44]
请输入要查找学生的姓名:
孙大
Student [name=孙大, age=11, sex=女, score=44]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值