黑马程序员技术交流社区

标题: eclipse控制台输入数据出现错误 [打印本页]

作者: lqg5522    时间: 2015-5-1 22:10
标题: eclipse控制台输入数据出现错误
本帖最后由 lqg5522 于 2015-5-1 23:00 编辑

输入数字回车之后就报错InputMismatchException


贴上Demo代码:
  1. public static void main(String[] args) {
  2.                 // 创建一个TreeSet集合
  3.                 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {

  4.                         @Override
  5.                         public int compare(Student s1, Student s2) {
  6.                                 // 总分从高到低排序
  7.                                 int num = s2.getSum() - s1.getSum();
  8.                                 // 如果总分相同,判断语文成绩是否相同
  9.                                 int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;
  10.                                 // 如果语文成绩相同,就判断数学成绩是否相同
  11.                                 int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : num2;
  12.                                 // 如果数学成绩相同,就判断英语成绩
  13.                                 int num4 = num3 == 0 ? s1.getEnglish() - s2.getEnglish() : num3;
  14.                                 // 如果成绩都相同,就看姓名是否相同
  15.                                 int num5 = num4 == 0 ? s1.getName().compareTo(s2.getName())
  16.                                                 : num4;

  17.                                 return num5;
  18.                         }
  19.                 });
  20.                
  21.                 //键盘输入3个学生信息
  22.                 System.out.println("-------------开始录入学生信息--------------");
  23.                 for (int i = 1; i <= 3; i++) {
  24.                         Scanner sc =new Scanner(System.in);
  25.                         System.out.println("请输入第"+ i +"个学生的姓名:");
  26.                         String name = sc.nextLine();
  27.                         
  28.                         System.out.println("请输入第"+ i +"个学生的语文成绩:");
  29.                         int chinese = sc.nextInt();
  30.                         
  31.                         System.out.println("请输入第"+ i +"个学生的数学成绩:");
  32.                         int math = sc.nextInt();
  33.                         
  34.                         System.out.println("请输入第"+ i +"个学生的英语成绩:");
  35.                         int english = sc.nextInt();
  36.                         
  37.                         //把信息存储到学生对象
  38.                         Student s = new Student(name, chinese, math, english);
  39.                         //把学生对象添加到集合
  40.                         ts.add(s);
  41.                 }
  42.                 System.out.println("-------------录入学生信息结束--------------");
  43.                
  44.                 //遍历集合
  45.                 System.out.println("姓名\t语文成绩\t数学成绩\t英语成绩\t总分");
  46.                 for (Student s : ts) {
  47.                         System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+s.getMath()+"\t"+s.getEnglish()+"\t"+s.getSum());
  48.                 }
  49.         }
复制代码
Student类:
  1. public class Student {
  2.         // 姓名
  3.         private String name;
  4.         // 语文成绩
  5.         private int chinese;
  6.         // 数学成绩
  7.         private int math;
  8.         // 英语成绩
  9.         private int english;

  10.         public Student() {
  11.         }

  12.         public Student(String name, int chinese, int math, int english) {
  13.                 super();
  14.                 this.name = name;
  15.                 this.chinese = chinese;
  16.                 this.math = math;
  17.                 this.english = english;
  18.         }

  19.         public String getName() {
  20.                 return name;
  21.         }

  22.         public void setName(String name) {
  23.                 this.name = name;
  24.         }

  25.         public int getChinese() {
  26.                 return chinese;
  27.         }

  28.         public void setChinese(int chinese) {
  29.                 this.chinese = chinese;
  30.         }

  31.         public int getMath() {
  32.                 return math;
  33.         }

  34.         public void setMath(int math) {
  35.                 this.math = math;
  36.         }

  37.         public int getEnglish() {
  38.                 return english;
  39.         }

  40.         public void setEnglish(int english) {
  41.                 this.english = english;
  42.         }

  43.         public int getSum() {
  44.                 return this.chinese + this.english + this.math;
  45.         }
  46. }
复制代码


输入的名字是中文的时候才会出现这个问题,英文就不会。是eclipse的问题还是我代码有问题?

作者: jiao142857    时间: 2015-5-1 22:58
应该是Scanner类中nextLine()和nextInt()连用的原因
换成next()试试
你给的代码不全,没法模拟
作者: lqg5522    时间: 2015-5-1 22:59
jiao142857 发表于 2015-5-1 22:58
应该是Scanner类中nextLine()和nextInt()连用的原因
换成next()试试
你给的代码不全,没法模拟 ...

next()我也试过了,一样会出问题,少了个Student类,我补上了
作者: jiao142857    时间: 2015-5-1 23:12
哦原来不是nextline()和nextint()连用的原因 ,是楼主不小心,你在eclipse控制台输入后光标不会自动到下一行(可能只针对汉字吧)
从你 截图那儿看到 输入第二个学生姓名那儿颜色变了
以后手动换行就行了 按个方向键下

作者: lqg5522    时间: 2015-5-2 00:03
jiao142857 发表于 2015-5-1 23:12
哦原来不是nextline()和nextint()连用的原因 ,是楼主不小心,你在eclipse控制台输入后光标不会自动到下一行( ...

好像真的没问题了,不过不知道为什么会这样,是eclipse的问题吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2