黑马程序员技术交流社区

标题: 求解?是加异常还是重写程序 [打印本页]

作者: 简★零度    时间: 2013-11-15 22:12
标题: 求解?是加异常还是重写程序
package cn.itcase;
import java.io.IOException;
import java.util.Scanner;
/*第一题
      学生成绩分为四个等级:90~100:优,80~89:良,70~79:中,60~69:及格,0~60:不及格。   
         要求:   
             1.输入一个学生的成绩:例如 99,那么输出优。        
             2.输入成绩必须是整数,范围是0~100,超过范围或者输入的不是整数,
              要做相应的处理。   
             3.可以连续输入成绩,当输入over的时候,结束输入成绩
分析:
1。定义一个方法些成绩A.键盘录入
      B。判断
      C.处理异常
      D。结束程序
2.键盘录入结束over。
3.加入循环,可以多次输入成绩,到over结束

*/
public class Demo {
public static void main(String[] args)  throws IOException{
  //多次输入成绩
  
  while(true){
   
   ChengJi();//调用方法
   
   //键盘输入over结束
   Scanner s1=new Scanner(System.in);
   System.out.println("如果继续请输入任意字符,结束请输入over结束");
   String s=s1.next();
   //如果对就结束
   if(s.equals("over"))
   {
    System.out.println("谢谢使用");
    break;
   
   }
   }

  }
  //写方法
public static void ChengJi(){
  
  //键盘录入一个数据。
  Scanner sc=new Scanner(System.in);
  System.out.println("请输入成绩(0-100):");
  
  int number=sc.nextInt();
   

  //判断
  
  if(number>=90&&number<=100){
   
   System.out.println("优");
  }else if(number>=80&&number<=89) {
   System.out.println("良");
   
  }else if(number>=70&&number<=79){
   System.out.println("中");
  }else if(number>=60&&number<=69) {
   System.out.println("及格");
   
  }else if(number>=0&&number<60){
   System.out.println("不及格");
  }else  if(number>100 || number<0){
  
   System.out.println("你输入的成绩有误,请重新输入");
  
  }
   
  }
}
   
我知道要加异常,可是不知道加那里,有可能程序也有问题,可是我不知道咋改了,求大神详解,最好在我的代码基础上改,不要那种自己做的,说下我错哪了,谢谢,拜谢呀!

作者: 张鹏    时间: 2013-11-15 22:34
1、在你的代码里有两个new Scanner(System.in);在这里本身是不对的。
     无论是成绩还是退出指令,都应在同一个接收对象里判断,你这样相当于每次都接收了两个数据,而非一个。因为你在每一次循环里都执行了一次next()和一次nextInt();

2.异常当然是把nextInt()括起来,因为这里不一定是整形,但我们尽量不用异常做程序流程。
   可以考虑用next()接收后做空值和非数字、长度判断,然后转换为int类型。(建议用正则表达式,没学那就对String类型的数据判断)


我的建议:重写,因为逻辑已经错误(也就是我说的第一个)

else  if(number>100 || number<0),为什么不直接else?
作者: FFF    时间: 2013-11-15 22:58
代码修改如下:
  1. import java.util.Scanner;

  2. public class TempDay9 {
  3.         public static void main(String[] args) {
  4.                 while (true) {
  5.                         // 为什么在这里调用 方法?而且为什么要用户输入那么两次?你完全可以输入一次。然后判断是否为Over
  6.                         // 如果是就结束,否,则进行判断与输出
  7.                         // ChengJi();// 调用方法-----不合理

  8.                         Scanner s1 = new Scanner(System.in);
  9.                         // System.out.println("如果继续请输入任意字符,结束请输入over结束");--不合理
  10.                         System.out.println("请输入成绩(0-100):");
  11.                         String s = s1.next();// 这里接收到一个用户输入的数据。

  12.                         if (s.equals("over")) {
  13.                                 // System.out.println("谢谢使用");
  14.                                 System.out.println("感谢您的使用");// 如果条件成立直接用break跳出while循环,下面就不会执行了
  15.                                 break;
  16.                         }
  17.                        
  18.                         ChengJi(s);// 传入方法内去判断
  19.                 }
  20.         }

  21.         // 写方法
  22.         public static void ChengJi(String s) {
  23.                 // 键盘录入一个数据。
  24.                 // Scanner sc = new Scanner(System.in);--上面已经让用户输入了一次。这里就不要输入了。
  25.                 // System.out.println("请输入成绩(0-100):");
  26.                 // int number = sc.nextInt();

  27.                 // 判断
  28.                 try {// 在这里写异常处理。可能转换类型的时候会出错。出错就表示用户输入的不是数字
  29.                                 // 把输入的数据转为整数类型,不怕出错。出错有catch捕捉
  30.                         int number = Integer.parseInt(s);
  31.                         // 判断数字是否在要求的范围内
  32.                         if ((number > 0) && (number <= 100)) {
  33.                                 // 是,则传入数据,并输入结果
  34.                                 if (number >= 90 && number <= 100)// 如果if后面只有一个语句。可以不用写"{}"
  35.                                         System.out.println("优");
  36.                                 else if (number >= 80 && number <= 89)
  37.                                         System.out.println("良");

  38.                                 else if (number >= 70 && number <= 79)
  39.                                         System.out.println("中");
  40.                                 else if (number >= 60 && number <= 69)
  41.                                         System.out.println("及格");

  42.                                 else if (number >= 0 && number < 60)
  43.                                         System.out.println("不及格");

  44.                                 else if (number > 100 || number < 0)
  45.                                         System.out.println("你输入的成绩有误,请重新输入");
  46.                         } else {
  47.                                 // 否,则跳出提示。
  48.                                 System.out.println("请输入0至100的数");
  49.                         }

  50.                 }
  51.                 // 因为这里有try所以,只要用户输入的不是数字。会跳出提示。
  52.                 catch (Exception e) {
  53.                         System.out.println("输入错误!请重新输入。(请勿输入非整形数字以外的字符)");
  54.                 }

  55.         }
  56. }
复制代码
我已经全部加上的注释。如果还有不懂的地方可以来问我!
作者: 张鹏    时间: 2013-11-15 23:10
1、System.out.println("感谢您的使用");    这个没必要吧,因为你没有暂停程序,看不到的。
2、try的东西是不是多了一点?只需要try  int number = Integer.parseInt(s);就行吧
3、else if (number > 100 || number < 0)  直接用else多简洁
作者: 简★零度    时间: 2013-11-15 23:10
FFF 发表于 2013-11-15 22:58
代码修改如下:我已经全部加上的注释。如果还有不懂的地方可以来问我!

大神,膜拜呀!
作者: FFF    时间: 2013-11-15 23:19
张鹏 发表于 2013-11-15 23:10
1、System.out.println("感谢您的使用");    这个没必要吧,因为你没有暂停程序,看不到的。
2、try的东西 ...

楼主说尽量不要改动太多她的代码,怕她看不懂。而不是想要效率多高代码多简洁。只是为了让她理解。So~~少年,你要了解客户需要啊~~~




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