Java的while循环

来自CloudWiki
跳转至: 导航搜索

什么是循环语句

循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。

程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环。

软件中有许多重复的动作:

(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);
	}

}
  • Java2-16.png

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)→ ... →退出循环
  • 也可以通过下面这个图看出来
  • Java2-18.png
  • 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