A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

FFF 金牌黑马 2013-11-12 21:43:11
楼主
本帖最后由 FFF 于 2013-11-13 12:48 编辑

前排,先留名。再慢慢写!
题目1:
  1. import java.util.Scanner;

  2. /*
  3. *需求:1.输入一个学生的成绩:例如 99,那么输出优。
  4. *2.输入成绩必须是整数,范围是0~100,超过范围或者输入的不是整数,要做相应的处理。   
  5. *3.可以连续输入成绩,当输入over的时候,结束输入成绩
  6. */
  7. /*思路:看到这个题目,我第一个想到的就是用查表法来做。代码如下。
  8. *
  9. *
  10. */
  11. //声明一个类,用于处理传入的数据
  12. class studnt {
  13.         // 声明一个用于接收成绩的变量
  14.         int grade;
  15.         // 声明一个数组,用于查表法
  16.         String[] st = new String[] { "极差", "极差", "极差", "极差", "很差", "及格", "中等", "良",
  17.                         "优秀", "优秀", "极优" };

  18.         // 声明一个构造函数,用于传入参数
  19.         studnt(int grade) {
  20.                 this.grade = grade / 10;
  21.         }

  22.         // 声明一个空的构造函数,以免实例化时出错
  23.         studnt() {
  24.         }

  25.         // 重写toString用于付出参数
  26.         public String toString() {
  27.                 return st[grade];
  28.         }
  29. }

  30. public class DemoTemp {
  31.         // 入口
  32.         public static void main(String[] args) {
  33.                 // 实例化studnt类,方便下面使用。
  34.                 studnt st = new studnt();
  35.                 // 实例Scanner用于输入
  36.                 Scanner sc = new Scanner(System.in);
  37.                 // 定一个标记,用于跳出循环
  38.                 boolean flag = false;
  39.                 // 由于是可重复输入的,所以用while当标记flag不为over时,一直运行下去。
  40.                 while (!flag) {
  41.                         // 因为可能存在输入非数字的情况,所以使用异常捕捉try,catch。怎么方便怎么来
  42.                         try {
  43.                                 // 提示指令
  44.                                 System.out.println("请输入您的学生成绩\n输入OVER退出");
  45.                                 // 用于接收输入的数据
  46.                                 String str = sc.next();
  47.                                 // 先判断输入的数据是否是结束语句"OVER",是结束则跳出循环结束运行。
  48.                                 if ((str.equals("OVER")) || (str.equals("over")))
  49.                                         flag = true;
  50.                                 // 否则进入下一个流程
  51.                                 else {
  52.                                         // 把输入的数据转为整数类型,不怕出错。出错有catch捕捉
  53.                                         int s = Integer.parseInt(str);
  54.                                         // 判断数字是否在要求的范围内
  55.                                         if ((s > 0) && (s <= 100)) {
  56.                                                 // 是,则传入数据,并输入结果
  57.                                                 System.out.println(new studnt((s)));
  58.                                         } else {
  59.                                                 // 否,则跳出提示。
  60.                                                 System.out.println("请输入0至100的数");
  61.                                         }
  62.                                 }
  63.                         }
  64.                         // 因为这里有try所以,只要用户输入的不是数字。会跳出提示。
  65.                         catch (Exception e) {
  66.                                 System.out.println("输入错误!请重新输入。(请勿输入非整形数字以外的字符)");
  67.                         }
  68.                 }
  69.         }
  70. }
复制代码
问题1:实现方法2
  1. import java.util.Scanner;
  2. class studnt{
  3.         //实现方法2  switch方法。与if,else方法一样的实现方法。我就不写if方法了。
  4.         public void count(int grand){
  5.                 //把传入的数据处理一下。方法判断。
  6.                 grand=grand/10;
  7.                 //使用switch开始判断
  8.                 switch(grand){
  9.                 case 10:
  10.                         System.out.println("极优");
  11.                         break;
  12.                 case 9:
  13.                         System.out.println("优秀");
  14.                         break;
  15.                 case 8:
  16.                         System.out.println("优秀");
  17.                         break;
  18.                 case 7:
  19.                         System.out.println("良");
  20.                         break;
  21.                 case 6:
  22.                         System.out.println("中等");
  23.                         break;
  24.                 case 5:
  25.                         System.out.println("及格");
  26.                         break;
  27.                 case 4:
  28.                         System.out.println("很差");
  29.                         break;
  30.                 default:
  31.                         System.out.println("同学,明天叫你家长来一下学校!");        
  32.                 }
  33.         }

  34. }

  35. public class DemoTemp {
  36.     public static void main(String[] args) {
  37.         // 实例化studnt类,方便下面使用。
  38.         studnt st = new studnt();
  39.         // 实例Scanner用于输入
  40.         Scanner sc = new Scanner(System.in);
  41.         // 定一个标记,用于跳出循环
  42.         boolean flag = false;
  43.         // 由于是可重复输入的,所以用while当标记flag不为over时,一直运行下去。
  44.         while (!flag) {
  45.                 // 因为可能存在输入非数字的情况,所以使用异常捕捉try,catch。怎么方便怎么来
  46.                 try {
  47.                         // 提示指令
  48.                         System.out.println("请输入您的学生成绩\n输入OVER退出");
  49.                         // 用于接收输入的数据
  50.                         String str = sc.next();
  51.                         // 先判断输入的数据是否是结束语句"OVER",是结束则跳出循环结束运行。
  52.                         if ((str.equals("OVER")) || (str.equals("over")))
  53.                                 flag = true;
  54.                         // 否则进入下一个流程
  55.                         else {
  56.                                 // 把输入的数据转为整数类型,不怕出错。出错有catch捕捉
  57.                                 int s = Integer.parseInt(str);
  58.                                 // 判断数字是否在要求的范围内
  59.                                 if ((s > 0) && (s <= 100)) {
  60.                                         // 是,则传入数据,并输入结果
  61.                                         st.count(s);
  62.                                 } else {
  63.                                         // 否,则跳出提示。
  64.                                         System.out.println("请输入0至100的数");
  65.                                 }
  66.                         }
  67.                 }
  68.                 // 因为这里有try所以,只要用户输入的不是数字。会跳出提示。
  69.                 catch (Exception e) {
  70.                         System.out.println("输入错误!请重新输入。(请勿输入非整形数字以外的字符)");
  71.                 }
  72.         }
  73. }
  74. }
复制代码
题目2:
  1. /*
  2. * 需求:从控制台字符串,将输入的字符串中的小写字母转换成大写字母,
  3. *                 大写字母转换成小写字母,数字转换成#符号。
  4. *
  5. *
  6. * 思路:把输入的字符,一个个拆开来判断。是否为字符或数字。是则进行转换。否则跳出提示。
  7. *                 判断可以通过把String转换为Char来判断。
  8. *                 最后把转换后的字符输出。
  9. *
  10. */
  11. public class DemoCase {
  12.         // 定下标点,当输入的数据中含有非字母与数字时。跳出循环。
  13.         static boolean flag = false;

  14.         // 入口
  15.         public static void main(String[] args) throws Exception {
  16.                 // 输入数据
  17.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  18.                 System.out.println("请输入要转换的字符、按回车键结束");
  19.                 // 因为是字符与数字混合,所以用String类型
  20.                 String x = br.readLine();
  21.                 // 声明一个数字点,用到while计算
  22.                 int flagOne = 0;
  23.                 // 声明一个char用于把转入的数据的储存,方便于使用char方法
  24.                 char k;
  25.                 // 声明一个用于输出的String
  26.                 String arr = "";
  27.                 // 建立while循环,条件为:当数字标点小于输入的字符长度时,无限的运行下去。
  28.                 while ((flagOne < x.length()) && !flag) {
  29.                         // 取一个字符,用于转换。一个一个来转换
  30.                         k = x.charAt(flagOne);
  31.                         // 调用转换的方法
  32.                         k = shift(k);
  33.                         // 标点,加1。转换完一个,就加1
  34.                         flagOne++;
  35.                         // 把转换出来的字符集合起来。用于转换完后的输出
  36.                         arr = arr + k;
  37.                 }
  38.                 // 当转换出来的倒是字母与数字时,才输出。
  39.                 if (!flag)
  40.                         // 输出语句
  41.                         System.out.println(arr);
  42.         }

  43.         // 用于转换的方法,接收一个char类型的数据。
  44.         static char shift(char s) {
  45.                 // 判断是否为大写,是则换为小写字母
  46.                 if (s <= 'Z' && s >= 'A')
  47.                         // 转换大小写语句
  48.                         s = Character.toLowerCase(s);
  49.                 else
  50.                 // 判断是否为小写。是则换成大写字母
  51.                 if (s <= 'z' && s >= 'a')
  52.                         // 小写转换成大写的语句
  53.                         s = Character.toTitleCase(s);
  54.                 else
  55.                 // 如果以上都不是,则判断是否为数字,是则转换成“#”字符
  56.                 if (s <= 57 && s >= 48)
  57.                         s = '#';
  58.                 // 如果不是字母,也不是数字。则提示错误。结束程序
  59.                 else {
  60.                         // 输出提示
  61.                         System.out.println("输入错误,程序结束。输入的字符只能包含数字和字母。");
  62.                         // 把标点改为true。让上面的while跳出循环
  63.                         flag = true;
  64.                 }
  65.                 // 返回s。用于累加
  66.                 return s;
  67.         }
  68. }
复制代码

点评

建议:使用正则,使用switch的时候,那么在输出相同的结果时,可以就在最后一个case中输出,这样简化代码,继续加油!由于版主之间不能加技术分  发表于 2013-11-15 11:42
虽然你处理了输入的成绩不是数字,你catch了,但是同时程序也结束了,不符合要求,同时第二题处理输入的不是字母数字,不完善  发表于 2013-11-15 11:40

评分

参与人数 1黑马币 +10 收起 理由
杨增坤 + 10

查看全部评分

回复 使用道具 举报
1234
您需要登录后才可以回帖 登录 | 加入黑马