Java完成简单猜数字游戏v2.0
猜数字游戏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的更多相关文章
- Python实现猜数字游戏1.0版
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=702 """ 功能: 随机生成一个数字,最多有3次猜测机会,如果第一次没有猜对,则从第 ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- java web 程序---猜数字游戏
思路:1.第一个是随机产生的数字,告诉我们去猜 cai.jsp 2.第二个是一个form表单,提交按钮后,将连接到验证页面 test1.jsp 3.第三个是比较猜的数和随机数.对了,提示再玩一次,不 ...
- 复习java逻辑---实现猜数字游戏
package shopping; import java.util.*; public class SendGiftMenu { public static void main(String[] a ...
- java web 程序---猜数字游戏的猜了多少次的代码
思路:用setAttribute()放 ,然后直接输出 Integer str=(Integer)session.getAttribute("count"); int num3= ...
- java使用for循环做猜数字游戏
package org.llh.test;import java.util.Random;import java.util.Scanner;/** * 猜数字游戏 * * @author llh * ...
- java & python猜数字游戏对比
1.java版 package day03; import java.util.Random;import java.util.Scanner; /** * 猜数字游戏 * 随机生成一个1-100之间 ...
- 通过游戏学python 3.6 第一季 第一章 实例项目 猜数字游戏--核心代码 可复制直接使用 娱乐 可封装 函数
本文实例讲述了python实现的简单猜数字游戏.分享给大家供大家参考.具体如下: 给定一个1-99之间的数,让用户猜数字,当用户猜错时会提示用户猜的数字是过大还是过小,知道用户猜对数字为止,猜对数字用 ...
- Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util
Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util,导入包的方法为,import java.util.*: 完整的实例代码: /* 导入基础工具包 */ import java.uti ...
随机推荐
- IPv4地址学习总结
一. IPv4地址格式 网络互连的一个重要前提条件是要有一个有效的地址结构,并且所有的互连网络用户都应遵守这个地址结构.因为只有这样所有的互连网络用户才能在统一的规定下相互之间通讯.这个地址结构可以有 ...
- ECJTUACM16 Winter vacation training #4 题解&源码
A......................................................................................... 题目链接→Code ...
- Android微信朋友圈全文、收起功能
在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...
- Raid类型
raid0:两块磁盘同时写入raid1:一块磁盘写入,另一块磁盘做备份,利用率50%raid5:两块磁盘同时写入两块磁盘都有内容,第三块磁盘做效应,n/n-1的利用率raid6:四块磁盘两块磁盘做存储 ...
- Phoenix和SQuirrel安装详解
Phoenix安装详解 描述 现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天的主角是Phoenix. phoenix,中文译为“凤凰” ...
- Codeforces Round #396.D
D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...
- SwaggerUI ASP.Net WebAPI2
目前在用ASP.NET的 WebAPI2来做后台接口开发,在与前台做测试的时候,总是需要发送一个demo给他,但是这样很麻烦的,他还有可能记不住. 然后就想到SwaggerUI 生成测试文档. 话不多 ...
- Fiddler教程【转】
阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...
- Javascript面对对象. 第四篇
原型模式创建对象也有自己的缺点,它省略看构造函数传参初始化这一过程,带来的缺点就是初始化的值都是一致的. 而原型最大的缺点就是它优点,那就是共享. 原型中所有属性是被很多实例共享的,共享对于函数非常合 ...
- 为什么使用enable_shared_from_this——shared_ptr两类错误
在使用C++实现弱回调时,订阅者应当维护一系列发布者的weak_ptr,而发布者注册回调时要传出this的shared_ptr指针,流行的实现方法是使用std::enable_shared_from_ ...