第二章 第一个游戏
系列教程导航2.3 Java基础三 简单计算器的改进
2.3.2 下篇
文章目录
幂
目前为止,我们的简单计算器只支持加减乘除四种运算,比较少。那么我们可不可以开发更多的运算?当然可以了。接下来,我们就来一步一步地开发幂运算这一个功能,给计算器升级。
为了突出本节的重点内容,我们此处的幂运算仅限于指数和底数都是正整数的情况。
接下来我们来分析一下如何实现幂运算的功能。
需求:给定整数m和n,然后计算m的n次幂,并打印在控制台上。
根据幂的定义,我们知道,m的n次幂其实就是是n个m相乘。但是,以我们目前学习的知识是无法完成这个任务的。
我们不禁进一步思考,如何完成n个m相乘这一操作呢?一个很合理的想法是,我们可以把n个m相乘这一步操作进行分解,例如:
4的3次幂,也就是计算4*4*4
第零步,我们不妨将结果记录在变量a中,并把初始值设为1;
第一步,把a的值乘4,然后把结果赋给a,此时a的值为4;
第二步,把a的值再乘4,然后把结果赋给a,此时a的值为4*4;
第三步,把a的值再乘4,然后把结果赋给a,此时a的值为4*4*4。
不知道你发现没有,步骤一,二,三其实是同一个操作。如果我们按照顺序结构来写上面的程序,我们就会写下三排完全一样的代码。但是这显然是不合理的(3行还比较少,万一要重复很多行呢)。这时,一个无比自然的想法就诞生了:将一句或者几句代码循环执行。比如上述操作如果用循环的思想来看的话,就只有两步:
第零步,我们不妨将结果记录在变量a中,并把初始值设为1;
第一步,把a的值乘4,然后把结果赋给a,并循环3次。
我们当然也可以在Java程序里面使用循环结构。所以说,幂运算可以用循环结构来实现。
接下来,你就会学习到Java的三种循环结构:
三种循环结构
while语句的格式如下:
while(条件表达式)
{
执行语句;
}
//其中条件表达式的值是boolean类型
//花括号及里面的执行语句可以看作一个整体,叫做循环体
while语句的执行过程是,首先计算条件表达式,如果结果为true,就接着执行循环体,执行完之后,回到条件表达式,重复刚才的步骤;如果结果为false,就跳过循环体,循环结束。
为了理解起来更容易,我们来分析一下这一段代码:
int i = 0;
while(i < 2){
i++;
}
System.out.println(i);
首先,我们定义了一个整数类型的变量i,并指定初始化的值为0;
接下来,执行while循环语句,由于i<2的结果是true,所以执行循环体,i自增1,i的值变为1。回到条件表达式;
i<2的结果依然是true,故再次执行循环体,i自增,i的值变成2。回到条件表达式;
此时i<2的结果是false,循环结束。最后执行打印语句,将i的值打印出来
do while语句的格式如下:
do
{
执行语句;
}while(条件表达式);
System.out.println(i);
do while语句的执行过程是,首先执行循环体里面的代码,执行结束之后再计算条件表达式,接下来的步骤就和while语句差不多了。do while语句和while语句的区别在于,do while语句一定会把循环体至少执行一次,而while语句则可能根本不执行循环体。
下面我同样给出一段代码,帮助你理解do while语句:
int i = 0;
do{
i++;
}while(i < 2);
System.out.println(i);
首先,我们定义了一个整数类型的变量i,并指定初始化的值为0;
接下来,执行do while循环语句,i自增1,i的值变成1。此时i<2的结果为true,所以再次执行循环体;
i自增1,i的值变成2。此时i<2的结果为false,所以循环结束;
最后执行打印语句,把i的值打印出来
for语句的格式如下:
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;
}
for语句的结构看起来就比较复杂了。它的执行过程是,首先执行初始化表达式,如果结果为true,则执行循环体,执行完毕后,再执行括号里的最后一个表达式,然后再一次计算条件表达式;如果结果为false,则退出循环。
以下是示例代码:
for(int i = 0 ; i < 2 ; i++){
System.out.println(i);
}
首先执行初始化表达式,定义了一个整数类型的变量i,初始值为0;
接下来计算i<2,结果为true,所以执行循环体,并打印i的值0;
执行循环后的操作表达式,i自增1,计算i<2,结果为true,所以执行循环体,并打印i的值1;
执行循环后的操作表达式,i自增1,计算i<2,结果为false,所以退出循环,同时变量i的生命周期结束。
由于上述过程可能有点复杂,所以我画了一个简单的示意图。程序从①处开始执行,语句旁的序号代表该语句的执行顺序。
for语句的括号里面有三条语句,用分号隔开。不过,它们都不是必须要写的。你可以随便把若干条语句空着不写。
while语句和for语句的比较
- for和while是可以互换的
- 如果需要通过一个临时性的变量来控制循环,循环结束后该变量就没用了,那么建议使用for语句。因为for循环结束后,该变量的生命周期就结束了,它所占据的内存也就会被释放出来
有关循环的关键词有两个:break和continue
- break:(你想起来了吗,之前在switch语句中也出现过break)作用是直接结束当前循环
- continue:作用是直接结束这一轮循环并继续执行下一轮循环
无限循环有两种最简单的格式:while(true){}和for( ; ; ){}。
无限循环是很危险的,因为这会使程序一直卡在某个位置,从而引发错误。所以当我们写下一个循环的时候,请一定注意循环是否可以结束。
有的时候,使用break强行退出循环是很有用的
升级
有了前面的知识后,我们终于可以使简单计算器实现幂运算了。这里我们假设给定的数字分别是底数和指数。
根据第一部分的讲解,相信你可以很快写出幂运算的代码。建议自己尝试之后,再看下面的实现:
while语句实现
注意变量i在循环结束之后依然存在,这浪费了内存。所以此处我推荐使用使用for语句。
for语句实现
后记
通过自己实现正整数的幂运算,我们可以很好的掌握循环结构的知识。事实上,Java里是有内置的幂运算功能的,以后你就会了解到。
如果在程序里面要用到幂运算的话,我们直接使用Java自带的功能就好了,不用自己去实现。这样可以使代码更简洁,而且Java内置的幂运算比我们的幂运算要严谨和强大的多。
有关程序流程控制的知识到此结束。上一节和这一节我们分别学习了判断结束,构和循环结构。程序流程控制的知识非常重要。它们和顺序结构结合在一起,就可以实现很多强大的功能,你会在以后的学习中进一步体验到。
感谢你的阅读!本教程会长期不定时更新。本人不是大神,也会犯错,如果有建议或者提问的话,欢迎评论留言!
系列教程导航