《Android游戏开发详解》一1.8 控制流程第2部分——while和for循环
本节书摘来异步社区《Android游戏开发详解》一书中的第1章,第1.8节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.8 控制流程第2部分——while和for循环
Android游戏开发详解
在前面的小节中,我们介绍了使用if和else语句块来产生代码分支。现在,我们来介绍两种类型的循环:while循环和for循环。循环允许我们执行重复性的任务。循环特别重要,没有它们,游戏将无法运行。
1.8.1 while循环
假设你想要编写一个函数打印出所有的正整数,直到达到给定的输入n。解决这个问题的策略(算法)如下。
1. 创建一个新的整型,将其值初始化为1。
2. 如果该整数小于或等于给定的输入n,打印其值。
3. 将该整数增加1。
4. 重复步骤2和步骤3。
我们已经学习了如何执行该算法的前3步。让我们写下已经知道的内容。
程序清单1.18 计数器(非完整版)
1 ????? countToN(int n) {
2 int counter = 1; // 1. Create a new integer, initialize it at 0.
3 if (counter <= n) { // 2. If this integer is less than or equal to the input
4 print(counter); // Print the value
5 counter = counter + 1; // 3. Increment the integer by 1
6 }
7 }
我们必须在代码中解决两个问题。首先,函数应该返回什么类型(通过程序清单1.18的第1行中的问号来表示)?它应该是一个int类型吗?实际上,在我们的例子中,甚至没有一条return语句;该函数并不会产生任何可供我们使用的结果。当没有返回任何值的时候,就像前面的函数那样,我们说返回类型是void。
其次,如何让这段代码重复步骤2和步骤3?这实际上很简单。我们使用一个while循环,只要某个条件能够满足,就会让这个循环保持运行。在我们的例子中,所需要做的只是用关键字“while”替代关键字“if”。完整的函数如程序清单1.19所示(修改的代码突出显示)。
程序清单1.19 计数器(完整版)
1 void countToN(int n) {
2 int counter = 1; // 1. Create a new integer, initialize it at 0.
3 while (counter <= n) { // 2. If this integer is less than or equal to the input
4 print(counter); // Print the value
5 counter = counter + 1; // 3. Increment the integer by 1
6 }
7 }
让我们一行一行地来看看该函数(参见程序清单1.19)。
第1行声明了函数的返回类型(void)、函数名称(countToN)和输入(n)。
第2行声明了一个名为counter的新的整型,并且将其值初始化为1。
第3行开始一个while循环,只要条件(counter <= n)满足,它就会运行。
第4行打印出counter变量的当前值。
第5行将counter增加1。
当到达第5行的时候(第6行的花括号表示循环结束),代码将再次执行第3行。这里会重复,直到counter变得比n大,此时,会跳出while循环。要看看这是如何工作的,让我们在代码中的任意地方调用该函数。
print(“Initiate counting!”);
countToN(5); // Call our countToN() function with the argument of 5.
print(“Counting finished!”);
相应的输出如下所示。
Initiate counting!
1
2
3
4
5
Counting finished!
这就是while循环。只是编写一条if语句,并且将关键字“while”放到那里,代码就可以重复一项任务了。
关键知识点
while循环
只要给定的条件计算为true,while循环就将继续迭代。如果我们有一个条件总是为true,例如,while (5 > 3) …,while循环将不会结束。这就是一个无限循环。
1.8.2 for循环
程序清单1.19中的计数逻辑的使用如此频繁,以至于人们为此专门设计了一个循环。它叫作for循环。for循环的语法考虑到了各种问题的较为整洁的解决方案,使得我们能够节省代码行。如图1-6所示。
for循环需要做3件事情。必须初始化计数器变量,设置终止条件,然后定义一个自增表达式。该循环将持续迭代(重复),直到终止条件计算为假(在上面的示例中,就是直到i大于6)。每次迭代之后,i都会按照自增表达式中给出的规则来递增。
在程序清单1.19中使用一个for循环来计数重新编写代码的话,可以得到程序清单1.20。
程序清单1.20 计数器(for循环版)
1 void countToN(int n) {
2 for (int i=1; i<=n; i++) {
3 print(i);
4 }
5 }
一旦掌握了语法,编写for循环比编写while循环要快很多。for循环很快将会变为我们的无价之宝,并用来干从移动精灵到渲染动画的每一件事情。
《Android游戏开发详解》一1.8 控制流程第2部分——while和for循环相关推荐
- 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...
本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...
- 《Android游戏开发详解》一2.16 区分类和对象
本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.16节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社 ...
- 《Android游戏开发详解》一3.1 构造方法
本节书摘来异步社区<Android游戏开发详解>一书中的第3章,第3.1节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...
- 《Android游戏开发详解》一导读
前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...
- 《Android游戏开发详解》——第3章,第3.1节构造方法
本节书摘来自异步社区<Android游戏开发详解>一书中的第3章,第3.1节构造方法,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区& ...
- 《Android游戏开发详解》一2.18 使用Java API中的对象
本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.18节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.1 ...
- 《Android游戏开发详解》——第2章,第2.10节使用对象
本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.10节使用对象,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区 ...
- 《Android游戏开发详解》一2.2 设置开发机器
本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.2节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...
- 《Android游戏开发详解》一2.9 类
本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.9节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...
- 《Android游戏开发详解》一1.1 什么是编程
本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.1节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.1 ...
最新文章
- 机器人陪你玩“谁是卧底游戏
- NAT的extendable参数,使得一个地址被不同接口NAT出去测试
- HTML<div>标签、<img>标签
- 《SpringCloud超级入门》使用Eureka编写服务提供者《十》
- Java校招笔试题-Java基础部分(二)
- 操作系统linux入门,Linux操作系统基础(一)
- MultiThread
- 最大功率追踪点 matlab光伏,光伏阵列最大功率点跟踪(范文1)
- 迅捷pdf虚拟打印机怎么安装使用
- qq四国军旗2.1 beat03 builde018记牌器开发思路(四)
- 基于matlab的运动目标检测
- 十大管理之项目进度管理知识点
- 螺旋无限延伸_无限螺旋篇 其之八(一)
- Python 3 《dictionary》入门练习
- android 小游戏心得、,iOS/安卓版《辐射:避难所(Fallout Shelter)》攻略心得:玩法要点详解与心得技巧...
- php 执行定时任务.
- 数学基础task04 一元函数微分学的几何应用
- BCELOSS和MSELOSS区别(pytorch BCELoss and MSELoss)
- 浅谈 SIM-OTA
- 华为内部存储转sd卡_怎样把华为手机内存的东西传、转到SD卡中呢
热门文章
- Newtonsoft.Json 方法使用()
- grootJsAPI文档
- Retrofit的使用教程(二)
- Javascript调用后台方法
- NET4.0新功能之String.IsNullOrWhiteSpace() 方法
- Zabbix Lack of free swap space
- .NET简谈组件程序设计之(渗入序列化过程)
- 给异地服务器远程ssh重装CentOS系统
- as, idea 出现 Gradle's dependency cache may be corrupt 错误分析
- 131. 分割回文串