Java_00_007-流程控制之循环结构

 

流程控制即程序代码的执行顺序,所有的程序都是从上而下顺序执行的,这也是所谓的顺序结构,但代码并非是绝对的从上而下执行,因为有的代码可能不会执行,有的代码可能会重复执行,这分别对应着流程控制的分支结构以及循环结构,这篇文章记录了我对循环结构的理解…

 

◆ 基本使用


1. for 语句
语法格式
for (初始化语句; 条件判断语句; 步进语句)
{
    循环体语句;
}
  • 初始化语句是用逗号分隔的任意多条 Java 表达式,可默认不写,但它后面的分号不可以省略,仅在最开始执行且只执行一次,通常用于变量初始化赋值
  • 条件判断语句是布尔表达式,用于判定循环是否继续执行,若该部分默认不写,则表示条件永远为真,成为死循环,其后的分号同样不可省略
  • 步进语句也是用逗号分隔的任意多条 Java 表达式,它通常用于改变与判断语句相关的条件,这部分也可以默认不写
  • 循环体语句是需要重复执行的语句,如果该部分只有一条语句,大括号可以省略不写
  • for 语句的语义即首先从左至右一次执行初始化语句,其次计算条件判断语句的值,若为 false ,程序继续执行 for 语句之后的语句,否则,程序将依次执行循环体语句,然后依次执行步进语句,最后再次计算条件判断语句的值,依上述规律循环往复,直至条件判断语句的值为 false
使用方式

for 语句通常用于能够确定执行次数的循环

显示异常,评论区找我哟!

//Demo.java
public class Demo
{
    public static void main(String[] args)
    {
        for (int i = 1, System.out.println("一条初始化语句");
             i < 5; i++, System.out.println("步进语句"+i))
        {
            System.out.println("循环体语句"+i);
        }
    }
}

显示异常,评论区找我哟!

  • 初始化语句和步进语句不仅可以是变量声明或者赋值语句,它可以是任意的 Java 表达式,这在有些时候会有很神奇的表现

初始化语句也可以写在 for 语句之前,步进语句可以写在循环体语句中

显示异常,评论区找我哟!

//Demo.java
/*
计算 1+2+3+...+100 的值
*/
public class Demo
{
    public static void main(String[] args)
    {
        int i = 1;
        int sum = 0;
        for (; i <= 100; )
        {
            sum += i;
			i++;
        }
        System.out.println("i = " + i);
        System.out.println("sum = " + sum);
    }
}

显示异常,评论区找我哟!

  • 初始化语句的声明置于 for 语句之前,可以保证在 for 语句结束之后,仍可以被使用

循环语句只有一条时,可以省略大括号

显示异常,评论区找我哟!

//Demo.java
/*
计算 1+2+3+...+100 的值
*/
public class Demo
{
    public static void main(String[] args)
    {
        int i;
        int sum = 0;
        for (i = 1; i <= 100; i++)
            sum += i;
        System.out.println("i = " + i);
        System.out.println("sum = " + sum);
    }
}

显示异常,评论区找我哟!

2. while 语句
语法格式
while (条件判断语句)
{
    循环体语句
}
  • 条件判断语句是布尔表达式,用于判定循环是否继续执行,若该部分默认不写,则表示条件永远为真,成为死循环
  • 循环体语句是需要重复执行的语句,如果该部分只有一条语句,大括号可以省略不写
  • while 语句的语义即首先计算条件判断语句的值,若为 false ,程序继续执行 while 语句之后的语句,否则,程序将依次执行循环体语句,然后后再次计算条件判断语句的值,依上述规律循环往复,直至条件判断语句的值为 false
使用方式

while 语句常用于难以确定执行次数的循环

显示异常,评论区找我哟!

//Demo.java
/*
求一个数值得所有计数单位中包含多少个偶数,
假设这个数是6512458
*/
class Demo
{
	public static void main(String[] args)
	{
        int number, digit, sum;
        number = 6512458;
        sum = 0;
        while (number != 0)			//如果number!=0,继续执行循环体
        {
            digit = number % 10;	//取当前number的个位数	
            if (digit % 2 == 0)		//如果digit为偶数,sum就加1
                sum++;
            number = number / 10;	//number对10取整
        }
        System.out.println("sum = " + sum);
	}
}

显示异常,评论区找我哟!

3. do…while 语句
语法格式
do
{
    循环体语句
}
while(条件判断语句);
  • 循环体语句是需要重复执行的语句,如果该部分只有一条语句,大括号可以省略不写
  • 条件判断语句是布尔表达式,用于判定循环是否继续执行,若该部分默认不写,则表示条件永远为真,成为死循环
  • do…while 语句的语义即首先依次执行循环体语句,其次计算条件判断语句的值,若为 false ,程序继续执行 do…while 语句之后的语句,否则,程序将再次执行循环体语句,然后后再次计算条件判断语句的值,依上述规律循环往复,直至条件判断语句的值为 false
使用方式

do…while 语句与 while 语句几乎一致,唯一的区别就是它会先执行一次循环体语句,然后再判定循环是否继续

显示异常,评论区找我哟!

//Demo.java
public class Demo
{
    public static void main(String[] args)
    {
		int key = 1;
        do
        {
            System.out.println("一条循环语句" + key);
            key++;
        }
        while (key < 0);
    }
}

显示异常,评论区找我哟!

 

◆ 语句嵌套


在日常的程序开发中,即使是一些玩具性的演示代码,也不可能只单独使用某种控制流程,多数情况下,我们都会组合不同的控制流程,其中,不同的语句嵌套更是频繁出现…

循环的嵌套可以帮助我们省略很多不必要操作,使代码更加简洁

显示异常,评论区找我哟!

//Demo.java
/*
打印如下图形
*****
*****
*****
*****
*****
*/
public class Demo
{
    public static void main(String[] args)
    {
		int i, j;
        for (i = 1; i <= 5; i++)		//外层循环
        {
            for (j = 1; j <= 5; j++)	//内层循环
            {
                System.out.print("*");
            }
            System.out.println();		//内层循环结束后,换行
		}
    }
}

显示异常,评论区找我哟!

//Demo.java
/*
打印如下图形
*
* *
* * *
* * * *
* * * * *
*/
public class Demo
{
    public static void main(String[] args)
    {
		int i, j;
        for (i = 1; i <= 5; i++)
        {
            for (j = 1; j <= i; j++)		//控制每行的输出数量
            {
                System.out.print("*");
            }
            System.out.println();
		}
    }
}

显示异常,评论区找我哟!

循环与分支的嵌套则可以实现更细节的控制

显示异常,评论区找我哟!

//Demo.java
/*
打印如下图形
    *
   * *
  * * *
 * * * *
* * * * *
*/
public class Demo
{
    public static void main(String[] args)
    {
        int i, j;
        for (i = 1; i <= 5; i++)
        {
            for (j = 1; j <= 5; j++)
            {
                if (j <= 5 - i)			//控制输出形状
                    System.out.print(" ");
                else
                    System.out.print("* ");

            }
            System.out.println();
        }
    }
}

显示异常,评论区找我哟!

//Demo.java
/*
打印如下图形
    1
   2 2
  3 3 3
 4 4 4 4
5 5 5 5 5
*/

public class Demo
{
    public static void main(String[] args)
    {	
        int i, j;
        for (i = 1; i <= 5; i++)
        {
            for (j = 1; j <= 5; j++)
            {
                if (j <= 5 - i)
                    System.out.print(" ");
                else
                    System.out.print(i+" ");	//* 替换为数字

            }
            System.out.println();
        }
        
    }
}

显示异常,评论区找我哟!

//Demo.java
/*
打印如下图形
    1
   2 2
  3 3 3
 4 4 4 4
5 5 5 5 5
 4 4 4 4
  3 3 3
   2 2
    1
*/

public class Demo
{
    public static void main(String[] args)
    {
		 int i, j;
        for (i = 1; i <= 5; i++)
        {
            for (j = 1; j <= 5; j++)
            {
                if (j <= 5 - i)
                    System.out.print(" ");
                else
                    System.out.print(i+" ");

            }
            System.out.println();
        }
        for (i = 4; i >= 1; i--)		//反向打印数字金字塔
        {
            for (j = 1; j <= 5; j++)
            {
                if (j <= 5 - i)
                    System.out.print(" ");
                else
                    System.out.print(i+" ");

            }
            System.out.println();
        }
    }
}

显示异常,评论区找我哟!

 

◆ 跳出语句


有些时候,我们有必要在碰到一些特殊情况时,立刻结束循环,这也就是跳出语句,它涉及到 break 和 continue 两个关键字,跳出语句不仅适用于一般的循环,还常用在嵌套循环以及无限循环中。

1. 无限循环

无限循环,又称死循环,它是指条件判断语句的值始终为真,程序无法正常结束的一种特殊情况,这里就明确一下它的一般语法格式

//for 语句无限循环
for (; ; )
{
    循环体语句;
}

//while 语句无限循环
while (true)
{
    循环体语句;
}

//do...while 语句无限循环
do
{
    循环体语句;
}
while (true)
2. 使用方式

break 语句的作用是跳出该循环,继续执行循环之后的语句

显示异常,评论区找我哟!

//Demo.java
/*
判断一个数是否是素数
*/
public class Demo
{
    public static void main(String[] args)
    {
        int number = 4;
        int i;
        for (i = 2; i <= number / 2; i++)	//遍历可能的每组因数之一
        {
            if (number % i == 0)			//如果有因数则跳出循环
            {
                break;
            }
        }
        if (i > number / 2)					//如果循环是正常结束
        {
            System.out.println("i = " + i);
            System.out.println(number + " 是一个素数!");
        }
        else
        {
            System.out.println("i = " + i);
            System.out.println(number + " 不是一个素数!");
        }
    }
}

显示异常,评论区找我哟!

Java 还提供了一种带标签的 break 语句,用于跳出多重嵌套的循环语句

显示异常,评论区找我哟!

//Demo.java
public class Demo
{
    public static void main(String[] args)
    {
		int i;
        int number=4;
		
        temp:							//while 循环标签
        while(true)						//无限循环
        {
            for (i = 2; i <= number / 2; i++)
            {
                if (number % i == 0)
                {
                    break temp;			//跳至标签所在循环结束处
                }
            }
            if (i > number / 2)
            {
                System.out.println("i = " + i);
                System.out.println(number + " 是一个素数!");
            }
            else
            {
                System.out.println("i = " + i);
                System.out.println(number + " 不是一个素数!");
            }

        }
		System.out.println("程序已结束!");
    }
}

显示异常,评论区找我哟!

continue 语句的作用的跳出本次循环,继续执行下一次循环

显示异常,评论区找我哟!

//Demo.java
/*
输出自然数中的前 10 个素数
*/
public class Demo
{
    public static void main(String[] args)
    {
        int i, j, sum;
        i = 2;
        sum = 0;
        for (; ; )					//无限循环
        {
            for (j = 2; j <= i / 2; j++)
            {
                if (i % j == 0)
                    break;
            }
            if (j > i / 2)
            {
                System.out.print(i + " ");
                sum++;
				i++;
            }
			else
			{
				i++;
				continue;			//跳出本次循环,从下一次循环继续
			}
            
            if (sum == 10)
            {
                break;
            }
        }
		System.out.println();
    }
}

显示异常,评论区找我哟!

 


上述所云,诚为一家之言,如有疏漏谬误,欢迎批评指正!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值