来自 金沙js77888 2019-10-29 08:51 的文章
当前位置: 金沙js77888 > 金沙js77888 > 正文

1. 玩家输入错误类型数据时

Java完成简单猜数字游戏v2.0,java猜数字v2.0

猜数字游戏v2.0 优化了获取随机数、输入数据超出边界值的代码,并增加了异常处理,能够在玩家输入错误数据错误时给出可靠指引,希望对和我一样的新人有帮助,

最后希望有大神愿意帮我解决代码优化的问题,谢谢。

/*需求:
*1. 玩家输入错误类型数据时,要求重新输入;
*2. 优化输入整数超出区间部分的代码;
*3. 优化获取随机数部分的代码;
*思路:
*1. 创建一个函数,要求必须输入整数;
*2. 超边界后有更加清晰的提示,能够正确指引玩家输入;
*3. 引入带标号的while循环,内层循环结束后,跳至指定标号,即可重新开始,不必重新获取随机数;
*步骤:
*1. 创建getInteger函数,引入try-catch,在输入非int情形下要求重新输入,利用continue,直到玩家输入整数为止;
*2. 针对玩家输入的数据与区间上下限作比较,超出后给出超上限或者超下限的提示;
*3. 针对玩家输入的区间上限低于下限时,给出正确的错误提示,并要求用户能够重新输入上限值;
*4. while循环添加一个标号outer,玩家输入yes后,继续outer循环,其他情况就结束outer循环,即结束游戏。

*
*                缺点
* 太多循环嵌套,需要继续优化。
*
*/

  1 import java.util.*;
  2 public class GuessGame
  3 {
  4     public static void main(String[] args)
  5     {
  6         outer:while (true) 
  7         {
  8             //确认竞猜数据的下限
  9             Scanner guessMin = new Scanner(System.in);
 10             System.out.println("欢迎来到猜数字游戏v2.0!n请输入您要竞猜数据的下限:");
 11             int min = getInteger();
 12             //确认竞猜数据的上限
 13             while(true)
 14             {
 15                 Scanner guessMax = new Scanner(System.in);
 16                 System.out.println("请输入您要竞猜数据的上限:");
 17                 int max = getInteger();
 18                 if(max < min)
 19                 {
 20                     System.out.println("您输入的竞猜数据上限低于上限,请重新输入。");
 21                     continue;
 22                 }
 23                 //产生一个指定区间的随机数,Math.random()生成一个[0,1)之间的double类型的随机数。
 24                 int givenNumber = (int)(Math.random()*(max-min 1))   min;
 25                 //System.out.println("系统已生成的随机数:" givenNumber);//测试时可取消注释
 26                 System.out.println("系统已生成一个["   min   ","   max   "]区间的随机数,来竞猜吧!");
 27                 //引入count,用来计算输入次数
 28                 int count = 0;
 29                 while(true)
 30                 {
 31                     //玩家输入猜想的数据
 32                     Scanner sc = new Scanner(System.in);
 33                     try 
 34                     {
 35                         System.out.println("在这个给定区间,["   min   ","   max   "]" ",请输入您所猜想的数据:");
 36                         count   ;
 37                         int guessNumber = sc.nextInt();
 38                         //大于判断,将max-1的目的是为了更加精准范围
 39                         if (guessNumber > givenNumber) 
 40                         {
 41                             //此处是针对输入值超出上限时的一个判断,避免误导玩家
 42                             if (guessNumber > max)
 43                             {
 44                                 System.out.println("太可惜了,您在第"   count   "次输入的数据是" guessNumber ",超出了区间上限。");
 45                             }
 46                             else
 47                             {
 48                                 max = guessNumber-1;
 49                                 System.out.println("太可惜了,您在第"   count   "次猜大了,请继续:");
 50                             }
 51                         } 
 52                         //小于判断,将min 1的目的是为了更加精准范围
 53                         else if (guessNumber < givenNumber)
 54                         {
 55                             //此处是针对输入值超出上限时的一个判断,避免误导玩家
 56                             if (guessNumber < min)
 57                             {
 58                                 System.out.println("太可惜了,您在第"   count   "次输入的数据是" guessNumber ",超出了区间下限。");
 59                             }
 60                             else
 61                             {
 62                                 min = guessNumber 1;
 63                                 System.out.println("太可惜了,您在第"   count   "次猜小了,请继续:");
 64                             }
 65                         } 
 66                         //等于判断,并询问是否继续游戏
 67                         else
 68                         {
 69                             System.out.println("太赞了,您花了"   count   "次就猜中了这个随机数,"   givenNumber   "。");
 70                             //是否继续游戏
 71                             System.out.println("n输入yes继续挑战,按任意键退出。n");
 72                             sc = new Scanner(System.in);
 73                             String str = sc.nextLine();
 74                             if ("yes".equals(str)) 
 75                             {
 76                                 continue outer;
 77                             } 
 78                             else
 79                             {
 80                                 System.out.println("欢迎使用猜数字游戏v2.0,再见!n");
 81                                 break outer;
 82                             }
 83                         }
 84                     } 
 85                     catch (InputMismatchException e) 
 86                     {
 87                         System.out.println("您输入的数据有误,请重新输入一个区间内的整数。n");
 88                     }
 89                 }
 90             }
 91         }
 92     }
 93     public static int getInteger()//对获取的数据进行分析,是整数继续,不是整数就要求重新输入
 94     {
 95         while(true)
 96         {
 97             Scanner in = new Scanner(System.in);
 98             int getNum = 0;
 99             String str = in.nextLine();
100             boolean b = true;
101             try
102             {
103                 getNum = Integer.parseInt(str);//如果输入是int类型,则把值转化成整型赋给getNum
104             }
105             catch(Exception e)//不是整数则让b为false
106             {
107                 b = false;
108             }
109             if(b)//如果b是false则要求重新输入
110             {
111                 System.out.println("您输入的整数是:" getNum);
112             }
113             else
114             {
115                 System.out.println("输入错误,请重新输入一个整数。");
116                 continue;
117             }
118             return getNum;//函数返回用户输入的整数
119         }
120     }
121 }

 

猜数字游戏v2.0 优化了获取随机数、输入数据超出边界值的代码,并增加了异常处理,能够在玩家...

本文由金沙js77888发布于金沙js77888,转载请注明出处:1. 玩家输入错误类型数据时

关键词: