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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© aspoMAN 中级黑马   /  2013-9-25 09:48  /  2449 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 aspoMAN 于 2013-9-26 18:12 编辑

对于输入字符或数字出现的异常该如何处理?
如果用户输入的不是数字,或不按照提示进行输入,我怎么还能让他继续运行呢(猜大小的过程),哪位大神有好的算法或优化方法,请多赐教
  1. import java.io.*;
  2. /*
  3. * 需求:
  4. * 随机生成一个1-100的int数
  5. * 接收用户输入,判断是否猜对数字。如果猜大了则提示大了,如果猜小了则提示小了。猜中了则提示猜中了。
  6. * 如果用户在3次以内猜对,则提示真聪明。如果在10次或10次以内猜对,则提示还可以啦。如果大于10次,则提示对不起,智商不过关
  7. * 如果用户猜中或到达10次都没有中则提示是否重新挑战,输入y/n进行选择。
  8. *
  9. * 不足:猜大小的过程中,对于非int类型的数据无法 处理。
  10. */
  11. public class GuessNum {
  12.         public static void main(String[] args) {
  13.                 while(true){
  14.                         int numValue = 10;//new Random().nextInt(100)+1;
  15.                         int i = 0;
  16.                         System.out.println("系统已生成一个1-100的随机数,请输入数字猜大小");
  17.                         String relValue = "";
  18.                         while(i<10&&!relValue.equals("猜中了")){
  19.                                 //用户输入
  20.                                 BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
  21.                                 int userNum = 0;
  22.                                 try {
  23.                                         userNum = Integer.parseInt(bfr.readLine());
  24.                                 } catch (NumberFormatException e) {
  25.                                         // TODO Auto-generated catch block
  26.                                         System.out.println("格式不正确,程序已停止运行");
  27.                                         return;
  28.                                 } catch (IOException e) {
  29.                                         // TODO Auto-generated catch block
  30.                                         System.out.println("格式不正确,程序已停止运行");
  31.                                         return;
  32.                                 }
  33.                                 //猜大、猜小
  34.                                 relValue = guessRight(numValue,userNum);
  35.                                 showResult(relValue);
  36.                                 i++;
  37.                         }
  38.                         //答题级别
  39.                         showResult(getType(i));
  40.                         isExit();
  41.                 }
  42.         }
  43.         
  44.         //打印方法
  45.         private static void showResult(String strValue) {
  46.                 System.out.println(strValue);
  47.                
  48.         }

  49.         //判断数字是否猜中
  50.         public static String guessRight(int numValue, int userNum){
  51.                 if(numValue == userNum){
  52.                         return "猜中了";
  53.                 } else if (numValue > userNum){
  54.                         return "猜小了";
  55.                 } else {
  56.                         return "猜大了";
  57.                 }
  58.         }
  59.         
  60.         //判断答题级别
  61.         public static String getType(int i){
  62.                 if(i<=3){
  63.                         return "可以啊,没难倒你  nice 得分:100";
  64.                 } else if(i<10){
  65.                         return"一般般啦,good 得分:75";
  66.                 } else {
  67.                         return"还不知道你, 唉 智商是硬伤 得分:10";
  68.                 }
  69.         }
  70.         
  71.         //是否退出系统
  72.         public static void isExit(){
  73.                 System.out.print("是否退出? y/n");
  74.                 while(true){
  75.                         BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
  76.                         try {
  77.                                 String y = bfr.readLine();
  78.                                 if(y.equals("y")){
  79.                                         System.out.println("退出系统");
  80.                                         System.exit(0);
  81.                                 } else if(y.equals("n")){
  82.                                         System.out.println("再来一次");
  83.                                 } else {
  84.                                         System.out.println("请输入正确的字符");
  85.                                 }
  86.                         } catch (NumberFormatException e) {
  87.                                 // TODO Auto-generated catch block
  88.                                 System.out.println("格式不正确,程序已停止运行");
  89.                                 return;
  90.                         } catch (IOException e) {
  91.                                 // TODO Auto-generated catch block
  92.                                 System.out.println("格式不正确,程序已停止运行");
  93.                                 return;
  94.                         }
  95.                 }
  96.         }
  97. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

8 个回复

倒序浏览
你可以用char[]字符数组把控制台输入的字符copy一份,先进行判断,如果满足条件,则执行下一步,否则让对方重新输入,知道合法为止,
回复 使用道具 举报
楼主研究的真多啊!下面是饿刚刚给你改的代码,楼主去试下--->
  1. import java.io.*;
  2. /*
  3. * 需求:
  4. * 随机生成一个1-100的int数
  5. * 接收用户输入,判断是否猜对数字。如果猜大了则提示大了,如果猜小了则提示小了。猜中了则提示猜中了。
  6. * 如果用户在3次以内猜对,则提示真聪明。如果在10次或10次以内猜对,则提示还可以啦。如果大于10次,则提示对不起,智商不过关
  7. * 如果用户猜中或到达10次都没有中则提示是否重新挑战,输入y/n进行选择。
  8. *
  9. * 不足:猜大小的过程中,对于非int类型的数据无法 处理。
  10. */
  11. public class GuessNum {
  12.         public static void main(String[] args) {
  13.                 while(true){
  14.                         int numValue = 10;//new Random().nextInt(100)+1;
  15.                         int i = 0;
  16.                         System.out.println("系统已生成一个1-100的随机数,请输入数字猜大小:");
  17.                         String relValue = "";
  18.                         while(i<10&&!relValue.equals("猜中了")){
  19.                                 //用户输入
  20.                                 String str = null;
  21.                                 int userNum = 0;
  22.                                         while(str == null){
  23.                                                 BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
  24.                                                 try {
  25.                                                         str = bfr.readLine();
  26.                                                         userNum = Integer.parseInt(str);
  27.                                                 } catch (NumberFormatException e) {
  28.                                         System.out.println("格式不正确,请重新输入:");
  29.                                         str = null;
  30.                                                 } catch (IOException e) {
  31.                                                         System.out.println("格式不正确,请重新输入:");
  32.                                                         str = null;
  33.                                                                         }
  34.                                         }
  35.                                 //猜大、猜小
  36.                                 relValue = guessRight(numValue,userNum);
  37.                                 showResult(relValue);
  38.                                 i++;
  39.                         }
  40.                         //答题级别
  41.                         showResult(getType(i));
  42.                         isExit();
  43.                 }
  44.         }
  45.         
  46.         //打印方法
  47.         private static void showResult(String strValue) {
  48.                 System.out.println(strValue);
  49.                
  50.         }

  51.         //判断数字是否猜中
  52.         public static String guessRight(int numValue, int userNum){
  53.                 if(numValue == userNum){
  54.                         return "猜中了";
  55.                 } else if (numValue > userNum){
  56.                         return "猜小了";
  57.                 } else {
  58.                         return "猜大了";
  59.                 }
  60.         }
  61.         
  62.         //判断答题级别
  63.         public static String getType(int i){
  64.                 if(i<=3){
  65.                         return "可以啊,没难倒你  nice 得分:100";
  66.                 } else if(i<10){
  67.                         return"一般般啦,good 得分:75";
  68.                 } else {
  69.                         return"还不知道你, 唉 智商是硬伤 得分:10";
  70.                 }
  71.         }
  72.         
  73.         //是否退出系统
  74.         public static void isExit(){
  75.                 System.out.print("是否退出? y/n");
  76.                 while(true){
  77.                         BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
  78.                         try {
  79.                                 String y = bfr.readLine();
  80.                                 if(y.equals("y")){
  81.                                         System.out.println("退出系统");
  82.                                         System.exit(0);
  83.                                 } else if(y.equals("n")){
  84.                                         System.out.println("再来一次");
  85.                                 } else {
  86.                                         System.out.println("请输入正确的字符");
  87.                                 }
  88.                         } catch (NumberFormatException e) {
  89.                                 // TODO Auto-generated catch block
  90.                                 System.out.println("格式不正确,程序已停止运行");
  91.                                 return;
  92.                         } catch (IOException e) {
  93.                                 // TODO Auto-generated catch block
  94.                                 System.out.println("格式不正确,程序已停止运行");
  95.                                 return;
  96.                         }
  97.                 }
  98.         }
  99. }
复制代码
我加了个while 循环判断,如果你输入格式错误的话!就让你继续输入

希望可以帮楼主、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、
回复 使用道具 举报
long362144768 发表于 2013-9-25 10:23
你可以用char[]字符数组把控制台输入的字符copy一份,先进行判断,如果满足条件,则执行下一步,否则让对方 ...

嗯 好思路,试一下
回复 使用道具 举报
yting_xmei1129 发表于 2013-9-25 11:00
楼主研究的真多啊!下面是饿刚刚给你改的代码,楼主去试下--->我加了个while 循环判断,如果你输入格式错误 ...

这是论坛的答题活动,做了一下,不过已经过期了,所以发这里了。
哥们技术分目测4天30分,好厉害啊,请教请教
回复 使用道具 举报
aspoMAN 发表于 2013-9-25 11:40
这是论坛的答题活动,做了一下,不过已经过期了,所以发这里了。
哥们技术分目测4天30分,好厉害啊,请教 ...

你怎么知道的???这才是大神啊! 饿这个号才申请5天、、、你是怎么知道的,求解释啊!
回复 使用道具 举报
我天天逛论坛啊 , 一举一动,都在我的。。。呵呵 开玩笑
回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。 以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
黄文伯 发表于 2013-9-26 16:06
亲,如问题已解决请将分类的“未解决”改为“已解决”。 以后的问题贴也要及时更改分类哦~ ...

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