循环结构

foreach语句

foreach语句是for语句的特殊简化版本,不能完全取代for语句,但是任何的foreach语句都可以改写为for语句版本。
foreach语句的语法如下:

    for (元素变量X: 遍历对象obj)
    {引用X的Java语句
    }

foreach语句中的X不必对其进行初始化操作。

public class Repetition {
    public static void main(String[] args) {
        int arr[]={1,45,89,3,7};
        System.out.println("数组中的元素依次为:");
        for (int x:arr) //foreach语句版本
        {
            System.out.println(x);
        }
        System.out.println("for语句版本:");
        int y= arr.length;
        for (int x=0;x<y;x++)
        {
            int m=arr[x];
            System.out.println(m);
        }
    }
}

运行结果为:

标签

标签的语法

  标签名 :循环体{    
    break 标签名;
}

用例:

public class label {
    public static void main(String[] args) {
       loop: for (int i=0; i<3;i++)
    //标签的作用:跳出到标签名所在的循环,break直接跳出标签循环体,continue跳出当前循环,进入下一次循环
        {
            System.out.println("这是i的值"+i);
            for (int j=0; j<4;j++)
            {
                if (i==1)
                    continue  loop;
                System.out.println("这是j的值"+j);
            }
        }
    }
}

运行结果为:

分析:外层循环每次运行都会先输出当前i的值,在i=1,进入内层循环时,因为if判断条件i==1成立,使用的是continue,所以直接跳出当前循环,跳转到标签名(loop),进入下一次循环,i=2,从而再次进行循环。

一些小的运用:

判断奇偶数:

import  java.util.Scanner;

public class judgeNumber {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        Scanner s =new Scanner(System.in);
         exit : for (;;)
        {
            System.out.println("Please enter an integer:");
            int num = sc.nextInt();
            if (num % 2 == 0) {
                System.out.println("this is an even number");
            } else
                System.out.println("this is an odd number");
            System.out.println("Would you like to do it again?(no to exit)");

            String str =s.nextLine();
            if (str.equalsIgnoreCase("no"))
                break  exit;
        }
    }
}

打印菱形

 import java.util.Scanner;
public class printLozenge {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        int a= sc.nextInt();
        print(a); // 输出 n行的菱形
    }

    public static void print(int size) {
        if (size % 2 == 0) {
            size++;  // 计算菱形大小
        }
        for(int i=0;i<size/2+1;i++)
        {
            for(int j=0;j<size/2-i;j++)
            {
                System.out.print(" ");
            }
            for(int j=0;j<2*i+1; j++)
                System.out.print("*");
            System.out.println();
        }
        for(int n=size/2;n>0;n--)
        {
            for(int j=0;j<size/2+1-n;j++)
                System.out.print(" ");
            for(int j=0;j<2*n-1;j++)
                System.out.print("*");
            System.out.println();
        }
    }
}
/*
打印的菱形一定为奇数行,每行的*数为2*n-1(n为当前行的行号,且从1开始),可以分为上三角和下三角分别实现:上三角为(size/2)+1,下三角为size/2。
上三角中,空格输出只需考虑左半侧,空格数为(size/2)+1-n(n为当前行号),然后输出2*n-1个*。
上三角部分代码:
    for(int i=0;i<size/2+1;i++)
  {
      for(int j=0;j<size/2-i,j++)
      {
      System.out.printf(" ");
      }
      for(int j=0;j<2*i; j++)
      System.out.printf("*");
      System.out.println();
  }
下三角部分代码:
    for(int n=size/2;n>0;n--)
  {
      for(int j=0;j<size/2+1-n;j++)
      System.out,print(" ");
      for(int j=0;j<2*n-1;j++)
      System.out,print("*");
      System.out.println();
  }

 **/

对于绘制菱形的另一种思路:选自菜鸟教程

for (int i = 0; i < size / 2 + 1; i++) {
            for (int j = size / 2 + 1; j > i + 1; j--) {
                System.out.print(" "); // 输出左上角位置的空白
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                System.out.print("*"); // 输出菱形上半部边缘
            }
            System.out.println(); // 换行
        }
        for (int i = size / 2 + 1; i < size; i++) {
            for (int j = 0; j < i - size / 2; j++) {
                System.out.print(" "); // 输出菱形左下角空白
            }
            for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
                System.out.print("*"); // 输出菱形下半部边缘
            }
            System.out.println(); // 换行
        }

计算阶乘的和(以1+1/2+1/3!+...+1/20!为例)

public class factorial {
    public static void main(String[] args) {
        double sum=0;
        int i=1;
        while ( i<=20)
        {
            double temp=1;
            int j=1;
            while(j<=i)
            {
               temp *=j;
               j++;
            }
            i++;
            temp=1/temp;
            sum+=temp;
        }
        System.out.println("The sum of 1/1+1/(2!)+1/(3!)+...+1/(20!):"+sum);
    }
}

三种循环的区别

三种循环的区别:for循环和while循环都是先判断,然后决定是否执行循环体(先判断后执行);
do...while循环是先执行一次循环体,再判断条件(先执行后判断)

posted @ 2021-12-18 21:58  hanqi  阅读(83)  评论(0)    收藏  举报