网站首页 > 基础教程 正文
3.8.4 确定性循环
for 循环语句是支持迭代的一种通用结构,它由一个计数器或类似的变量控制迭代次数,每次迭代后这个变量将会更新。如图 3-12 所示,下面的循环将在屏幕上显示出打印数字1 ~ 10:
for(int i=1;i<=10;i++)
System.out.println(i);
for 语句的第 1 部分通常是对计数器初始化;第 2 部分给出每次新一轮循环执行前要检测的循环条件;第 3 部分指定如何更新计数器。
与 C++ 类似,尽管 Java 允许在 for 循环的各个部分放置任何表达式,但有一条不成文的规则:for 语句的 3 个部分应该对同一个计数器变量进行初始化、检测和更新。若不遵守这一规则,所写的循环很可能晦涩难懂。
即使受这个规则所限,仍有无尽可能,你可以写各种各样的 for 循环。例如,可以编写下面这个倒计数的循环
for (int i =0;i>0; i--)
System.out.println(“Counting down ... ” + i);
System.out.println(“Blastoff!”);
警告:在循环中,检测两个浮点数是否相等需要格外小心。下面的for 循环:
for(double x=0; x!=10;x+= 0.1)
System.out.println(x);
可能永远不会结束。由于存在舍入误差,可能永远达不到精确的最终值。在这个例子中,因为0.1 无法精确地用二进制表示,所以,x 将从9.99999999999998 跳到 10.09999999999998
在for 语句的第1部分中声明一个变量之后,这个变量的作用域会扩展到这个for 循环体的末尾。
for(int i =1 ; i <= 10 ;i ++){ ... } // 大括号之外,i 不再有效
特别指出,如果在for 语句内部定义一个变量,这个变量就不能在循环体之外使用。因此,如果希望在for 循环体之外使用循环计数器的最终值,就要确保在循环体之外声明这个变量。
int i;
for(i = 1; i <=10;i++) {...}
另一方面,可以在不同的for 循环中定义同名的变量
for(i = 1; i <=10;i++) {...}
for(i = 1; i <=20;i++) {...}
for 循环语句只是 while 循环的一种简化形式。例如,
for ( int i =10 ; i >0 ; i --){
System .out.println(“Counting down ... ” + i);
}
可以重写为:
int i =10;
while(i >0){
System.out.println(“Counting down ... ” + i);
i--;
}
程序清单 3-5 (LotteryOdds) 给出了一个 for 循环的典型示例。
这个程序用来计算抽奖的概率。例如,如果从 1 ~ 50 的数字中取6个数字来抽奖,那么会有 (50 * 49 * 48 * 47 * 46 * 45) / (1* 2 * 3 * 4 * 5 * 6)种可能的结果,所以中奖的概率是 1/ 158907000 。祝你好运!
一般情况下,如果从 N 个数字中 抽取 K 个数字, 就会有 n * (n -1) * (n -2) * ... (n = k +1) / ( 1 *2*...*k) 种可能。下面的for 循环 可以计算这个值:
int lotteryOdds = 1;
for ( int i = 1; i <= k ; i++)
lotteryOdds = lotteryOdds * (n - i + 1) / i ;
注释 : 3.10.3 节将会介绍“泛型 for 循环” (又称为 for each 循环),利用这个循环可以很方便地访问一个数组或集合中的所有元素。
附
package corejava.chapter3.lession8;
import java.util.*;
/**
* This program demonstrates a <code>for</code> loop.
* @version 1.20 2004-02-10
* @author Cay Horstmann
*/
public class LotteryOdds
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("How many numbers do you need to draw? ");
int k = in.nextInt();
System.out.print("What is the highest number you can draw? ");
int n = in.nextInt();
/*
* compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
*/
int lotteryOdds = 1;
for (int i = 1; i <= k; i++)
lotteryOdds = lotteryOdds * (n - i + 1) / i;
System.out.println("Your odds are 1 in " + lotteryOdds + ". Good luck!");
}
}
- 上一篇: FOR循环的用法分享 for循环的讲解
- 下一篇: C 语言 for 循环的妙用和陷阱,你知道多少?
猜你喜欢
- 2024-10-19 C语言中的`for`关键字是一种循环控制结构
- 2024-10-19 写给所有人的编程思维-循环篇(for循环)
- 2024-10-19 在PLC编程中,循环语句FOR和WHILE怎么选?
- 2024-10-19 C语言for循环基本流程 c语言for循环程序
- 2024-10-19 C++20尝鲜:基于范围for c++ 范围for
- 2024-10-19 BAT批处理命令之for bat文件中for用法
- 2024-10-19 C语言for循环解析 c语言中for循环
- 2024-10-19 Java Web实战篇:增强for循环实现原理及for循环实战性能优化
- 2024-10-19 1分钟教你学会for循环 for循环教程
- 2024-10-19 C++阶乘:一个数的阶乘和一个范围的阶乘之和
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)