双层循环

外层循环记行数
内层循环记个数

项目流程

项目分析
代码逻辑
代码实现

数组

声明一个变量就是在内存空间划出一块合适的空间(堆区)
声明一个变量就是在内存空间划出一串连续的空间(栈区)

数组下角标从零开始

数组的结构和基本要素

-标识符:数组的名称,用于区分不同的数组
-数组元素:向数组中存放的数据
-元素下标:对数组元素进行编号
-元素类型:数组元素的数据类型

排序Arrays.sort(数组名);自动排序

重点分析

双重循环之三角形打印

三角形打印中的外部循环控制的是三角形的高度而内循环控制的是在每一行点数的个数

它的循环逻辑是在内循环完毕后再进行外循环


public static void main(String[] args) {
        //-从控制台输入直角三角形的高度
        //-每行*的数目依次为1、3、5.
        System.out.print("请输入直角三角形的行数:");
        Scanner sc = new Scanner(System.in);
        int rows = sc.nextInt();
        for (int i = 1; i < rows; i++) {
            //外循环控制行数
            for (int j = 0; j < i*2-1; j++) {
                //个数循环控制个数
                System.out.print(" * ");
            }
            System.out.print("\n");
        }
    }


运行的结果:

双重循环之倒三角三角形打印

与正三角形不同的是在打印每一行的时候j由原来的由小变大变为由大变小这意味着在打印第一行时的点数最多,最后一行最少

int j = rows-i中-i是因为i的值是浮动的,每一行的点输出完也代表着内循环的结束,进入下一轮的外循环,在下一轮外循环后又重新定义了内循环的j值

public static void main(String[] args) {
        //倒三角.
        System.out.print("请输入直角三角形的行数:");
        Scanner sc = new Scanner(System.in);
        int rows = sc.nextInt();
        for (int i = 0; i < rows; i++) {
            for (int j = rows-i; j > 0; j--) {
                System.out.print(" * ");
            }
            System.out.print("\n");
        }
    }

运行的结果:

双重循环之等腰三角形打印

等腰三角形的每一行前面有多个空格用来完成效果这些空格的原理:倒三角型的点换成了空格

public static void main(String[] args) {
        //等腰三角.
        System.out.print("请输入等腰三角形的行数:");
        Scanner sc = new Scanner(System.in);
        int rows = sc.nextInt();
        //行数
        for (int i = 1; i <= rows; i++) {
            //每行空格的个数=行数-当前行号
            for (int j=1;j<=rows-i;j++) {
                System.out.print(" ");
            }
            //每行*的个数
            for (int j=1;j<=i*2-1;j++) {
                System.out.print("2");
            }
            System.out.print("\n");
        }
    }

运行的结果:

双重循环之棱形打印

java两个循环优化 java双重循环_java两个循环优化

在打印下方的点时,第一行去掉,不然会使上方的最后一行和下方的第一行的点一样

public static void main(String[] args) {
        //棱形.
        System.out.print("请输入等腰三角形的行数:");
        Scanner sc = new Scanner(System.in);
        int rows = sc.nextInt();
        //行数
        for (int i = 1; i <= rows; i++) {
            //每行空格的个数=行数-当前行号
            for (int j=1;j<=rows-i;j++) {
                System.out.print(" ");
            }
            //每行*的个数
            for (int j=1;j<=i*2-1;j++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
        for (int i = rows; i >= 1; i--) {
            //每行空格的个数=行数-当前行号
            for (int j=0;j<=rows-i;j++) {
                System.out.print(" ");
            }
            //每行*的个数
            for (int j=1;j<=(i-1)*2-1;j++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }

运行的结果:

java两个循环优化 java双重循环_算法_02

双重循环之冒泡排序

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

            对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

            针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。

            第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;

            第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的;

            ......

            持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
 

public static void main(String[] args) {
        //数组排序
        char[] num = {'a','c','u','b','e','p','f','z'};
        String str = "";
        System.out.print("原字符序列:");
        for (int i = 0; i < num.length; i++) {
            str+= num[i]+" ";
        }
        System.out.println(str);
        System.out.print("升序排列后:");
        for (int i = 0; i < num.length-1; i++) {
            for (int j = 0; j < num.length-1-i; j++) {
                   if (num[j]>num[j+1]){
                       char temp = num[j];
                       num[j]=num[j+1];
                       num[j+1]=temp;
                   }
            }
        }
        for(int i=0;i<num.length;i++)
            System.out.print(num[i]+" ");
        System.out.print("\n逆序排列后:");
        for (int i = 0; i < num.length-1; i++) {
            for (int j = 0; j < num.length-1-i; j++) {
             //   if (num[j]<num[j+1]){
                    char temp = num[j];
                    num[j]=num[j+1];
                    num[j+1]=temp;
                //}
            }
        }
        for(int i=0;i<num.length;i++)
            System.out.print(num[i]+" ");
    }

概念图


总结

今天对java基础的双循环进行了系统性的复习