第二章 第一个游戏
系列教程导航2.3 Java基础三 简单计算器的改进
2.3.1 上篇
文章目录
出问题了
在上一节,我们开发了一个非常简单的计算器。它可以计算给定的两个整数的和/差/积/商,并把结果打印在控制台上。这一节,我们会进一步地改进这个计算器,同时在这个例子中讲解Java运行过程中流程控制的一些知识。
现在我们来思考一个非常特殊的情况:第二个给定的数是0。这种情况下,在算除法的时候,程序会出现错误,如下图所示:
你可以看到,程序给出了一大串错误信息。其中最关键的应该是第一行的:divide by zero(用零除)。我们显然不希望看到这样的内容。
更加安全和人性化的操作应该是,如果程序检测到第二个数是零,就不去计算除法,并打印自定义的警告信息。
不过,我们目前是不能做到这一点的。因为我们现在写的程序一直都是顺序结构。也就是说,程序会一行一行地执行下去,除了注释的信息之外,所有语句都会被执行到。
这里我将执行程序比做走路。现在这一条路只有一个主干,没有分支。哪怕除数是零,你也得继续走下去,直到掉进坑里,然后大喊救命。我们则希望在走到除法这个关卡之前,首先判断一下除数是不是零。如果不是的话,我们就放心地走有除法关卡的路,如果是的话,我们就走另外一条没有除法关卡的路。
如何实现这种“分岔路口”呢?Java为我们提供了判断结构。使用判断结构,我们就可以实现前面提到的功能。
两种判断结构
if语句有三种格式,它们分别是:
//第一种格式
if(条件表达式)
{
//如果条件表达式的值为true,则执行这一对花括号里的语句(可以有一句或者多句)
执行语句;//当执行语句只有一句时,可以把此处的一对花括号省略
}
//第二种格式
if(条件表达式)
{
//如果条件表达式的值为true,则执行这一对花括号里的语句
执行语句;
}
else
{
//如果条件表达式的值为false,则执行这一对花括号里的语句
执行语句;
}
//第三种格式
if(条件表达式1)
{
//如果条件表达式1的值为true,则执行这一对花括号里的语句
执行语句;
}
else if(条件表达式2)
{
//如果条件表达式2的值为true,则执行这一对花括号里的语句
执行语句;
}
else if(条件表达式3)
{
//如果条件表达式3的值为true,则执行这一对花括号里的语句
执行语句;
}
//省略若干个else if结构,和上面的一模一样
else
{
//如果上面的所有判断全为false,则执行这一对花括号中的语句
执行语句;
}
其中,条件表达式的值都应该是boolean类型(比如前面提到的比较运算符,它们的返回值就是boolean类型)
你还记得上一篇文章提到的三元运算符吗?其实,这就是一个if语句的简写形式。比如:
//定义a,b,c三个int类型的变量,并初始化a和b
int a = 7, b = 2 , c;
//三元运算符
c = (a > b) ? a : b;
//if语句
if(a > b){
c = a;
}else{
c = b;
}
两者的效果是一样的。有的时候,巧用三元运算符可以使程序更简洁。
你发现了吗?在if语句中,我们往往会用到花括号,它们成对出现,并且里面包含了很多代码。你是否还记得前面提到过的变量的生命周期?一般来讲,一个变量的生命周期也就是它所属的这个花括号。也就是说,如果一个变量定义在一对花括号的里面,那么在这对花括号结束的时候,这个变量会被清除掉。这个是需要注意的。
switch语句的格式一般情况下只有一种:
switch(表达式)//此处表达式的类型应该是byte,short,int或者char
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
//此处省略若干个case结构,和上面的一模一样
default:
执行语句;
break;//这一行可以删除
}
你是否注意到了这个关键字:break?在这里,break的作用是结束这个switch语句,也就是说,当程序执行到break的时候,会停止该switch语句的继续执行。
if语句在执行的时候,只会执行满足条件的那一部分语句;而switch语句则会继续判断下一个条件,直到default语句执行结束。如果我们想要在执行完一个分支之后立即结束switch语句,那么就得在这个分支的代码的最后一行写上break;。
一般来讲,switch语句比较少用。但是作为Java的一个基本语句,这是需要掌握的。
if/switch的联系和区别:
- 共同点:都是对具体的值进行判断
- 不同点:
if语句:可以对区间判断,并且对结果是boolean类型的表达式进行判断
switch语句:值的个数是固定的 - if语句的优点:可以使用各种表达式进行灵活判断,往往更加符合我们的需求
- switch语句的优点:如果需要判断的值是几个固定的值,由于switch将具体的答案都加载进内存,判断的时候效率会更高
改进
接下来,让我们来真正动手改进我们的简单计算器吧!这里我会给出两个示例,分别使用了if语句和switch语句,两者的效果是一样的,同时希望你能在自己的AIDE里面实现一次。
执行程序后,结果如下:
终于,我们成功处理了除数是0这个情况,把我们的简单计算器做了一定程度的改进。
后记
在这一篇文章里面,我讲解了Java运行过程中程序流程控制的其中两个知识点:顺序结构和判断结构。下一篇文章我会接着讲循环结构。流程控制是Java编程的重要基础,所以这一部分的知识请你一定要熟练掌握。
感谢你的阅读!本教程会长期不定时更新。本人不是大神,也会犯错,如果有建议或者提问的话,欢迎评论留言!
系列教程导航