Logo

郎哥编程

掌握for循环语句

2018-07-29 826

文章导读

前面讨论了while循环语句,掌握了while循环语句的使用方法及规则。本篇讲述一个功能更强,使用更广泛的for循环语句。通过本篇的学习,你将掌握如何使用for循环语句处理程序遇到的多重操作问题


本文分成两个小节,第一小节讲述for循环语句;第二小节讲述for循环语句的嵌套使用。

第一小节  for循环语句

for循环语句是Java语言提供的功能更强,使用更广泛的一种循环语句。Java语言的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。

for循环的一般语法为:

for(表达式1; 表达式2; 表达式3;)

{

    语句;

}

语法说明如下:

■ 表达式1:通常用来给循环变量赋初值,一般是赋值表达式,也允许在for语句外给循环变量赋初值,此时可以省略该表达式;

■ 表达式2:通常是循环条件,一般为关系表达式或逻辑表达式;

■ 表达式3: 通常可用来修改循环变量的值,一般是赋值语句。

for循环中的这三部分必须用分号隔开,组成循环体的语句可以是单条语句或一个语句集(多条语句)。

一般语法中的“语句”即为循环体语句。for语句的语义是:

(1)首先计算表达式1的值,通常为循环变量赋初值;

(2)再计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;

(3)然后再计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第二步重复执行。

在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能执行多次,也可能一次都不执行。

编程示例1

任务要求:使用for循环求自然数的阶乘。

程序思路分析:自然数的阶乘是所有小于及等于该自然数的积,并且0的阶乘为1。程序声明3个long类型的变量,number、count、factorial。分别用于存储输入的整数、循环变量的值、阶乘值。for循环表达式1为count赋初值,表达式2使用count<=number作为循环条件用来测试是否继续执行循环,表达式3使用count++用来修改循环变量的值。

程序代码如下:

package condition;
import java.util.Scanner;
public class FactorialSample {
    public static void main(String[] args) {
        long number, count;
        long factorial = 1;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入任意自然数");
        number = sc.nextLong();
        for (count = 1; count <= number; count++) {
            factorial = factorial * count;
        }
        System.out.printf("%d的阶乘 = %d", number, factorial);
 
    }
}

编程示例2

任务要求:使用for循环输出加法表。

程序思路分析:声明i、j、max三个整型变量,max由用户输入,该max存储加法表的最大加数。for循环的第一个表达式为循环变量i和j赋初值,执行此表达式后,i被赋值为0,j被赋予max中的当前值;for循环的第二个表达式设定循环条件,当i<max时,停止循环;for循环的第三个表达式修改循环变量的值。

程序代码如下:

package condition;
import java.util.Scanner;
public class AdditionSample {
     public static void main(String[] args) {
        int i, j, max;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入任意一个数值");
        System.out.println("根据这个值可以输出以下加法表");
        max = sc.nextInt();
        for (i = 0, j = max; i <= max; i++, j--) {
            System.out.printf("\n %d + %d = %d", i, j, i + j);
        }
 
    }
}

前面已讨论,for循环中有三个表达式,for循环中的这三个表达式都可以省略,但要注意分号不能省略,下面分别讨论for循环中省略部分或者全部表达式的情况。

(1)省略表达式1

for循环语句中表达式1可以省略不写,此时,循环变量应在循环语句之外赋值,例如如下语句:

int  i = 0;
for( ; i < 10; i++ )
{
   System.out.printf("\n %d=", i*2)
}

程序输出20以内的偶数,int  i = 0对循环变量进行赋值,因为循环变量i已经被赋值,此时循环语句可以省略表达式1。

(2)省略表达式2

for循环语句中的表达式2,在一定条件下也可以省略, 表达式2主要用于循环条件的判断。如果省略表达式2,就必须要在循环体中增加循环条件判断语句,如果不满足循环条件,则跳出循环。跳出循环可以用break语句,break语句将在后面介绍。省略表达式2的示例语句如下:

int i;
for( i=0;; i++ )
{
  if( i >=10 )
     break;
System.out.printf("\n %d=", i*2)
}

程序在循环体内增加了if( i >= 10 )条件判断语句,如果i>=10为真,则通过break语句跳出循环,如果循环体内没有跳出循环的条件判断语句,程序将进入无限循环。

(3)省略表达式3

for循环语句中的表达式3一般是用来修改循环变量的值,如果在循环体内有修改循环变量的语句,此时表达式3可以省略。例如如下语句:

int i;
for( i=0; i<10; )
{
i = i+1;
System.out.printf("\n %d=", i*2)
}

循环体内的i = i+1等同于for( ; i < 10; i++ )语句中的i++,每循环一次,i就进行加1操作,当i自增到10时,循环终止。

(4)三个表达式都省略

三个表达式都省略的情况比较少见,此时,循环体为有循环变量的赋值语句,循环体内应有修改循环变量和循环条件判断的语句,否则很容易形成无限循环。例如如下语句:

int i=0;
for( ;; ; )
{
i = i+1;
  if( i >=10 )
     break;
System.out.printf("\n %d=", i*2)
}

程序中int i=0为循环变量i赋初值,循环体内i = i+1修改循环变量i的值,if( i >= 10 )判断循环变量i的值是否大于等于10,如果条件为真,则跳出循环。

第二小节  for嵌套循环语句

前面已经介绍了嵌套循环的概念,并通过示例介绍了while循环和do-while循环嵌套的情况。本节介绍for嵌套循环结构,for循环不仅自身可以嵌套。还可以和其它的循环结构混合嵌套。

嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内,下面给出一些循环嵌套的示例。

编程示例3

任务要求:用“*”输出一个菱形图案,图案如下:

blob.png

程序思路分析:程序分为两部分循环,第一部分循环输出菱形图案的上边四行,最外层循环控制输出的行数,内层嵌套了两个for循环,第一个嵌套循环输出打印的空格数,第二个嵌套循环输出打印的星号数;第二部分循环输出菱形图案的下边三行,原理和第一部分循环相同。

程序代码如下:

package condition;
public class ForSample1 {
     public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i, j, k;
        // 先打印上边的四行
        for (i = 1; i <= 4; i++) {
            // 控制要打印的空格数
            for (j = 1; j <= 4 - i; j++)
                System.out.print(" ");
            // 控制要打印的星号数
            for (k = 1; k <= 2 * i - 1; k++)
                System.out.print("*");
            System.out.print("\n");
        }
 
        // 打印下边的三行
        for (i = 1; i <= 3; i++) {
            // 控制要打印的空格数
            for (j = 1; j <= i; j++)
                System.out.print(" ");
            // 控制要打印的星号数
            for (k = 1; k <= 7 - 2 * i; k++)
                System.out.print("*");
            System.out.print("\n");
        }
    }
}

编程示例4

任务要求:打印输出100至200之间的全部素数。

程序思路分析:素数是指能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看是否能被3整除,并且该数不等于3,则该数不是素数,否则再判断是否能被4整除,依次类推,该数只要是能被小于其本身的某个数整除时,就不是素数。

程序外层循环控制输出100至200之间的数,内层的while循环用于找寻从2到该数之间第一个能被整除的数,内层循环判断条件为i%j != 0,其中i为当前要判断是否是素数的数,j为从2开始循环递增的数,如果i%j != 0,则说明i不能被j整除,j自增后程序继续执行while循环,如果i%j == 0,则说明i能被j整除,程序跳出while循环,循环后面的if语句判断i与j是否相等,如果相等,则说明i为素数,程序输出i。

程序代码如下:

package condition;
public class ForSample2 {
    public static void main(String[] args) {
        int i, j, n;
        n = 0;
        for (i = 100; i <= 200; i++) {
            j = 2;
            // 从2到i之间寻找第一个能被整除的数
            while (i % j != 0)
                j++;
            // 如果第一个能被整除的数等于该数本身,则说明该数为素数
            if (i == j) {
                System.out.printf("%4d", i);
                n++;
                // 控制每行输出8个素数
                if (n % 8 == 0)
                    System.out.print("\n");
            }
        }
        System.out.print("\n");
 
    }
}


■ 文章小结

1、for循环在Java编程中应用非常广泛,它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。只要弄明白了for循环的三个表达式,就可以掌握for循环的用法,表达式1是进入第一次for循环之前运行,并且只会执行一次;表示式2是for循环的执行条件,满足这个条件后才能进入循环里面的语句;表达式3是在执行一次循环后执行的语句。

2、循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构。while、do- while和for循环语句都可以进行嵌套,并且他们之间可以进行互相嵌套。最常见的是在for循环中嵌套for循环。

■ 思考与练习

1、编写一个程序,用for循环输出1—100之间的所有偶数。

提示:能被2整除的数为偶数,在Java语言中可以用取余运算符%来判断某个数值是否是偶数。例如 a%2的运算结果如果是0,则a为偶数。

2、编写一个程序,要求用for循环求100以内的奇数和。

3、编写一个程序,要求用for嵌套循环输出九九乘法表。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论