这节课我们来学习新的控制结构——循环结构。那么我们已经学会使用顺序结构来让机器按部就班的解决问题;也学会了使用选择结构来让机器在特定条件下做某些事情。那么如果我们遇到了这样一个问题:
假设你需要打印一个字符串(例如:“Welcome to Java!”)100次。这就需要把下面的输出语句重复100遍,过程是相当繁琐:
System.out.println(“Welcome to Java!”);
所以,该如何解决这个问题?
今天的循环结构就是帮我们解决一个重复问题。
while语句
我们先来学习循环结构中的while语句。
while语句的语法结构为:
while (布尔表达式)
{
循环体
}
用流程图表示为:
语句含义:当布尔表达式为ture时,重复执行循环体。
注意:
在循环控制中,不要使用浮点数来比较值是否相等。**因为浮点值是某些值的近似值,所以使用它们可能导致不精准的循环次数和不准确的结果。**考虑下面计算1+0.9+0.8+…+0.1的代码:
double item = 1;double sum = 0;
while(item !=0){
//No guarantee item will be 0
sum +=item;
item -=0.1;
}
System.out.println(sum);
变量item从1开始,每次执行循环体就减少0.1。当item变为0时循环应该终止。但是,因为浮点运算结果是近似的,所以无法保item会变成真正的0。从表面上看,这个循环似乎没有问题,但它实际上是一个无限的死循环。
do…while语句
这是while循环,与其对应的有一个do…while循环。do…while语句和while语句非常的相似,do…while的语法结构为:
do {
循环体
}while(布尔表达式);
它的流程图结构为:
语句含义:重复执行循环体,直到布尔表达式为false。
比较while与do-while语句
两种都是循环,不同的是,前者是先判断条件后执行,后者是先执行再判断条件。这就造成了while语句最少可以执行零次循环体,而do-while语句无论条件是否成立至少要执行一次循环体。
【示例:猜数字】
编写一个程序,随机产生一个0到100 之间且包含0和100的整数。程序提示用户连续输入数字,直到用户输入的数字和计算机随机产生的数字相匹配为止。对用户的每次输入的数字,程序都提示用户输入值偏大还是偏小,这样用户就可以明智的进行下一轮的猜测。
emmm…在家无聊运行这个程序玩玩还是蛮有意思的
运行代码:
import java.util.Scanner;
public class _3_9_CaiShuZi {
public static void main(String[] args) {
//1.随机产生一个0到100之间且包含0和100的整数。
int key = (int)(Math.random() * 101);
//2.用户猜数字
Scanner sc = new Scanner(System.in);
int answer = -1;
while(answer != key) {
System.out.print("请输入一个0到100之间且包含0和100的整数:");
answer = sc.nextInt();//用户输入猜测的数字
if(answer == key) {
//用户猜对了。输入数字和随机数相等
System.out.println("恭喜你!随机数字就是"+key);
}else if (answer > key) {
System.out.print("输入值偏大!");
}else {
System.out.print("输入值偏小!");
}
}
sc.close();//关闭12行的输入流,养成好习惯。
}