本节书摘来异步社区《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循环相关推荐

  1. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

  2. 《Android游戏开发详解》一2.16 区分类和对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.16节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社 ...

  3. 《Android游戏开发详解》一3.1 构造方法

    本节书摘来异步社区<Android游戏开发详解>一书中的第3章,第3.1节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  4. 《Android游戏开发详解》一导读

    前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...

  5. 《Android游戏开发详解》——第3章,第3.1节构造方法

    本节书摘来自异步社区<Android游戏开发详解>一书中的第3章,第3.1节构造方法,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区& ...

  6. 《Android游戏开发详解》一2.18 使用Java API中的对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.18节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.1 ...

  7. 《Android游戏开发详解》——第2章,第2.10节使用对象

    本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.10节使用对象,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区 ...

  8. 《Android游戏开发详解》一2.2 设置开发机器

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.2节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  9. 《Android游戏开发详解》一2.9 类

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.9节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  10. 《Android游戏开发详解》一1.1 什么是编程

    本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.1节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.1 ...

最新文章

  1. 机器人陪你玩“谁是卧底游戏
  2. NAT的extendable参数,使得一个地址被不同接口NAT出去测试
  3. HTML<div>标签、<img>标签
  4. 《SpringCloud超级入门》使用Eureka编写服务提供者《十》
  5. Java校招笔试题-Java基础部分(二)
  6. 操作系统linux入门,Linux操作系统基础(一)
  7. MultiThread
  8. 最大功率追踪点 matlab光伏,光伏阵列最大功率点跟踪(范文1)
  9. 迅捷pdf虚拟打印机怎么安装使用
  10. qq四国军旗2.1 beat03 builde018记牌器开发思路(四)
  11. 基于matlab的运动目标检测
  12. 十大管理之项目进度管理知识点
  13. 螺旋无限延伸_无限螺旋篇 其之八(一)
  14. Python 3 《dictionary》入门练习
  15. android 小游戏心得、,iOS/安卓版《辐射:避难所(Fallout Shelter)》攻略心得:玩法要点详解与心得技巧...
  16. php 执行定时任务.
  17. 数学基础task04 一元函数微分学的几何应用
  18. BCELOSS和MSELOSS区别(pytorch BCELoss and MSELoss)
  19. 浅谈 SIM-OTA
  20. 华为内部存储转sd卡_怎样把华为手机内存的东西传、转到SD卡中呢

热门文章

  1. Newtonsoft.Json 方法使用()
  2. grootJsAPI文档
  3. Retrofit的使用教程(二)
  4. Javascript调用后台方法
  5. NET4.0新功能之String.IsNullOrWhiteSpace() 方法
  6. Zabbix Lack of free swap space
  7. .NET简谈组件程序设计之(渗入序列化过程)
  8. 给异地服务器远程ssh重装CentOS系统
  9. as, idea 出现 Gradle's dependency cache may be corrupt 错误分析
  10. 131. 分割回文串