Java的while循环
目录
什么是循环语句
循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。
程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环。
软件中有许多重复的动作:
(1)音乐软件循环播放某一首歌
(2)社交软件向多人发送同一条信息
(3) 数学软件累加求和,累加求积。
循环语句就是程序语言解决这种重复性计算的一种手段。
比方说,案例:计算1+2+3+……+10
除了用数列公式外,完全可以让计算机做100次循环累加。因为计算机的特点是计算速度非常快,我们让计算机循环一亿次也用不到1秒,所以很多计算的任务,人去算是算不了的,但是计算机算,使用循环这种简单粗暴的方法就可以快速得到结果。
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; sum =sum+1; sum =sum+2; sum =sum+3; sum =sum+4; sum =sum+5; }
但是这样写法太麻烦,在程序语言中我们更愿意这样写:
public class Sum { public static void main(String[] args) { // TODO Auto-generated method stub int i = 1; int sum = 0; while(i < 11 ){ sum = sum + i;//程序不断的求和 i++;//数字不断的增加 } System.out.println("sum="+sum); } }
while循环
语法格式
- while循环的语法格式如下:
[初始化语句] while (判断条件) { 循环体语句块 [迭代语句] }
语句组成
循环语句一般包含如下4个部分:
- 初始化语句:在循环开始之前进行变量初始化的语句,对循环中用到的变量进行赋值。
- 循环条件:这是一个布尔表达式,这个表达式能决定是否执行循环体。
- 循环体:这个部分是循环的主体,是满足循环条件的情况下,将被反复执行的语句。
- 迭代语句:主要负责每次循环体执行结束后,对循环变量进行更新。
这四个部分只是一般性的分类,并不是每个循环中都非常清晰地分出了这四个部分。
public class Sum { public static void main(String[] args) { // TODO Auto-generated method stub int i = 1; int sum = 0; while(i < 11 ){ sum = sum + i;//程序不断的求和 i++;//数字不断的增加 } System.out.println("sum="+sum); } }
执行顺序
为了描述方便,我们把初始化语句、循环条件语句、变量更新语句 分别命名为 A,B,C
语句A; while(语句B){ 循环体; 语句C; }
其中,语句A在整个循环过程中,只会执行一次;语句B必须是布尔类型的表达式(当然也可以不写,如果写就必须是布尔类型表达式),通过该布尔表达式去判断是否继续执行循环体;语句C会在每次循环结束后执行,也就是说,循环体执行多少次,语句C就会执行多少次。
那么语句的执行顺序是:
语句A→(语句B → 循环体 → 语句C)→(语句B → 循环体 → 语句C)→ ... →退出循环
- while循环每次执行循环体之前,先对变量进行初始化,然后对判断条件(也就是循环条件)求值,如果循环条件为true,则运行循环体部分。从上面的的语法格式来看,迭代语句一般位于循环体的最后,因此只有当循环体能成功执行完成时,while循环才会执行迭代语句。
- 例如:计算1+2+3+4+...+10
- 练习:使用while循环计算1累加至1000。
- 练习:求10的阶乘。10!= 1x2x3x…..x10。。
实例:while 循环简单应用
循环播放歌曲
package task4; public class While { public static void main(String[] args) { // TODO Auto-generated method stub int i=0; while(i<5) { System.out.println("世上有朵美丽的花"); System.out.println("那是青春吐芳华"); System.out.println("。。。"); i++; } } }
群发拜年短信
String [] menu = {"同学甲","同学乙","同学丙","好友A","好友丙"}; int j=0; while(j<5){ System.out.println(menu[j]+" 新年快乐 !小王给您拜年了 !"); j++; }
进行科学计算
什么是斐波那契数列,1,1,2,3,5,8,13...所有的数列的值都是前一项和前一项的前一项的加和,也就是f(n) = f(n-1) + f(n-2)这样一个数列就是斐波那契数
int a=1,b=1; while(a<1000 && b<1000) { System.out.print(a+" "+b+" "); a=a+b;//新的a 等于旧a + 旧b b=a+b;//新的b 等于旧a + 旧b }
练习:2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
int i = 2006;double sum=8; while(sum<20) { sum=sum+sum*0.25; //i++;这一句可以省略 } System.out.println(i+"年将达到20万");
循环输入信息
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int score;String s; int i=0; while(true) {//循环条件为true,永远执行 System.out.println("请输入同学的成绩:"); s=input.next(); if(s.equals("q")) {//当输入‘q'时,执行break语句跳出循环, break; }else {//当输入其他值时打印成绩 score=Integer.valueOf(s); System.out.println("同学的成绩为:"+score); } i++;//由于这里的while循环不限定次数,也不计数,因此这里的i++也可省略 } System.out.println("录入完毕"); input.close(); } }</nowiki>
问题:面馆点单程序
- 列出菜单,让顾客选择,无限次重复以上过程。
头脑风暴:增加一个功能:无限循环,按q退出。
例 面馆程序: <nowiki> package test; import java.util.Scanner; public class a7 { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc = new Scanner (System.in); while (true){ System.out.println("客观,请问您需要什么面:"); System.out.print("1.刀削面\n2.蛋黄面\n3.玉米面\n4.牛筋面\n5.幸福小丸仔面\n"); int m = sc.nextInt(); switch (m){ case 1: System.out.println("您选择的是刀削面"); break; case 2: System.out.println("您选择的是蛋黄面"); break; case 3: System.out.println("您选择的是玉米面"); break; case 4: System.out.println("您选择的是牛筋面"); break; case 5: System.out.println("您选择的是幸福小丸仔面"); break; default: System.out.println("对不起 输入错误"); break; } } } }
深入:关于while循环的几点讨论
死循环
- 使用while循环时,一定要保证循环条件有编程false的时候,否则这个循环将成为一个死循环,永远无法结束这个循环。例如:
public class WhileTestTwo { public static void main(String[] args) { // 下面是一个死循环 int count = 0; // 当count小于10时,执行循环体 while(count < 10) { System.out.println("五环之歌第 "+count+" 遍!"); //迭代语句 count--; } System.out.println("永远无法跳出的循环体"); } }
- 在上面的代码中,count的值越来越小,这将导致count值永远小于10,count<10循环条件一直为true,从而导致这个循环永远无法结束。
由于while循环 的次数有时并不确定,因此 我们可以用break和continue等流程控制语句来终止循环。
<nowiki> import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int score;String s; int i=0; while(true) { System.out.println("请输入同学的成绩:"); s=input.next(); if(s.equals("q")) { break; }else { score=Integer.valueOf(s); System.out.println("同学的成绩为:"+score); } i++; } System.out.println("录入完毕"); input.close(); } }</nowiki>
循环条件可以变吗?
答案:可以
循环条件可以是任意的布尔表达式的组合。
- 求1~100的前10个偶数:
package task4; public class For { public static void main(String[] args) { // TODO Auto-generated method stub int count=0; int i=1; while(i<101 &&count<5){ if(i%2==0) { System.out.println(i); count++; } i++ } } }
变量迭代语句可以变吗 ?
答案:可以
任何使变量得到改变的式子都可以。
- 求1+2+4+...+ 64
int sum=0; int i=1; while(i<=64){ sum +=i; i=i*2; } System.out.println("sum="+sum);
- 头脑风暴:迭代语句可有可无吗 ?试试把i=i*2去掉。
- 用while编写程序,接收身高、体重等数据,能够不断计算不同用户的BMI值,
体质指数(BMI)=体重(kg)÷(身高(m)*身高(m))
public class WhileTestTwo { public static void main(String[] args) { while(True) { Scanner scanner = new Scanner(System.in); float height = scanner.nextFloat(); float weight = scanner.nextFloat(); float BMI = height/(weight*weight); System.out.println("您的BMI指数为:"+BMI); } } }
思考:以上代码代表什么意思 ?有什么方法能持续地执行上述游戏 ?
Java练习题
- 练习:使用while循环计算1累加至1000。
- 练习:求10的阶乘。10!= 1x2x3x…..x10。。
- 2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
练习题答案
1. public class test{ public static void main(String[] args) { int count = 1,sum=0; // 当count小于10时,执行循环体 while(count <1001) { sum += count; //迭代语句 count++; } System.out.println("1~100累加的结果为:"+sum); } } 2. public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub int i = 1,sum=1; while(i <11) { sum=sum*i; i++; } System.out.println("10!="+sum); } } 3. public class test2 { public static void main(String[] args) { // TODO Auto-generated method stub int i = 2006;double sum=8; while(sum<=20) { sum=sum+sum*0.25; i++; } System.out.println(i+"年将达到20万"); } }
参考文档:https://blog.csdn.net/weixin_38362146/article/details/78023104