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

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

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

 import java.util.*;
 public class GuessGame
 {
     public static void main(String[] args)
     {
         outer:while (true)
         {
             //确认竞猜数据的下限
             Scanner guessMin = new Scanner(System.in);
             System.out.println("欢迎来到猜数字游戏v2.0!\n请输入您要竞猜数据的下限:");
             int min = getInteger();
             //确认竞猜数据的上限
             while(true)
             {
                 Scanner guessMax = new Scanner(System.in);
                 System.out.println("请输入您要竞猜数据的上限:");
                 int max = getInteger();
                 if(max < min)
                 {
                     System.out.println("您输入的竞猜数据上限低于上限,请重新输入。");
                     continue;
                 }
                 //产生一个指定区间的随机数,Math.random()生成一个[0,1)之间的double类型的随机数。
                 int givenNumber = (int)(Math.random()*(max-min+1)) + min;
                 //System.out.println("系统已生成的随机数:"+givenNumber);//测试时可取消注释
                 System.out.println("系统已生成一个[" + min + "," + max + "]区间的随机数,来竞猜吧!");
                 //引入count,用来计算输入次数
                 int count = 0;
                 while(true)
                 {
                     //玩家输入猜想的数据
                     Scanner sc = new Scanner(System.in);
                     try
                     {
                         System.out.println("在这个给定区间,[" + min + "," + max + "]"+",请输入您所猜想的数据:");
                         count++ ;
                         int guessNumber = sc.nextInt();
                         //大于判断,将max-1的目的是为了更加精准范围
                         if (guessNumber > givenNumber)
                         {
                             //此处是针对输入值超出上限时的一个判断,避免误导玩家
                             if (guessNumber > max)
                             {
                                 System.out.println("太可惜了,您在第" + count + "次输入的数据是"+guessNumber+",超出了区间上限。");
                             }
                             else
                             {
                                 max = guessNumber-1;
                                 System.out.println("太可惜了,您在第" + count + "次猜大了,请继续:");
                             }
                         }
                         //小于判断,将min+1的目的是为了更加精准范围
                         else if (guessNumber < givenNumber)
                         {
                             //此处是针对输入值超出上限时的一个判断,避免误导玩家
                             if (guessNumber < min)
                             {
                                 System.out.println("太可惜了,您在第" + count + "次输入的数据是"+guessNumber+",超出了区间下限。");
                             }
                             else
                             {
                                 min = guessNumber+1;
                                 System.out.println("太可惜了,您在第" + count + "次猜小了,请继续:");
                             }
                         }
                         //等于判断,并询问是否继续游戏
                         else
                         {
                             System.out.println("太赞了,您花了" + count + "次就猜中了这个随机数," + givenNumber + "。");
                             //是否继续游戏
                             System.out.println("\n输入yes继续挑战,按任意键退出。\n");
                             sc = new Scanner(System.in);
                             String str = sc.nextLine();
                             if ("yes".equals(str))
                             {
                                 continue outer;
                             }
                             else
                             {
                                 System.out.println("欢迎使用猜数字游戏v2.0,再见!\n");
                                 break outer;
                             }
                         }
                     }
                     catch (InputMismatchException e)
                     {
                         System.out.println("您输入的数据有误,请重新输入一个区间内的整数。\n");
                     }
                 }
             }
         }
     }
     public static int getInteger()//对获取的数据进行分析,是整数继续,不是整数就要求重新输入
     {
         while(true)
         {
             Scanner in = new Scanner(System.in);
             int getNum = 0;
             String str = in.nextLine();
             boolean b = true;
             try
             {
                 getNum = Integer.parseInt(str);//如果输入是int类型,则把值转化成整型赋给getNum
             }
             catch(Exception e)//不是整数则让b为false
             {
                 b = false;
             }
             if(b)//如果b是false则要求重新输入
             {
                 System.out.println("您输入的整数是:"+getNum);
             }
             else
             {
                 System.out.println("输入错误,请重新输入一个整数。");
                 continue;
             }
             return getNum;//函数返回用户输入的整数
         }
     }
 }

Java完成简单猜数字游戏v2.0的更多相关文章

  1. Python实现猜数字游戏1.0版

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=702 """ 功能: 随机生成一个数字,最多有3次猜测机会,如果第一次没有猜对,则从第 ...

  2. 【原创Android游戏】--猜数字游戏Version 0.1

    想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...

  3. java web 程序---猜数字游戏

    思路:1.第一个是随机产生的数字,告诉我们去猜  cai.jsp 2.第二个是一个form表单,提交按钮后,将连接到验证页面 test1.jsp 3.第三个是比较猜的数和随机数.对了,提示再玩一次,不 ...

  4. 复习java逻辑---实现猜数字游戏

    package shopping; import java.util.*; public class SendGiftMenu { public static void main(String[] a ...

  5. java web 程序---猜数字游戏的猜了多少次的代码

    思路:用setAttribute()放 ,然后直接输出 Integer str=(Integer)session.getAttribute("count"); int num3= ...

  6. java使用for循环做猜数字游戏

    package org.llh.test;import java.util.Random;import java.util.Scanner;/** * 猜数字游戏 *  * @author llh * ...

  7. java & python猜数字游戏对比

    1.java版 package day03; import java.util.Random;import java.util.Scanner; /** * 猜数字游戏 * 随机生成一个1-100之间 ...

  8. 通过游戏学python 3.6 第一季 第一章 实例项目 猜数字游戏--核心代码 可复制直接使用 娱乐 可封装 函数

    本文实例讲述了python实现的简单猜数字游戏.分享给大家供大家参考.具体如下: 给定一个1-99之间的数,让用户猜数字,当用户猜错时会提示用户猜的数字是过大还是过小,知道用户猜对数字为止,猜对数字用 ...

  9. Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util

    Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util,导入包的方法为,import java.util.*: 完整的实例代码: /* 导入基础工具包 */ import java.uti ...

随机推荐

  1. 背景图height:100%显示

    这段时间,写移动端页面,总是遇到背景图在不同的设备上的显示拉伸问题: 本来想写百分比,可是并没有显示,又不想media@ ,换一种思路用img写 群友提供了一个办 html,body{height:1 ...

  2. EF6的多线程与分库架构设计实现

    1.项目背景 这里简单介绍一下项目需求背景,之前公司的项目基于EF++Repository+UnitOfWork的框架设计的,其中涉及到的技术有RabbitMq消息队列,Autofac依赖注入等常用的 ...

  3. HDU 2520 我是菜鸟,我怕谁

    我是菜鸟,我怕谁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  4. 属性——AddComponentMenu

    字面理解:添加 组件选项菜单 分析:可能是添加一个脚本或者组件到一个物体上 验证: 新建一个脚本:AttributeTest 提示:添加一个组件菜单属性,允许你放一个脚本在Compoent菜单下,来代 ...

  5. shell编程其实真的很简单(五)

    通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...

  6. Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )

    一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...

  7. DLL 导出函数

    DLL的链接方式分为两种:隐式链接和显式链接 DLL导出的函数 和 导出类在调用时,有些区别,这里暂时不讲,直说简单的导出函数: 隐式链接: #include "stdafx.h" ...

  8. javase基础回顾(二)LinkedList需要注意的知识点 阅读源码收获

    我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...

  9. devexpress表格控件gridcontrol实现纵向标头

    1.devexpress控件gridcontrol中的标头默认是横向的,如果要实现纵向标头应该怎么做呢.通过官网的资料整理了一个简单的案例,给大家分享一下.运行效果图如下: 2.数据绑定代码如下: D ...

  10. 使用jQuery操作DOM

    一.DOM操作分为3类 1.DOM Core DOM Core不是Javascript的专属品,任何一种支持DOM的编程语言都可以使用它.它的用途不仅限于处理一种使用标记语言编写出来的文档 2.HTM ...