for循环题解

本文详细探讨了Java编程中for循环的使用,包括其基本语法、遍历数组、控制流程等常见应用场景,并提供了实例代码进行解析,帮助读者深入理解for循环的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* 打印图形
  ********
  ********
  ********
  ********
*/
class Demo01{
    public static void main(String[] args) {
   //第一种写法
         for(int i=1;i<=4;i++){ //外层循环控制打印的行数为4行
            System.out.println("********"); //每行打印的内容换行
        }

        System.out.println("============");

    //第二种写法

        for(int i=1;i<=4;i++){  //外层循环控制打印的行数为4行
            for(int j=1;j<=8;j++){ //内层循环控制每行的列数为8列
                System.out.print("*");  //每列的内容不换行
            }
            System.out.println(); //内层循环每结束一次也就是打印一行就换行
   }
}
/*打印下列图形 
    *                       *         ******        ******
    **                     **         *****          *****
    ***                   ***         ****            ****
    ****                 ****         ***              ***
    *****               *****         **                **
    ******             ******         *                  *     
 */
class Demo02{
    public static void main(String[] args) {
   //第一个图形
         for(int i=1;i<=6;i++){  //i 表示行数控制打印多少行
            for(int j=1;j<=i;j++){  //内循环控制列数,且每行的列数随行数的增加而增加
                System.out.print("*");
            }
            System.out.println(); //每打印一行执行换行语句
        }

        System.out.println("============");

    //第二个图形
        for(int i=1;i<=6;i++){
         //先打印空格
            for(int k=1;k<=6-i;k++){  //第一个内循环控制每行的空格数,随行号增加1而减少1
                System.out.print(" ");
            }
            for(int j=1;j<=i;j++){   //第二个内循环控制打印的*列数,随行号增加1而增加1 
                System.out.print("*");  
            }
            System.out.println();
        }

        System.out.println("============");

    //第三个图形  与第一个图形相似
         for(int i=6;i>=1;i--){
            for(int j=1;j<=i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=============");

    //第四个图形   与第二图形相似
       for(int i=1;i<=6;i++){
            for(int k=1;k<=i-1;k++){
                System.out.print(" ");
            }
            for(int j=1;j<=7-i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
/* 打印图形      i  j                      k  i  j
       *        1  1               *      5  1  1
       **       2  2              **      4  2  2
       ***      3  3             ***      3  3  3
       ****     4  4            ****      2  4  4
       *****    5  5           *****      1  5  5
       ******   6  6          ******      0  6  6
       *****    7  5           *****      1  7  5
       ****     8  4            ****      2  8  4
       ***      9  3             ***      3  9  3
       **       10 2              **      4  10 2  
       *        11 1               *      5  11 1
 */

class Demo03{
    public static void main(String[] args) {
   //第一个图形
         for(int i=1;i<=11;i++){
            for(int j=1;j<=i&&(i+j)<=12;j++){ //该图形的列数是随着行号的增加呈现先增在减的趋势的,且为对称图形,所以可以取最中间一行作为分水岭,且当行号大于第六行时,每行的行号加上该行的列数都为一个固定值,所以判断条件有两个必须同时满足
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("============");

    //第二个图形
         for(int i=1;i<=9;i++){
          //先打印空格
            for(int k=1;k<=Math.abs(i-5);k++){//该图形的空格列数是随着行号的增加呈现先减再增的趋势的,且为对称图形,所以可以取最中间一行作为分水岭,因为中间空格数为0.此时考虑绝对值,空格数的区间在[-5.5]之间,所以可以用i-5取绝对值得方法来得到数字的变化,其中Math.abs()是对一个数求绝对值
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){  //与图一原理相同
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
   
/* 打印图形
            *                     *                 1    
           * *                   * *               1  2
          * * *                 *   *             1    3
         * * * *               *     *           1      4
        * * * * *             *       *         1        5
         * * * *               *     *           1      4
          * * *                 *   *             1    3
           * *                   * *               1  2
            *                     *                 1
  */
class Demo04{
    public static void main(String[] args) {
   //第一个图形
          for(int i=1;i<=9;i++){
            for(int k=1;k<=Math.abs(i-5);k++){ 
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){ //此图形是Demon03程序中第二个图形的变体
                System.out.print("* "); //在此处每打印一个*后面多加一个空格就可形成菱形
            }
            System.out.println();
        }
        System.out.println("============");

    //第二个图形
         for(int i=1;i<=9;i++){
            for(int k=1;k<=Math.abs(i-5);k++){
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){
                if(j==1||j==i||j+i==10){
                    System.out.print("* "); //此图形与图一相似,图中已经给出具体的特殊位置,只要将特殊的位置打印其他为空就可以了
                }else{
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
    }
}
/*
   求两个数的最大公约数
*/
import java.util.Scanner;
class Demon05{
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.print("请输入两个数字:"); //提示用户输入两个数字
        int a=scanner.nextInt();
        int b=scanner.nextInt();  //接受用户输入的两个整数
        int gcd=1;
      //首先判断两个数中谁最小,用最小的数做循环的继续条件,这里用到一个三元运算符,直接将最小的数作为返回结果给了判断条件
        for(int i=2;i<=(b<a?b:a);i++){  
            if(a%i==0 && b%i==0){  // 从1开始找都能被两个整数整除的因子,如果余数为0,表示此i的值为两个数的因子
                gcd=i; //此时的i值并不是最大的,要继续查找直到循环结束
            }
        }
        System.out.println(gcd);  //最后显示最大的公约数
    }
}

import java.util.Scanner;
class Demon06{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入要打印的层数:"); //提示用户输入打印的层数
        int x = in.nextInt(); //接受用户输入的数字
        for(int i=1;i<=x;i++){  //将数字传进来控制打印的行数
            for(int k=1;k<=x-i;k++){ //空格随行值增加而减少
                System.out.print("  ");
            }
            for(int j=-(i-1);j<=i-1;j++){ //每行数字先减再加
                System.out.print(Math.abs(j)+1+" ");  //因为从j负数开始,所以要对j取绝对值
            }
            System.out.println();
        }
    }
    
}

class Demon07{
    public static void main(String[] args) {
        for(int i=1;i<=10000;i++){
            int sum=0; //每个数都有一个和
            for(int j=1;j<=i/2;j++){ //找出一个被除数一半以下的数的除数就可以判断该被除数有哪些除数
                if(i%j==0){  //如果该j的取值能被i整除,即为i的除数
                    sum+=j;   //将其所有的除数相加
                }
            }
            if(sum==i){   //如果该数的所有除数相加的和等于它本身,则为完全数
                System.out.println(i);
            }
        }
    }
}

class Demon08{
    public static void main(String[] args){
        /*
                  0
                0 1 0
              0 1 2 1 0
            0 1 2 3 2 1 0
         */
        for(int i=1;i<=8;i++){   //总共为8行
            for(int k=1;k<=8-i;k++){  //每行空格数减一
                System.out.print("    ");  //因为随着数组位数增加所占宽度越大,所以给每位数之间分配4个空格
            }
            for(int j=-(i-1);j<=i-1;j++){ //用区间表示每行的列数
                System.out.printf("%-4.0f",Math.pow(2,i-1-Math.abs(j))); // 每行的数组都是2的多少次幂,且如上分析是先加再增,所以对幂取区间差的绝对值
            }
            System.out.println();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值