咖啡馆 java游戏_Java咖啡馆(6)——编写猜数字游戏

举个具体的例子来熟悉一下。猜数字游戏需要从控制台获取玩家输入的数字。我们先定义一个整型变量:

int guess;

然后就可以编写如下代码:

guess = Integer.parseInt(input.readLine());

通过input.readLine从控制台读取输入,并且用Integer.parseInt把获取的字符串类型的输入转换成整型,然后赋给guess变量。

Eclipse又给你脸色看了——input.readLine()下面划上了红线(见图3)。

efd1ef2a6cb410f8176592c5e4d74152.png

看看提示,原来是未处理异常句柄。

原来,Java有一种异常称作检查型异常(Checked Exceptions)。一般数组越界、除以零等等都是运行时异常,由于数量众多,Java允许你不必亲自捕捉每个这样的异常,而全权交给运行时环境去处理。但检查型异常就不一样了,Java把检查型异常提升到与参数、返回值同样的高度,也就是说,检查型异常你非处理不可,并且在javadoc中必须加以注释。

那么怎样快速地捕捉这样的异常呢?按照如图3所示,用鼠标点击带有红叉的灯泡图标,在弹出菜单上选择Surround with Try/Catch,异常处理代码模块立即自动生成了。可以发现,这一句话将抛出两个异常:一个是格式异常(NumberFormatException),因为如果你用Integer.parseInt去转换一个汉字,自然是不可能的。另一个便是I/O异常,即标准输入可能会出现不可预料的问题。怎么样,连异常都能够自动捕捉,这就是Eclipse的魅力!

需要说明的是,NumberFormatException并不是检查型异常,而是一个不必刻意捕捉的运行时异常。试试看把捕捉NumberFormatException的那个catch语句块全部删除,Eclipse也不会报错。不过,捕捉这个异常很有实用价值,后文的代码会进一步展示它的作用。

小提示

使用异常机制的诸多好处

★使得程序更健壮,界面更友善。

★把程序的业务逻辑与错误处理分开,代码更合理,更美观。

★异常可以分层次处理,使得代码更简洁。

★同类的异常可以归到一类一起处理,处理更方便。

Java的异常处理机制是一个很大的话题,这里仅仅是展示了冰山一角,以实用为主,希望你能够自行阅读扩展知识,并且在编写代码过程中注意体会。

while循环控制

上回的Java咖啡馆介绍了for循环语句,这回需要介绍一个它的“亲戚”语句——while语句。

while语句的语法是:

while ( expression ) {

statement(s)

}

首先,while语句判断返回一个布尔值的expression表达式,如果返回值为true,则执行下面语句,之后再测试expression表达式再执行语句,以此往复,直到expression表达式返回false为止。

do-while语句与while语句非常相似,语法是:

do {

statement(s)

} while ( expression );

与while语句在循环顶部判断表达式真假值不同,do-while语句在底部判断,从而,do-while语句至少执行一次内部的代码。

下面看看猜数字游戏的主体部分:

// 记录玩家猜测的次数

int counter = 0;

System.out.println("我心里有一个0到99之间的整数,你猜是什么?");

do {

try {

// 获取玩家的输入

guess = Integer.parseInt(input.readLine());

} catch (NumberFormatException e) {

// 如果玩家不是输入一个合法的整数,则让他重新输入

System.out.println("请输入一个0-99之间的整数!");

continue;

} catch (IOException e) {

System.out.println("程序发生异常错误将被关闭!");

e.printStackTrace();

}

// 对玩家的输入进行判断

if (guess > number)

System.out.println("大了点,再猜!");

if (guess < number)

System.out.println("小了点,再试试!");

// 计数器增加一

counter++;

} while (guess != number);

首先定义了一个counter变量来记录玩家猜测的次数,并直接初始化为0。在打印一行游戏提示以后,便开始一个do-while语句。

在do-while语句中,首先用异常处理语句获取玩家的输入,如果玩家输入不合法,提示以后用continue语句从头重新执行循环语句,等待玩家的输入。从而,guess变量一定包含一个合法的整数。之后要对玩家的输入进行判断。如果玩家的猜测太大或者太小,都做出提示。接着把计数器增加1,表示玩家做过一次猜测。最后便是do-while语句的判断:当玩家猜测的数字和随机产生的答案不同,则再次进入循环,否则便结束循环,执行下面的代码。

最后提醒一句,别忘记用Eclipse的Alt+/快捷键帮助编写do-while语句哦!

switch语句

switch语句是基于整型表达式的条件判断语句,猜数字用它来进行成绩判断:

// 判断成绩

switch (counter) {

case 1:

System.out.println("东渐……快来看上帝……");

break;

case 2:

case 3:

case 4:

case 5:

case 6:

case 7:

System.out.println("这么快就猜对了,你很smart啊!");

break;

default:

System.out.println("猜了半天才猜出来,小同志,尚须努力啊!");

break;

}

可以看出,switch语句是和若干case语句和一个default语句搭配使用的。代码中的switch语句用counter变量的值进行判断。当counter的值为1时,便执行case 1里面的语句,即打印“东渐……快来看上帝……”的字样,随后的break语句表示整个switch语句执行到这里结束了。当counter的值为2时,便执行case 2里面的语句。可以发现case 2到case 6都没有break语句,这表示依次执行下面的语句,从而counter的值为2至7时,都打印“这么快就猜对了,你很smart啊!”字样。当counter的值不是1至7时,便执行default语句,打印鼓励的话语。

Just Do It

想想看怎样编写一个会玩猜数字游戏的Java程序呢?

小结

这是Java咖啡馆开张以来最漫长的一回,涉及的知识面很广,希望你能够感到充实而不是烦琐。此外,自己动手编写几个小程序是最好的练习方法。Eclipse是良师益友,有什么问题都会及时通知你,有时还会附上解决方法,希望你善加利用,不要辜负一片心意哦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值