搜索
您的当前位置:首页正文

for循环,while循环

来源:好走旅游网

循环语句
循环语句是用来控制某些语句的重复执行。
要素
初始化变量 循环条件 循环语句 更改初始化变量的语句
while语句

	while(循环条件){		//特点:1.先判断,后执行  2.执行次数 :0--n;
		重复语句
	}

do while循环语句

	do{										//特点:1.先执行,后判断		2.执行次数:1--n
		重复执行语句
		}while(循环条件);

案例一:用while方法求出所有的水仙花数。

/**
用while和do while语句分别实现求出【100-999】之间所有的水仙花数
*/
// while语句求水仙花数
class Demo3  {
	public static void main(String[] args){
		int a,b,c,sum;
		int i=100;					//定义控制变量
		while(i<1000){				//循环条件
			a=i/100;				//提取数字
			b=i%100/10;
			c=i%10;
			sum=a*a*a+b*b*b+c*c*c;	
			if(sum==i){				//判断是否是水仙花数
				System.out.println(sum);//输出语句
			}
			i++;					//操作控制变量
		}

案例二:用do while方法求出所有的水仙花数

/**
用while和do while语句分别实现求出【100-999】之间所有的水仙花数
*/
// while语句求水仙花数
class Demo3  {
	public static void main(String[] args){
		//用do while语句求出[100-999]之间所有的水仙花数
		int a,b,c,d,sum;
		int i=100;						//定义控制变量
		do{								//先执行一次程序体
			a=i/100;
			b=i%100/10;
			c=i%10;
			sum=a*a*a+b*b*b+c*c*c;
			if(sum==i){					
				System.out.println(i);
			}
			i++;						//控制变量操作,不能放在循环体外面
		}while(i<999);					//循环条件,注意此处比while循环要少1,因为没有判断前已经执行过一次了
	}
}

for 循环:
for语句的规范:

for (初始化语句;循环条件 ;更改语句 ){
	循环语句
	}

注意:

for (int num=1;num<88;num++){
	num=num+1
}
System.out.println(num);

上述语句最后并不会输出num值,因为num是局部变量,局部变量都是有作用域的,超出了作用域就不能再继续使用。
for循环的变形:

int num=1;
for (;num<88;){
	num=num+1
		num++;
}

上面代码变形也是正确的,初始化语句和更改初始变量语句可以单独拿出,但是 ; 不能省略。

for(;;){

}

上述代码也是正确的,该循环为无限循环
注意:在无限循环后面不要跟其他语句,因为永远都执行不到,编译时会报错:

public class Pra{
	public static void main(String[] args){
		for(;;){
			System.out.println("hello");
		}
		System.out.println("over");
	}
}
------------------------------------------------------------------------------
Pra.java:6: 错误: 无法访问的语句
		System.out.println("over");
		^
1 个错误

for循环的嵌套使用:
双层for循环可以理解为时钟,外层的for循环=时针,内层的for循环=分针,分针走一圈---->>时针走一格;
双层for循环通常可以用来打印几行几列的表格,外层for控制行数,内层for控制列数

案例一:打印一个由*组成的6行5列的矩形:

class Demo5 {
	public static void main(String[] args){
	//打印6行5列的矩形
		for(int i=1;i<6;i++){
			for(int j=1;j<=i;j++){
					System.out.print("*");
			}
			System.out.println();
		}

案例二:打印由*组成的直角三角形:

class Demo5 {
	public static void main(String[] args){
	//打印靠右的直角三角形
		for(int i=1;i<6;i++){
			for(int j=1;j<=i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

案例三:打印一个由*组成的倒置的直角三角形:

//打印倒置的直角三角形
class Demo5 {
	public static void main(String[] args){
		for(int i=1;i<6;i++){
			for(int j=i;j<6;j++){
				System.out.print("*");
			}
		System.out.println();
		}

案例四:打印由*组成的等腰三角形

class Demo5 {
	public static void main(String[] args){
	//打印等腰三角形
		for(int i=1;i<6;i++){
			for(int k=i;k<5;k++){
					System.out.print(" ");
				}
			for(int j=1;j<=i;j++){
				System.out.print("* ");
			}
			System.out.println();
		}
	}
}

案例五:打印九九乘法表:

class Demo5 {
	public static void main(String[] args){
	//打印九九乘法表
		for(int i=1;i<10;i++){
			for(int j=1,sum=0;j<=i;j++){
				sum=i*j;
				System.out.print(i+"X"+j+"="+sum+"\t");

			}
			System.out.println();
		}

案例六:打印万年历,输入年份月份信息后从控制台输出日历信息。

/*
输出万年历效果。
求和法,思路:先算出所求年份离1900年总共有多少天,天数+1位所求年1月1日,取模7,
余数就是1月1的星期几;再求月份,再取模,余数就是星期数,最后制表输出,双for循环。
*/
import java.util.*;
class  Demo6 {
	public static void main(String[] args){
		Scanner in=new Scanner(System.in);
		System.out.print("请输入要求的年份信息:");
		int year=in.nextInt();
		System.out.print("请输入要求的月份信息:");
		int month=in.nextInt();

		int sum=0;			//总天数
		int day=0;			//每个月有多少天
		
		//求所求年份距离1900年有多少天
		for(int i=1900;i<year;i++){
			//判断是否是闰年
			if(i%400==0 || (i%4==0 && i%100!=0)){
				sum+=366;
			}else
				sum+=365;
		}

		//求每个月有多少天
		for(int i=1;i<=month;i++){		//注意:不能定义i从0开始,因为i代表月份,必须从1开始
			switch(i){
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					day=31;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					day=30;
					break;
				case 2:
					if(year%400==0 || (year%4==0 && year%100!=0)){
						day=29;
					}else
						day=28;
			}
			if(i<month)
			sum+=day;		//目前为止是到month-1月的和,因为判断条件没有=month
		}

		//现在准备输出日历表格
		//第一行是不变的,可以直接输出
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		//先打印1号之前的表格
		//此处注意sum是到所求月 的上个月31号之前的和,所以所求月1号要+1
		int week=(sum+1)%7;
		for(int i=0;i<week;i++){
			System.out.print("\t");	//1号对应的星期几之前全部输出制表符
		}
		//接下来打印月份数字了
		for(int i=1;i<=day;i++){
			System.out.print(i+"\t");
			if((sum+i)%7==6){
				System.out.println();
			}
		}
	}
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top