4-4通过ID查询,输入主学生列表报错

4-4通过ID查询,输入主学生列表报错

package com.imooc.schoolmanager;


import java.util.ArrayList;

import java.util.List;


public class Banji {

// Student student;

private String classId;// 班级编号

private String className;// 班级名称

private List<Student> stuList;// 学生的集合


//班级无参构造方法

public Banji() {

}

// 构造函数

public Banji(String className) {

super();

this.className = className;

stuList = new ArrayList<Student>();

}


/**

* 添加学生至班级中

* @param student

*/

public void addStudentList(Student stu) {

// 要排除重复添加的情况

boolean flag = false;// 判断班级中是否已经存在

for (Student student1 : stuList) {

if (student1.equals(stu)) {

flag = true;

break;

}

}

if (flag) {

System.out.println("该同学已经添加,请勿重复添加!");

} else {

stuList.add(stu);

}

}


/**

* 通过学号查询学生信息

*/


public Student searchStudentByNum(String stuNum) {

Student student = null;

// 学号是唯一的

for (Student stu1 : stuList) {

if (stu1.getStuNum().equals(stuNum)) {

student = stu1;

break;// 找到后跳出循环

}

}

return student;


}


/**

* 插入学生语文成绩

* @param stuNum 学号

* @param score  语文成绩

*/

public void insertChineseScore(String stuNum, float score) {

Student student = searchStudentByNum(stuNum);

if (student == null) {

System.out.println("没有找到学号为" + stuNum + "对应的学生");

} else {


student.setChinese(score);

System.out.println("语文成绩修改成功!");

}

}


/**

* 插入学生数学成绩

* @param stuNum 学号

* @param score  数学成绩

*/

public void insertMathScore(String stuNum, float score) {

Student student = searchStudentByNum(stuNum);

if (student == null) {

System.out.println("没有找到学号为" + stuNum + "对应的学生");

} else {


student.setMath(score);

System.out.println("数学成绩修改成功!");

}

}


/**

* 根据学号删除学生信息

* @param stuNum 学生学号

*/


public void deleteStudent(String stuNum) {

Student student = searchStudentByNum(stuNum);

if (student != null) {

stuList.remove(student);

} else {

System.out.println("没有找到学号为" + stuNum + "对应的学生");

}


}



/**

* 显示所有的学生信息

*/


public void dispalyAllStudent() {

System.out.println(this.getClassName() + "所有的学生为:");

for (Student student : stuList) {

System.out.println(student);

}

}


// 属性的get、set方法

public String getClassId() {

return classId;

}


public void setClassId(String classId) {

this.classId = classId;

}


public String getClassName() {

return className;

}


public void setClassName(String className) {

this.className = className;

}


public List<Student> getStuList() {

return stuList;

}


public void setStuList(List<Student> stuList) {

this.stuList = stuList;

}


}

package com.imooc.schoolmanager;


import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;


public class School{

Map<String,Banji> banjiMap;//存放班级的集合


/**

* 无参构造方法

*/

public School() {

banjiMap=new HashMap<String,Banji>();

}

/**

* 向学校中添加班级

* @param banji 班级

*/

public void addBanji(Banji banji) {

//班级名称作为key值

banjiMap.put(banji.getClassName(), banji);

}

/**

* 把学校中的班级删除

* @param banji

*/

public void deleteBanji(Banji banji) {

banjiMap.remove(banji.getClassName());

System.out.println(banji.getClassName()+"删除成功");

}

/**

  * 通过班级名称查询班级信息

  * @param className 班级名称

  * @return 班级信息

  */

public Banji searchByName(String className) {

Banji banji=null;

Set<String> banjiSet=banjiMap.keySet();

for(String s:banjiSet) {

if(s.equals(className)) {

banji=banjiMap.get(s);break;

}

}

return banji;

}

/**

* 对各班语文成绩按平均分由大到小排序

*/

public void sortChineseByAverage() {

Map<String,Float> scoreMap=new HashMap<>();

Set<String> scoreList=banjiMap.keySet();//获取班级名称列表

Banji banji=null;

/*

*/

for(String s:scoreList) {

banji=this.searchByName(s);

if(banji==null) {

System.out.println("未找到班级");break;

}else {

float sum=0.0f;

int i=0;

List<Student> listStudent=banji.getStuList();//获取每个班级的学生列表

//用迭代器遍历学生集合:

Iterator<Student> it=listStudent.iterator();

if(it.hasNext()) {

i++;

sum+=it.next().getChinese();

}

float ave=sum/i;

scoreMap.put(s, ave);//以班级名为key,平均分为value,存入map集合

}

}

//将scoreMap中的每个键值对存入List集合

List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());

Collections.sort(lm,new Comparator<Map.Entry<String,Float>>(){


@Override

public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {

return o2.getValue().compareTo(o1.getValue());

}

});

for(Map.Entry<String, Float> mes:lm) {

System.out.println("排序后的数据为");

System.out.println(mes.getKey()+"的语文平均分为"+mes.getValue());

}

}

/**

* 对各班的数学成绩由大到小排列

*/

public void sortMathAverge() {

Map<String,Float> scoreMap=new HashMap<>();

Set<String> scoreList=banjiMap.keySet();//获取班级名称列表

Banji banji=null;

/*

*/

for(String s:scoreList) {

banji=this.searchByName(s);

if(banji==null) {

System.out.println("未找到班级");break;

}else {

float sum=0.0f;

int i=0;

List<Student> listStudent=banji.getStuList();//获取每个班级的学生列表

//用迭代器遍历学生集合:

Iterator<Student> it=listStudent.iterator();

if(it.hasNext()) {

i++;

sum+=it.next().getMath();

}

float ave=sum/i;

scoreMap.put(s, ave);//以班级名为key,平均分为value,存入map集合

}

}

//将scoreMap中的每个键值对存入List集合

List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());

Collections.sort(lm,new Comparator<Map.Entry<String,Float>>(){


@Override

public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {

return o2.getValue().compareTo(o1.getValue());

}

});

for(Map.Entry<String, Float> mes:lm) {

System.out.println("排序后的数据为");

System.out.println(mes.getKey()+"的语文平均分为"+mes.getValue());

}

}

/**

* 显示所有班级的名称

*/

public void displayBanjiName() {

Set<String> banjiSet=banjiMap.keySet();

System.out.println("班级的名称为");

for(String s:banjiSet) {

System.out.println(s);

}

}


//get、set、方法

public Map<String, Banji> getSchoolMap() {

return banjiMap;

}


public void setSchoolMap(Map<String, Banji> schoolMap) {

this.banjiMap = schoolMap;

}


}

package com.imooc.schoolmanager;


public class Student {


private String stuNum;// 学号

private String stuName;// 学生姓名

private float math;// 数学成绩

private float chinese;// 语文成绩


// 无参构造方法

public Student() {

}


/**

* 构造带参数方法

* @param stuNum  学号

* @param stuName 学生姓名

*/

public Student(String stuNum, String stuName) {

super();

this.stuNum = stuNum;

this.stuName = stuName;

}

/**

* 构造带参数方法

* @param stuNum  学号

* @param stuName 学生姓名

* @param math    数学成绩

* @param chinese 语文成绩

*/

public Student(String stuNum, String stuName, float math, float chinese) {

super();

this.stuNum = stuNum;

this.stuName = stuName;

this.math = math;

this.chinese = chinese;

}


// 参数属性的get、set方法

public String getStuNum() {

return stuNum;

}


public void setStuNum(String stuNum) {

this.stuNum = stuNum;

}


public String getStuName() {

return stuName;

}


public void setStuName(String stuName) {

this.stuName = stuName;

}


public float getMath() {

return math;

}


public void setMath(float math) {

this.math = math;

}


public float getChinese() {

return chinese;

}


public void setChinese(float chinese) {

this.chinese = chinese;

}


@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + Float.floatToIntBits(chinese);

result = prime * result + Float.floatToIntBits(math);

result = prime * result + ((stuName == null) ? 0 : stuName.hashCode());

result = prime * result + ((stuNum == null) ? 0 : stuNum.hashCode());

return result;

}


@Override

public boolean equals(Object obj) {

// 判断对象是否相等,相等则直接返回true

if (this == obj) {

return true;

}

// 对象不相等,判断属性是否相等,相等则直接返回true,否则返回false

if (obj.getClass() == Student.class) {

Student student = (Student) obj;

return (student.getChinese() == chinese && student.getMath() == math && student.getStuName().equals(stuName)

&& student.getStuNum().equals(stuNum));

}

return false;

}


@Override

public String toString() {

return "学生信息: [学号:" + stuNum + ", 姓名:" + stuName + ",数学成绩" + math + ", 语文成绩" + chinese + "]";

}


}

package com.imooc.schoolmanager;


import java.util.Scanner;


public class TestDemo {


/**

* 学生类测试方法

*/

public void testStudent() {

// 定义学生对象

Student stu1 = new Student("001", "张三", 45, 56);

Student stu2 = new Student("002", "李四", 67, 59);

Student stu3 = new Student("003", "王五", 45, 56);

Student stu4 = new Student("003", "王五", 45, 56);

// 输出学生信息

System.out.println(stu1);

System.out.println(stu2);

System.out.println(stu3);

System.out.println(stu4);

// 判断对象是否相等

System.out.println("stu1==stu2?" + stu1.equals(stu2));

System.out.println("stu3==stu4?" + stu3.equals(stu4));

System.out.println(stu3 == stu4);


}


/**

* 班级类的测试方法

*/

public void testBanji() {

// 定义学生对象

Student stu1 = new Student("001", "张三");

Student stu2 = new Student("002", "李四");

Student stu3 = new Student("003", "王五", 45, 56);

Student stu4 = new Student("003", "王五", 45, 56);

// 创建一个班级

Banji bj = new Banji("一年级");

bj.addStudentList(stu1);

bj.addStudentList(stu2);

bj.addStudentList(stu3);

bj.addStudentList(stu4);

bj.dispalyAllStudent();

System.out.println("*************************");

// 通过学号查询学生

Student student = bj.searchStudentByNum("005");

if (student != null) {

System.out.println("根据学号查询的学生信息");

System.out.println(student);

} else {

System.out.println("没有该学号的学生");

}

System.out.println("*************************");

// 输入班级学生的语文、数学成绩

bj.insertChineseScore("001", 100);

bj.insertMathScore("002", 99);

System.out.println("修改成绩后的学生信息");

bj.dispalyAllStudent();

System.out.println("*************************");

// 删除学生信息

System.out.println("删除学生后的学生信息");

bj.deleteStudent("003");

bj.dispalyAllStudent();

}


// 测试学校类

public void testSchool() {

// 创建学生

Student stu1 = new Student("001", "张三");

Student stu2 = new Student("002", "李四");

Student stu3 = new Student("003", "王五", 45, 56);

// 创建班级并添加学生

Banji bj1 = new Banji("一年级");

bj1.addStudentList(stu1);

bj1.addStudentList(stu2);

Banji bj2 = new Banji("二年级");

bj2.addStudentList(stu3);

Banji bj3 = new Banji("二年级");

bj3.addStudentList(stu3);


// 创建学校并添加班级

School sc = new School();

sc.addBanji(bj1);

sc.addBanji(bj2);

sc.addBanji(bj3);

System.out.println("所有班级为");

sc.displayBanjiName();

// 删除班级3

System.out.println("删除班级3");

sc.deleteBanji(bj3);

sc.displayBanjiName();

// 对成绩进行排序

sc.sortChineseByAverage();

sc.sortMathAverge();

// 通过班级名称查询输出学生信息

System.out.println("通过班级名称查询输出所有学生信息");

Banji bjtest = sc.searchByName("一年级");

bjtest.dispalyAllStudent();


}


// 主菜单

public void mainMenu() {


System.out.println("****************");


System.out.println("*主菜单*");

System.out.println("1--班级管理");

System.out.println("2--学校管理");

System.out.println("0--退出");

System.out.println("****************");

}


// 学校管理菜单


public void schoolMenu() {


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("6--显示所有班级的名称");

System.out.println("9--返回上一级菜单");

System.out.println("****************");


}


// 班级管理菜单


public void banjiMenu() {


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("6--删除学生信息");

System.out.println("7--显示所有学生信息");

System.out.println("9--返回上一级菜单");

System.out.println("****************");


}


// 主流程

public void test() {

TestDemo td = new TestDemo();

Scanner sc = new Scanner(System.in);

int input = 0, input1 = 0, input2 = 0;


// 创建一个学校对象

School sch = new School() {

};

// 创建主学生列表

Banji mainList = new Banji("主学生列表");

sch.addBanji(mainList);


// 创建班级列表


Banji banjiList = null;


while (true) {

td.mainMenu();

System.out.println("请输入数据进行操作:");

input = sc.nextInt();

if (input == 0) {

break;

}


/*

* 主菜单管理

*/

switch (input) {


// 选择班级管理菜单

case 1:


while (true) {

td.banjiMenu();

System.out.println("请输入数字对班级进行管理");

input2 = sc.nextInt();

if (input2 == 9) {

break;

}

switch (input2) {


case 1:

System.out.println("1--添加学生信息到主学生列表");


System.out.println("请输入要添加的学生数量");


int count = sc.nextInt();

for (int i = 1; i <= count; i++) {

System.out.println("请输入第" + i + "个学生的信息");

System.out.println("请输入学生学号");

String stuNum = sc.next();

System.out.println("请输入学生姓名");

String stuName = sc.next();

System.out.println("请输入学生数学成绩");


Float math = sc.nextFloat();

System.out.println("请输入学生语文成绩");


Float chinese = sc.nextFloat();

// 创建学生对象

Student stu = new Student(stuNum, stuName, math, chinese);

mainList.addStudentList(stu);


}

mainList.dispalyAllStudent();


break;

case 2:

System.out.println("2--添加学生信息到普通班级");


System.out.println("请输入要添加的班级名称");


String bjName = sc.next();// 输入的班级名称

/*

* 判断新输入的班级名称是否存在,若存在则直接添加,不存在就输出提示信息

*/

banjiList = sch.searchByName(bjName);


if (banjiList == null) {


System.out.println("该班级不存在,请在学校管理菜单中先将班级添加到学校中");


} else {


System.out.println("请输入要添加的学生的数量");


int count1 = sc.nextInt();

for (int i = 1; i <= count1; i++) {

System.out.println("请输入第" + i + "个学生的信息");

System.out.println("请输入学生的学号");

// 输入学生的名字,并判断学生是否已经存在主学生列表中

String stuNum = sc.next();

Student student = mainList.searchStudentByNum(stuNum);

if (student == null) {

// 如果学生不存在,则创建新的添加

System.out.println("该学生在主学生列表中不存在,继续输入其他学生信息");

System.out.println("请输入学生的姓名");

String stuName = sc.next();

System.out.println("请输入学生数学成绩");

Float math = sc.nextFloat();

System.out.println("请输入学生语文成绩");

Float chinese = sc.nextFloat();

student = new Student(stuNum, stuName, math, chinese);

mainList.addStudentList(student);

banjiList.addStudentList(student);


} else {

// 如果学生存在与主学生列表中,则直接添加

banjiList.addStudentList(student);

System.out.println(stuNum + "号学生已在主学生列表中,已添加至" + bjName);

}


}


// 显示主学生列表信息及班级学生列表信息

mainList.dispalyAllStudent();

banjiList.dispalyAllStudent();


}


break;

case 3:


System.out.println("3--通过学号查询学生信息");

System.out.println("请输入要查询的班级的名字");

String bjName1=sc.next();

Banji bj1=sch.searchByName(bjName1);

if(bj1==null) {

System.out.println("该班级不存在");break;

}else {

System.out.println("请输入要查询的学号");

String stuNum1=sc.next();

Student stu1=bj1.searchStudentByNum(stuNum1);

if(stu1==null) {

System.out.println(bjName1+"没有"+stuNum1+"号学生");

}else {

System.out.println(stuNum1+"号学生的信息为:");

System.out.println(stu1);

}

}


break;

case 4:

System.out.println("4--输入班级的语文成绩");


break;

case 5:

System.out.println("5--输入班级的数学成绩");


break;

case 6:

System.out.println("6--删除学生信息");

break;

case 7:

System.out.println("7--显示所有学生信息");


break;

default:

System.out.println("该数字没有对应的操作");


break;


}


}


break;


// 选择学校管理菜单

case 2:


while (true) {

td.schoolMenu();

System.out.println("请输入数字对学校进行管理");

input1 = sc.nextInt();


if (input1 == 9) {

break;

}


switch (input1) {

case 1:


System.out.println("1--创建班级");


System.out.println("请输入要创建的班级名称");


String banjiName = sc.next();


banjiList = new Banji(banjiName);

// 将班级添加到学校中

sch.addBanji(banjiList);

;


break;

case 2:

System.out.println("2--删除班级");

break;

case 3:

System.out.println("3--通过班级名称查询班级信息");

break;

case 4:


System.out.println("4--对各班语文成绩按平均分由大到小排序");

break;

case 5:

System.out.println("5--对各班数学成绩按平均分由大到小排序");

break;

case 6:

System.out.println("6--显示所有班级的名称");

break;


default:

System.out.println("该数字没有对应的操作");

break;


}


}


break;


}


}

}


public static void main(String[] args) {

TestDemo td = new TestDemo();

// td.testStudent();

// td.testBanji();

// td.testSchool();

td.test();


}


}

运行后报错,

****************

*主菜单*

1--班级管理

2--学校管理

0--退出

****************

请输入数据进行操作:

1

****************

1--添加学生信息到主学生列表

2--添加学生信息到普通班级

3--通过学号查询学生信息

4--输入班级的语文成绩

5--输入班级的数学成绩

6--删除学生信息

7--显示所有学生信息

9--返回上一级菜单

****************

请输入数字对班级进行管理

1

1--添加学生信息到主学生列表

请输入要添加的学生数量

2

请输入第1个学生的信息

请输入学生学号

1

请输入学生姓名

测试1

请输入学生数学成绩

45

请输入学生语文成绩

34

请输入第2个学生的信息

请输入学生学号

2

请输入学生姓名

测试2

请输入学生数学成绩

56

请输入学生语文成绩

67

主学生列表所有的学生为:

学生信息: [学号:1, 姓名:测试1,数学成绩45.0, 语文成绩34.0]

学生信息: [学号:2, 姓名:测试2,数学成绩56.0, 语文成绩67.0]

****************

1--添加学生信息到主学生列表

2--添加学生信息到普通班级

3--通过学号查询学生信息

4--输入班级的语文成绩

5--输入班级的数学成绩

6--删除学生信息

7--显示所有学生信息

9--返回上一级菜单

****************

请输入数字对班级进行管理

3

3--通过学号查询学生信息

请输入要查询的班级的名字

主学生列表

该班级不存在

****************

1--添加学生信息到主学生列表

2--添加学生信息到普通班级

3--通过学号查询学生信息

4--输入班级的语文成绩

5--输入班级的数学成绩

6--删除学生信息

7--显示所有学生信息

9--返回上一级菜单

****************

请输入数字对班级进行管理

Exception in thread "main" java.util.InputMismatchException

at java.base/java.util.Scanner.throwFor(Scanner.java:939)

at java.base/java.util.Scanner.next(Scanner.java:1594)

at java.base/java.util.Scanner.nextInt(Scanner.java:2258)

at java.base/java.util.Scanner.nextInt(Scanner.java:2212)

at com.imooc.schoolmanager.TestDemo.test(TestDemo.java:184)

at com.imooc.schoolmanager.TestDemo.main(TestDemo.java:397)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿慧 2020-03-22 11:41:40

同学你好,

1、代码没有问题,通过班级名称可以查询到班级信息。

运行结果如下:

http://img1.sycdn.imooc.com//climg/5e76de4c09ce68c205090383.jpg

2、建议同学可以对sc.nextInt()进行try,catch处理,这样就不会报InputMismatchException错误了。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 视线模糊 #1
    主学生列表是不是就相当于一个班级名称?
    2020-03-22 11:47:37
  • 好帮手慕阿慧 回复 提问者 视线模糊 #2
    是的,同学代码中有: Banji mainList = new Banji("主学生列表"); // 创建主学生列表
    2020-03-22 12:05:45
  • 提问者 视线模糊 #3
    怎么我运行自己的程序报错了呀还是? **************** *主菜单* 1--班级管理 2--学校管理 0--退出 **************** 请输入数据进行操作: 1 **************** 1--添加学生信息到主学生列表 2--添加学生信息到普通班级 3--通过学号查询学生信息 4--输入班级的语文成绩 5--输入班级的数学成绩 6--删除学生信息 7--显示所有学生信息 9--返回上一级菜单 **************** 请输入数字对班级进行管理 1 1--添加学生信息到主学生列表 请输入要添加的学生数量 3 请输入第1个学生的信息 请输入学生学号 s001 请输入学生姓名 测试1 请输入第2个学生的信息 请输入学生学号 s002 请输入学生姓名 测试2 请输入第3个学生的信息 请输入学生学号 3 请输入学生姓名 测试3 主学生列表所有的学生为: 学生信息: [学号:s001, 姓名:测试1] 学生信息: [学号:s002, 姓名:测试2] 学生信息: [学号:3, 姓名:测试3] **************** 1--添加学生信息到主学生列表 2--添加学生信息到普通班级 3--通过学号查询学生信息 4--输入班级的语文成绩 5--输入班级的数学成绩 6--删除学生信息 7--显示所有学生信息 9--返回上一级菜单 **************** 请输入数字对班级进行管理 3 3--通过学号查询学生信息 请输入要查询的班级的名字 主学生列表 该班级不存在,请在学校管理菜单中创建班级 **************** 1--添加学生信息到主学生列表 2--添加学生信息到普通班级 3--通过学号查询学生信息 4--输入班级的语文成绩 5--输入班级的数学成绩 6--删除学生信息 7--显示所有学生信息 9--返回上一级菜单 **************** 请输入数字对班级进行管理 Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at com.imooc.schoolmanager.TestDemo.test(TestDemo.java:184) at com.imooc.schoolmanager.TestDemo.main(TestDemo.java:426)
    2020-03-22 20:31:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师