for循环结构

  • 基本结构
1
2
3
4
5
6
7
8
9
10
11
12
for(初始化表达式1;条件表达式2;修改初始值表达式3) {
循环体;
}

表达式1--> 表达式2--> true --> 循环体
| |
^ v
|--<- 表达式3 --<--

for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
  • for循环中三个表达式可以省略但2个分号不能省略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int  i,sum=0;
for( i=1; i<=10000; i++){
sum = sum + i;
}

int i = 1,sum=0;
for( ; i<=10000; i++){
sum = sum + i;
}

int i,sum=0;
for( i=1; i<=10000; ){
sum = sum + i;
i++;
}

死循环
for(;;) -- 这种没有循环条件的就是死循环
通常与break关键字搭配使用
  • 经典案例:水仙花数
1
2
3
4
5
6
7
8
9
10
11
12
int ge,shi,bai,sum=0;
int i; //循环计数器,统计重复了几次
for( i=100; i<=999; i++ ){
ge = i%10;//求各位 153%10 == 3
shi = i/10%10;//求十位 153/10==15%10==5
bai = i/100; //求百位 153/100==1
//求各个位数的立方和
sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//这数 等于 这个数各个位数的立法和
if( i==sum )
System.out.print( i+"\t" );
}

break关键字

break用于退出当前语句块,break用在循环体中用于退出循环。

1
2
3
4
5
6
7
for (int i = 0; i < 10; i++) {
if(i==5) break;
System.out.print(i+" ");
}

//输出的结果是:0 1 2 3 4
//当 i==5时,退出循环,因此5以及5以后的值都没有输出
  • 经典案例:break的聊天小程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Scanner input = new Scanner(System.in);
String user = "Hi~";

for( ; ; ){
System.out.println("亲爱的,在聊5块钱的吗?");
user = input.next();
//字符串比较是否一样java用equals方法判断,不能用==
//equlas方法语法: “字符串1”.equalse( "字符串2" ) 当字符串1与字符串2一致时返回true,不一致返回false
//if( user == "bye" ){
if( "bye".equals( user ) ){
System.out.println("今天就到这里了!明年继续 end!");
break;
}
}

continue关键字

continue语句用在循环体中,用于结束本次循环而开始下一次循环。

1
2
3
4
5
6
7
for (int i = 0; i < 10; i++) {
if(i%5==0) continue;
System.out.print(i+" ");
}

//输出的结果是:1 2 3 4 6 7 8 9
//当 i==5时,结束本次循环继续下一次循环,因此5没有输
  • 经典案例:猜数字游戏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//创建随机数对象,此工作者用于产生随机数
Random obj = new Random();

//nextInt() 产生随机整数
//nextInt( 种子数 ) 产生0~ 种子(不包含种子数)之间的随机数,例如nextInt(5),将在0,1,2,3,4中产生一个随机数
int sysNum = obj.nextInt( 100 ) + 1;//sysNum中存储随机产生的1~100的随机数字
Scanner input = new Scanner(System.in);
int userNum = 0;//用户输入的数字

for( ; ; ){
System.out.println("请输入您购买的1~100之间的号码:");
userNum = input.nextInt();//输入1个整数
if( sysNum == userNum ){
System.out.println("恭喜您,中奖了");
break;//中奖循环就停止不在购买了
}else if( userNum < sysNum ){
System.out.println("您买小了");
}else{
System.out.println("您买大了");
}
}

嵌套循环

循环可以互相嵌套,构成多重循环。多重循环不宜嵌套太多层,否则效率很低,一般到三重循环即可。

多重循环中最常见的就是双重循环。

1
2
3
4
5
6
7
8
9
10
11
12
//打印图形:10行9列的四边形
int i=0,j=0; //i是外循环行数的计数器, j是内循环列数的计数器

for(i=1; i<=10; i++){//外循环控制行,从1开始到5结束,共5行
//内循环控制列,每行9列
for(j=1; j<=9; j++){
//在同一行(不换行)打印*
System.out.print("*");
}
//内循环j结束后,这行打印完成,换下一行
System.out.println("");
}
  • 打印图形:5行直角三角形
1
2
3
4
5
6
7
8
9
10
11
int i=0,j=0;  //i是外循环行数的计数器, j是内循环列数的计数器

for(i=1; i<=5; i++){//外循环控制行,从1开始到5结束,共5行
//内循环控制列,每行9列
for(j=1; j<=i; j++){
//在同一行(不换行)打印*
System.out.print("*");
}
//内循环j结束后,这行打印完成,换下一行
System.out.println("");
}
  • 打印图形:5行等腰三角形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int i=0,j=0,d=0;  //i是外循环行数的计数器, j是内循环星星的计数器,d是内循环空格的计数器

for(i=1; i<=5; i++){//外循环控制行,从1开始到5结束,共5行
//内循环打印星星前的空格
for(d=1; d<=5-i; d++){
//i=1时 d=1,d<=5-1 ####
//i=2时 d=1,d<=5-2 ###
//i=3时 d=1,d<=5-3 ##
//i=4时 d=1,d<=5-4 #
//i=5时 d=1, d<=5-1 0个
System.out.print(" ");
}
//内循环控制列,第i行有,i*2-1个星星
for(j=1; j<=i*2-1; j++){
//在同一行(不换行)打印*
System.out.print("*");
}
//内循环j结束后,这行打印完成,换下一行
System.out.println("");
}
  • 九九乘法表
1
2
3
4
5
6
7
8
9
for(int i = 1;i < 10;i++){
for(int j = 1;j <= i;j++){
int sum = i*j;
System.out.print(i + "*" + j + "=" + sum + "\t " ); //\t即为空格

if(i == j)
System.out.println();
}
}

while循环结构

1
2
3
while(条件表达式) {
循环体;
}
1
2
3
4
5
//当boolean表达式为true时,执行语句块;否则退出循环。
String cmd;
while (!"exit".equals(cmd = scanner.next())) {
System.out.println(cmd);
}

while循环和for循环比较

  • while 语句和for都是”当型循环” 可以完全互换。
1
2
3
4
5
6
7
8
9
10
11
12
// 1.使用for循环打印1 ~ 10之间的整数
for(int i = 1; i <= 10; i++) {
System.out.println(i);
}
System.out.println("----------------------------");

// 2.使用while循环打印1 ~ 10之间的整数
int i = 1;
while(i <= 10) {
System.out.println(i);
i++;
}
  • while(true) 等价于 for(;;)。