老师有个问题

老师有个问题

package test;


import java.util.Scanner;


import model.Banji;

import model.School;

import model.Showcase;

import model.Student;


public class Test {


public static void main(String[] args) {

int i1;

boolean flag=false;

Scanner sc=new Scanner(System.in);

int i;

School schoolmanage = new School();

Banji mainbanji = new Banji("S00", "主学生列表");

schoolmanage.addbanji(mainbanji);

Showcase face = new Showcase();

while (true) {

face.show1();

while (true) {

try {

i = sc.nextInt();

if (i < 1 || i > 3) {

throw new Exception();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("输入格式有误 ,请重新输入");

continue;

}

break;

}


switch (i) {

case 1:

while(true) {

face.show2(); //这里有问题当执行完一个程序之后 直接返回到SHOW1了 正确效果应该是返回到SHOW2

while (true) {

try {


i1 = sc.nextInt();

if (i1 < 1 || i1 > 8) {

throw new Exception();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("输出格式有误请重新输入");

continue;

}

break;

}


switch (i1) {

case 1:

int num;

while (true) {

try {

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

num = sc.nextInt();

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("请输入数字");

continue;

}

break;

}

for (int a = 0; a<num; a++) {

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

String id = sc.next();

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

String name = sc.next();

Student stu = new Student(id, name);

boolean flag1=true;

for(Student w :mainbanji.getList()) {

if(!w.getStuNum().equals(id)) {

mainbanji.addStudent(stu);

flag1=false;

}

else {

System.out.println("学生ID不能相同");

}

}

if(flag1) {

mainbanji.addStudent(stu);

}

}

break;


case 2:

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

String name = sc.next();

Banji b = schoolmanage.serchbyname(name);

if (b == null) {

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

} else {

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

int num1 = sc.nextInt();

for (int a = 0; i <= num1; a++) {

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

String id = sc.next();

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

String name1 = sc.next();

Student stu = new Student(id, name1);

b.addStudent(stu);

mainbanji.addStudent(stu);

}


}

break;


case 3:

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

String id2 = sc.next();

Student s = mainbanji.serchbyid(id2);

System.out.println(s);


case 4:

Float gradechinese;

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

String id3 = sc.next();

Student s1 = mainbanji.serchbyid(id3);

if (s1 == null) {

System.out.println("没有此ID");

break;

}

while(true) {

try {

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

gradechinese=sc.nextFloat();

if(gradechinese<0||gradechinese>100) {

throw new Exception();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("输出的语文成绩格式有误,请重新输入");

continue;

}

break;

}

s1.setChinese(gradechinese);

break;


case 5:

Float grademath;

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

String id4 = sc.next();

Student s2 = mainbanji.serchbyid(id4);

if (s2 == null) {

System.out.println("没有此ID");

break;

}

while(true) {

try {

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

grademath=sc.nextFloat();

if(grademath<0||grademath>100) {

throw new Exception();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("输出的语文成绩格式有误,请重新输入");

continue;

}

break;

}

s2.setChinese(grademath);

break;


case 6:


System.out.println("请输入要删除的学生ID:");

String id5 = sc.next();

Student s3 = mainbanji.serchbyid(id5);

if (s3 == null) {

System.out.println("没有此ID");

break;

}

else{

for(String s4:schoolmanage.getMap().keySet()) {

Banji bj=schoolmanage.serchbyname(s4);

for(Student s5:bj.getList()) {

if(s5.getStuNum().equals(id5)) {

bj.getList().remove(s3);

break;

}

}

}

}

mainbanji.getList().remove(s3);

break;

case 7:

for(Student e:mainbanji.getList()) {

System.out.println(e);

}


case 8:

flag=true;

}

if(flag) {

break;

}

} //while

break;


case 2:

while(true) {

face.show3();

int i2;

while(true){

try {

i2 = sc.nextInt();

if(i2<1||i2>7) {

throw new Exception();

}

} catch (Exception e) {

// TODO Auto-generated catch block

System.out.println("输入有误请重新输入");

continue;

}

break;

}

switch(i2) {

case 1:

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

String name=sc.next();

Banji b=schoolmanage.serchbyname(name);

schoolmanage.addbanji(b);

break;

case 2:

System.out.println("请输入要删除 的班级名称:");

String name1=sc.next();

Banji b1=schoolmanage.serchbyname(name1);

schoolmanage.deletebanji(b1);

break;

case 3:

System.out.println("请输入要查找的班级名称:");

String name2=sc.next();

Banji b3=schoolmanage.serchbyname(name2);

if(b3==null) {

System.out.println("该班级还没有添加请先添加:");

}

else {

for(Student q:b3.getList()) {

System.out.println(q);

}

}

break;

case 4:

schoolmanage.sortchinese();

break;

case 5:

schoolmanage.sortmath();

break;

case 6:

schoolmanage.displayallclassname();

case 7:

flag=true;

}

if(flag) {

break;

}

}

break;


case 3:

break;

}

}

}


}

package model;


import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Set;


public class School {

private Map<String, Banji> map;

private int i = 0;


public School() {

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

}


public Map<String, Banji> getMap() {

return map;

}


public void setMap(Map<String, Banji> map) {

this.map = map;

}


public void addbanji(Banji banji) {


for (String name : this.map.keySet()) {

if (name.equals(banji.getClassName())) {

System.out.println("改班级已经存在不用重复添加");

i = 1;

break;

}

}

if (i == 0) {

this.map.put(banji.getClassName(), banji);

i = 2;

}

}


public void deletebanji(Banji banji) {

for (String name : this.map.keySet()) {

if (!name.equals(banji.getClassName())) {

System.out.println("改班级不存在不用删除");

}

}

this.map.remove(banji.getClassName());

}


public Banji serchbyname(String name) {

Banji b = null;

for (String s : this.map.keySet()) {

if (s.equals(name)) {

b = this.map.get(name);

}

}

return b;

}


public void sortchinese() {

int i1=0;

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

boolean flag=false;

if (i == 2) {

for (String s : map.keySet()) {

Banji b = this.serchbyname(s);

List<Student> li = new ArrayList<Student>();

li = b.getList();

                int num=0;

                Float sum=0f;

                Float average=0f;

for (Student stu : li) {

if (stu.getChinese() != null) {

                        sum=sum+stu.getChinese();

                        num++;

i1=1;

}

}

if(sum!=0) {

average=sum/num;

m.put(s, average);

flag=true;

}

if(i1==0) {

System.out.println("还有班级没有输入成绩");

}

}

}

else {

System.out.println("还未输入班级");

}

    if(flag) {

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

    Collections.sort(l, new Com());

    for(Map.Entry<String, Float> q:l) {

    System.out.println(q.getKey()+":"+q.getValue());

    }

    }

}


public void sortmath() {

int i1=0;

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

boolean flag=false;

if (i == 2) {

for (String s : map.keySet()) {

Banji b = this.serchbyname(s);

List<Student> li = new ArrayList<Student>();

li = b.getList();

                int num=0;

                Float sum=0f;

                Float average=0f;

for (Student stu : li) {

if (stu.getMath() != null) {

                        sum=sum+stu.getMath();

                        num++;

i1=1;

}

}

if(sum!=0) {

average=sum/num;

m.put(s, average);

flag=true;

}

if(i1==0) {

System.out.println("还有班级没有输入成绩");

}

}

}

else {

System.out.println("还未输入班级");

}

    if(flag) {

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

    Collections.sort(l, new Com());

    for(Map.Entry<String, Float> q:l) {

    System.out.println(q.getKey()+":"+q.getValue());

    }

    }

}

public void displayallclassname() {

Set<String> nameset=new HashSet();

nameset=map.keySet();

for(String name:nameset) {

System.out.println(name);

}

}


}

package model;


import java.util.ArrayList;

import java.util.List;


public class Banji {

private List<Student> list;

private String classid;

private String className;

public List<Student> getList() {

return list;

}

public void setList(List<Student> list) {

this.list = list;

}

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 Banji( String classid, String className) {

super();

list=new ArrayList<Student>();

this.classid = classid;

this.className = className;

}

public void addStudent(Student stu) {

int i=1;

for(Student stu1:this.list) {

if(stu1.equals(stu)) {

System.out.println("该学生已经存在不需要重复输入");

i=i+1;

}

}

if(i!=2) {this.list.add(stu);

}


}

public Student serchbyid(String StuNum) {

Student stu=null;

for(Student stu1:this.list) {

if(stu1.getStuNum().equalsIgnoreCase(StuNum)) {

stu=stu1;

}

}

return stu;

}

public void insertChinese(Student stu,float score) {

stu.setChinese(score);

}

public void insertmath(Student stu,float score) {

stu.setMath(score);

}

public void deleteStudent(Student stu) {

this.list.remove(stu);

}

public void showallstu() {

for(Student stu:this.list) {

System.out.println(stu);

}

}

}

package model;


import java.util.InputMismatchException;

import java.util.Scanner;


public class Student {

private String stuNum;

private String stuName;

private Float math;

private Float chinese;


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 Student(String stuNum, String stuName) {

super();

this.stuNum = stuNum;

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 String toString() {

if(this.getMath()==null) {

return "学生学号:" + this.getStuNum() + "\n学生姓名:" + this.getStuName() + "\n学生语文成绩:"

+ this.getChinese();

}

if(this.getChinese()==null) {

return "学生学号:" + this.getStuNum() + "\n学生姓名:" + this.getStuName() + "\n学生数学成绩:" + this.getMath();

}

return "学生学号:" + this.getStuNum() + "\n学生姓名:" + this.getStuName() + "\n学生数学成绩:" + this.getMath() + "\n学生语文成绩:"

+ this.getChinese();

}


@Override

public int hashCode() {

final int prime = 31;

int result = 1;

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

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

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

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

return result;

}


@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

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

Student stu = (Student) obj;

return stu.getStuName().equals(stuName) && stu.getStuNum().equals(stuNum);

} else {

return false;

}

}

}

package model;


public class Showcase {

public void show1() {

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

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

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

System.out.println("3.退出程序");

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

}

public void show2() {

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("8.返回上一级");

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

}

public void show3() {

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("**********");

}


}

老师我这个代码先输入1进入班级管理 然后我按了下a  理想效果应该是提醒我重新输入 然而实际效果是无限出现输入有误请重新输入   我去DEBUG了一 下 在这一步的时候i1 = sc.nextInt();我输入数字1但是i1还是没有赋值成功 我觉得问题可能出在这里 但不知道到底怎么回事 麻烦老师看看

正在回答

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

3回答

同学你好,同学指的是会出现如下图所示的情况吗?如果是的话,这种情况是正确的哦~

输入错误后需要重新选择菜单呢~

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

同学想要输入错误,退出菜单的话,将catch语句中的continue;改成break;退出循环。

如果不是的话,请同学详细描述下问题,方便老师为同学解答~

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

提问者 慕神9477737 2019-06-18 12:13:17

输出环节。

好帮手慕小班 2019-06-17 18:59:56

    同学你好,1、需要有一个sc.next()方法来接收这个异常的值-->同学可以这样理解:之前人家用nextInt()需要的是一个int类型的,结果你给人家的字符串类型的,它是不会接受的。相当于那个之前输入的String类型的一直在上方飘着。直到它遇到一个对的方法,可以接收键盘输入的Sring类型的方法。直到他遇到了sc.next()。sc.next()需要接收一个键盘输入的String类型的值。而之前我们已经输入了一个了,但是还没有方法接收,然后这个sc.next()就会接收了。它不一定是让你必须现在输入,而是要等待一个键盘输入的String类型。正好它就把在上方等待接收的输入错误的给接收了!

        2、关于     face.show2(); // 这里有问题当执行完一个程序之后 直接返回到SHOW1了 正确效果应该是返回到SHOW2的问题,修改建议如下:添加case7的跳出循环语句!否则每次都会执行case7和case8中的语句,直接跳出了循环!

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

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

  • 提问者 慕神9477737 #1
    老师你好 怎么只接受数据不输出数据啊? 我在catch中添加了一个sc.next(); 虽然不无限显示请重新输入了 但是却会多出来一个无用的输出和环节。
    2019-06-18 12:12:48
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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