好兄弟 for循环 你学回了吗?

浅谈for循环,for循环习题讲解

文章多看几遍吧~相信你一定会收获不少哇~

什么是循环?

 

我认为循环就是把一个步骤一直重复执行的操作。如果没有终止条件,那么这一步骤就会一直执行下去,直到地老天昏。书本上对循环的定义是:用来控制语句块重复执行的一种结构。在编程中一共有三种类型的循环语句:while循环、do-while循环和for循环。那么今天我就先给大家介绍循环结构中的一种语句---for循环。

 

for循环的语法:

for(1循环的初始化 ;  2循环的继续条件 ; 4循环的步长 ){

         3循环体

}

循环过程:1-2-3-4-2  -3-4-2-  3-4-2-  3-4-2  直到循环的终止条件为止

注意:for 循环语句从关键字 for 开始,然后是用双括号括住的循环控制结构体。这个结构体包括循环的初始化 ,循环的继续条

件和循环的步长。控制结构体后紧跟着花括号括起来的循环体。循环的初始化 ,循环的继续条件和循环的步长都要用分号分隔。

一般在已知循环次数的条件下使用for循环最佳。

 

习题展示:打印输出下列图案
 

1、

好兄弟 for循环 你学回了吗?_第1张图片

代码展示:

class Test02{
    public static void main(String[] args){
       for(int line=1;line<=4;line++){
            for(int i=1;i<=8;i++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

这是最基础的题啦~它使用了两个for循环语句,就是for循环的嵌套语句啦~上述语句的循环过程为:i为1时,因为i<8,所以

打印一个*,随后 i+1=2 ,因为2<8,所以继续打印一个*,随后 i+1=3 ,因为3<8,所以继续打印一个*,一直这样循环直到

i= 9时,这for循环就结束。而第一个for循环的意思是打印四行 *,输出即为结果。

2、

       好兄弟 for循环 你学回了吗?_第2张图片

代码展示:

class Test02{
    public static void main(String[] args){
       for(int line=1;line<=7;line++){
            for(int i=1;i<=line;i++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

“for(int line=1;line<=7;line++)”这一行就不用解释了吧~主要解释第二个for循环 循环控制体里面的内容。第二个for循环循环

控制体里的语句主要是打印每行的 * 的个数,第一行一个 * ,第二行2 个 *  ;第三行 3 个 * ;可以发现 每行的 星的个数 = 

行数,那么

int i =1;  就是 * 个数的初始化,每一行的 * 都是由 1 个开始增加的,

i<=line;因为星的个数 =  行数,所以i<=line;

i++;就是 打印的 * 的个数逐次增加,直到 * 的个数= 行数。

3、

     好兄弟 for循环 你学回了吗?_第3张图片

for(int i=1;i<=11;i++){
            for(int j=1;j<=i&&j<=12-i;j++){
                System.out.print("*");
            }
            System.out.println();
        }

接下来的代码展示,我就只展示 for循环语句的部分啦~主要解释第二个for循环

int j=1;打印 * 的个数,每行 * 的个数都是有  1 开始增加的

j<=i&&j<=12-i; 建立 * 的个数 与行数之间的关系,即 行数 + * 的个数 = 12 且 每行的 * 数 < 行数 ,所以对 j 的定义就如此

j++ :打印的 * 的个数逐次增加,直到 * 的个数= 12 - 行数。

4、

      好兄弟 for循环 你学回了吗?_第4张图片

代码展示;

 for(int i=1;i<=11;i++){
            for(int k=1;k<=Math.abs(i-6);k++){
                System.out.print(" ");
            }
            for(int j=1;j<=i&&j<=12-i;j++){
                System.out.print("*");
            }
            System.out.println();
        }

这个图案相对于第三个图案来说只是每行前面都加了一定数目的空格数,其余代码都不变,所以现在我们主要讲加空格的

那个for循环。空格数先减后增,与数学中的绝对值函数类似,可以发现 第6 行以前 空格数 由5到0依次递减,后5行的  空

格数 由1到5依次递增, 建立它与行数的关系,每行的空格数 = |6 - 行数|,就有上面的代码啦~

5、

     好兄弟 for循环 你学回了吗?_第5张图片

代码展示:

for(int i=1;i<=11;i++){
            for(int k=1;k<=Math.abs(i-6);k++){
                System.out.print(" ");
            }
            for(int j=1;j<=i&&j<=12-i;j++){
                System.out.print("* ");
            }
            System.out.println();
        }

这段代码几乎与上一段相同,唯一的变化就是 把 输出 *  变成了  * +  空格

6、

 好兄弟 for循环 你学回了吗?_第6张图片

上述图形对应的数字图形如上所示,我们可以轻易的发现,凡是数字图形上1 的位置和 行数 对应的位置上就是这个  图形 *

的位置,其他位置都是空格 ,所以该图形的基础代码和第五题代码一样,在它的基础上加了一个  if  语句  如果 

(j==1  ||  j==i  ||  j+i==12)

就输出 * ,否则 输出 空格。其中 j==1   j==i   对应的就是 数字图形上1 的位置和 行数 对应的位置

代码展示:

for(int i=1;i<=11;i++){
            for(int k=1;k<=Math.abs(i-6);k++){
                System.out.print(" ");
            }
            for(int j=1;j<=i&&j<=12-i;j++){
                if(j==1||j==i||j+i==12){
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            System.out.println();
        }

习题展示:

显示金字塔,编写程序,提示用户输入一个 1 到 15 之间的数字,然后显示一个金字塔形状如图所示:

好兄弟 for循环 你学回了吗?_第7张图片

import java.util.Scanner;
public class Demo03_14{
    public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter an number:");
    int num = scanner.nextInt();
    for(int i = 1;i<=num;i++){  // 输出行数
        for(int k =1;k<=num-i;k++){  //输出空格
            System.out.print("   "); 
        }
        for(int x =-(i-1);x<=i-1;x++){  //输出数字
            System.out.printf("%3d",Math.abs(x)+1);
        }
        System.out.println();
       }
    }
}

每行数字的规律

以第三行为例,3 2 1 2 1  一般先减后增的数字排列,我们的第一反应应该就是 数学中的绝对值函数

那么对应函数的  值域为 [ 1,3 ]   y  即   3   2  1  2  1     -------对应第 3 行

                     定义域为 [ - 2, 2 ]   x  即  -2  -1  0  1  2   ,解题思想就是 需要 建立 行数 i 与   x 之间的关系 把输出数字 用 x 表示

出来 , 可以发现 x   最小是   负的 行数  - 1  ,最大是  行数  - 1  ,那么输出数字就是  x 的绝对值 + 1 ;

空格的规律

空格数 依次递减  以第三行为例, 空格数 为  输出总行数   -  该行序列数 

 

使用嵌套的循环语句,用四个独立的程序打印下面的图案

好兄弟 for循环 你学回了吗?_第8张图片

import java.util.Scanner;
public class Demo03_15{
    public static void main(String[] args){
        for(int i = 1;i<=6;i++){
            for(int x=1;x<=i;x++){
                System.out.print(x+" ");
            }
            System.out.println();
        }

    }
}

数字规律

每行都是 由 1  递增到 该行序列数    所以建立它与行数之间的关系即  x<= i

注意输出的是  数字 + 一个空格

        for(int i = 1;i<=6;i++){
            for(int x=1;x<=7-i;x++){
                System.out.print(x+" ");
            }
            System.out.println();
        }
        

数字规律

以第一行为例, 1 2 3 4 5 6  ,可以发现 它与行数 i 的 关系就是  输出数字  x = 7- i  ,第一行 输出 1~6,第二行输出 1~5,

以此类推。

for(int i = 1;i<=6;i++){  //输出行数
            for(int k=1;k<=6-i;k++){  // 输出空格数
                System.out.print("  ");
            }
            for(int x=i;x>=1;x--){  //输出数字
                System.out.print(x+" ");
            }
            System.out.println();
        }

与前两个图案不同的是  这个图案 加入了 空格

空格规律:第一行 5 个 空格 ,第二行 4 个 ,第三行 3 个 ,依次递减,那么建立 他与 行数 i 的关系 就是 k=6- i 

数字规律:以第三行为例  3 2 1  即 由行序数依次递减为 1 ;那么建立他与行数 之间的关系就是 输出数字数 等于行序数 

,输出数字最小 为1  且 依次递减 即 int x=i;x>=1;x--

 

        for(int i = 1;i<=6;i++){  //输出行数
            for(int k=1;k<=i-1;k++){  //输出 空格数
                System.out.print("  ");
            }
            for(int x=1;x<=7-i;x++){  //输出 数字
                System.out.print(x+" ");
            }
            System.out.println();
        }

空格规律: 由 第一行 0 个开始 逐行递增,建立他与 行数之间的关系 就是 k=i-1

数字规律:与第二个图案规律一样 ,参考即可

编写一个嵌套的for循环,打印下面输出

好兄弟 for循环 你学回了吗?_第9张图片

 

public class Demo03_16{
    public static void main(String[] args){
        for(int i =1;i<=8;i++){      //输出行数
            for(int j =1;j<=8-i;j++){  //输出空格数
                System.out.print("    "); //每次输出4个空格
            }
            for(int x=-(i)+1;x<=i-1;x++ ){  //输出数字
                System.out.printf("%4d",(int)Math.pow(2,Math.abs(x)));
            }
        System.out.println();
        }
    }
}

数字规律: 以第  3 行为例       1      2       4       2      1, 可以发现每个数都是 2 的次幂  

                                      即    2^0   2^1   2^2   2^1   2^0    总结次幂的规律 

                                      即       0      1       2       1       0      ,数字先增后减 ,联想数学中的 绝对值函数

那么对应函数的  值域为 [ 0,2 ]   y  即   0   1   2  1  0     -------对应第 3 行

                     定义域为 [ - 2, 2 ]   x  即  -2  -1  0  1  2   ,解题思想就是 需要 建立 行数 i 与   x 之间的关系 把输出数字 用

x 表示出来 , 可以发现 x   最小是   负的 行数  - 1  ,最大是  行数  - 1  ,那么输出数字就是  2 ^ x 次幂,注意输出结果要

转换为 int 型,不然输出的数字就是小数啦~

空格规律: 该图案一共 8 行 ,那么建立 空格数与行数之间的关系 即可  即  j = 8 - i ,重点在 后面的输出语句上  我特意在上

面的代码中标注出来啦,就是 每次都输出 4 个空格 ,为什么呢?原因是  这个图案 输出的最大数字为128 ,它对应占 3 个

空格  为了产生 上述整齐的金字塔模样, 特意让输出数保留 4 位数  最后强转为整型的 ,那么这4 个空格数 就对应  这4 位

保留数,这样一来每次输出的都是 4 个单位长度的 ,才能产生上述金字塔模样。

注意:最后输出数字的语句为  printf   而不是  print  

 

小知识普及:print  println 与 printf 的用法

Print :可以返回一个值,只能有一个参数

Println :可以打印出字符串,和变量 ,println与print唯一的区别是println换行输出。

Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形

 

for循环规律总结

无论是数字还是行数,都一定要想办法找规律并且建立它与行数之间的关系。特别注意,

发现先减后增或者先增后减的空格数或者行数一定要联想到绝对值函数,然后用横坐标 x

与 行数之间的关系来表示空格数或者行数即可!

害~这是我的理解啦~你们看着用吧~实在 不明白 for循环 ()双括号里面东西是怎么来的 可以多看几遍我的文章喔~

 

你可能感兴趣的:(JAVA学习)