Day28-20260124

复习稀疏数组,详解

java 复制代码
package com.array;

import java.util.Arrays;

public class Man {
    public static void main(String[] args) {
        //array1
        //原始数组
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	1	0	0	0	0	0	0	0	0
        //0	0	0	2	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //0	0	0	0	0	0	0	0	0	0	0
        //1.创建一个11*11的二维数组,0:没有棋子,1:白色棋子,2:黑色棋子
        int[][] array1 = new int[11][11];//创建多维数组,11*11
        array1[1][2] = 1;//直接对对应的坐标赋值
        array1[2][3] = 2;
        System.out.println("输出原始数组array1");//提示语句
        for (int[] ints : array1) {//增强型for循环。for-each   // 操作:array1.for+Enter
            // 第一遍for循环,每一次从array1中取出一行数据用ints表示
            for (int anInt : ints) {//第二遍for循环,遍历这一行(ints)里面的每一个数据用anInt表示
                //遍历:traversal,按一定顺序访问数据结构(如:数组、集合、链表等)中的每一个元素,通常用于读取、处理、或统计元素。
                System.out.print(anInt+"\t");//输出一行中的数据,并用空格隔开,print不换行
            }
        System.out.println();//每一行输出结束后换行
        }
        System.out.println("=============================");//分割
        //稀疏数组
        int sum = 0;//求有效数字个数
        for (int i = 0; i < 11; i++) {//每一行的
            for (int j = 0; j < 11; j++) {//每一列的
                if (array1[i][j]!=0) {//判定条件
                    sum++;//统计的个数
                }
            }
        }
        System.out.println("有效数据个数:"+sum);
        int[][] array2 = new int[sum+1][3];//创建一个新的数组,已知3列固定(行、列、值),行数为sum+1(多一行表头)
        array2[0][0] = 11;//对表头进行赋值,行
        array2[0][1] = 11;//列
        array2[0][2] = sum;//值
        int count = 0;
        for (int i = 0; i < array1.length; i++) {//遍历array1数组中的行
            for (int j = 0; j < array1[i].length; j++) {//遍历array1每一行中的数据
                if (array1[i][j]!=0){//判定条件
                    count++;//行自增,每一个数据的坐标和值为一行,每有一个值就需要一行
                    array2[count][0] = i;//count:第几行,array1中第i行,就是array2中坐标[count][0]的数值
                    array2[count][1] = j;//array1中的第j个,就是array2中坐标[count][1]的数值
                    array2[count][2] = array1[i][j];//array1中坐标[i][j]的值就是array2中坐标[count][2]的数值
                }
            }
        }
        //输出array2数组
        System.out.println("输出稀疏数组array2");//提示输出
        for (int i = 0; i < array2.length; i++) {//遍历一边array2中的数值,第i行
            System.out.println(array2[i][0]+"\t"
                    +array2[i][1]+"\t"
                    +array2[i][2]+"\t");//把三个元素输出后换行
        }
        System.out.println("++++++++++++++++++++++++");
        //另一种输出方法
        for (int[] ints : array2) {//原理同25行代码
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //array2:
//        有效数据个数:2
//        11 11	2
//        1	 2	1
//        2	 3	2
        System.out.println("============================");
        System.out.println("还原");
        //还原
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	1	0	0	0	0	0	0	0	0
//        0	 0	0	2	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
//        0	 0	0	0	0	0	0	0	0	0	0
        int[][] array3 = new int[array2[0][0]][array2[0][1]];//新建一个数组array3,行列的值在array2中读取,读取稀疏数组的值
        for (int i = 1; i < array2.length; i++) {//遍历一遍array2的数据,i是行
            //i=1:因为第0行是它的头部信息(11,11,2)不需要读取
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
            //将array2中的i行2列的值赋值给array3,赋值后在array3中的坐标数据在array2中取值
            //array2[i][0]:array2中i行0列的值
            //array2[i][1]:array2中i行1列的值
        }
        //输出还原的数组
        System.out.println("输出还原的数组array3");
        for (int[] ints : array3) {//原理同25行代码
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
java 复制代码
输出原始数组array1
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
=============================
有效数据个数:2
输出稀疏数组array2
11	11	2	
1	2	1	
2	3	2	
++++++++++++++++++++++++
11	11	2	
1	2	1	
2	3	2	
============================
还原
输出还原的数组array3
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	

进程已结束,退出代码为 0

个人练习

java 复制代码
package com.array;

import java.util.Arrays;

public class Man1 {
    public static void main(String[] args) {
        /*
        0  0  0  22 0  0  15
        0  11 0  0  0  17 0
        0  0  0  -6 0  0  0
        0  0  0  0  0  39 0
        91 0  0  0  0  0  0
        0  0  28 0  0  0  0
         */
        //原始数组
        int[][] array1 = new int[6][7];
        System.out.println("原始数据array1:");
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                array1[0][3] = 22;
                array1[0][6] = 15;
                array1[1][1] = 11;
                array1[1][5] = 17;
                array1[2][3] = -6;
                array1[3][5] = 39;
                array1[4][0] = 91;
                array1[5][2] = 28;
                System.out.print(array1[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("++++++++++++++++++++++++++++");
        //第二种
        int[][] array1_1 = new int[6][7];
        array1_1[0][3] = 22;
        array1_1[0][6] = 15;
        array1_1[1][1] = 11;
        array1_1[1][5] = 17;
        array1_1[2][3] = -6;
        array1_1[3][5] = 39;
        array1_1[4][0] = 91;
        array1_1[5][2] = 28;
        for (int[] ints : array1_1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("============================");
        //有效数据个数
        int sum = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                if (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效数字个数为:"+sum);
        //稀疏数组
        int count = 0;
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 6;
        array2[0][1] = 7;
        array2[0][2] = sum;
        for (int i = 0;i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0) {
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("输出稀疏数组为:");
        for (int[] ints : array2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //另一种输出方式
        System.out.println("++++++++++++++++++++++++++++");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                    +array2[i][1]+"\t"
                    +array2[i][2]+"\t");
        }
        System.out.println("============================");
        //还原数组
        System.out.println("还原数组:");
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        //输出还原数组
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //另一种输出方法
        System.out.println("++++++++++++++++++++++++++++");
        for (int i = 0; i < array2[0][0]; i++) {
            for (int j = 0; j < array2[0][1]; j++) {
                if (j==6){
                    System.out.print(array3[i][j]+"\t");
                    System.out.println();
                    continue;//跳过当前轮继续执行剩余循环
                    //break;//终止当前循环/switch
                }
                System.out.print(array3[i][j]+"\t");
            }
        }
    }
}
java 复制代码
原始数据array1:
0	0	0	22	0	0	15	
0	11	0	0	0	17	0	
0	0	0	-6	0	0	0	
0	0	0	0	0	39	0	
91	0	0	0	0	0	0	
0	0	28	0	0	0	0	
++++++++++++++++++++++++++++
0	0	0	22	0	0	15	
0	11	0	0	0	17	0	
0	0	0	-6	0	0	0	
0	0	0	0	0	39	0	
91	0	0	0	0	0	0	
0	0	28	0	0	0	0	
============================
有效数字个数为:8
输出稀疏数组为:
6	7	8	
0	3	22	
0	6	15	
1	1	11	
1	5	17	
2	3	-6	
3	5	39	
4	0	91	
5	2	28	
++++++++++++++++++++++++++++
6	7	8	
0	3	22	
0	6	15	
1	1	11	
1	5	17	
2	3	-6	
3	5	39	
4	0	91	
5	2	28	
============================
还原数组:
0	0	0	22	0	0	15	
0	11	0	0	0	17	0	
0	0	0	-6	0	0	0	
0	0	0	0	0	39	0	
91	0	0	0	0	0	0	
0	0	28	0	0	0	0	
++++++++++++++++++++++++++++
0	0	0	22	0	0	15	
0	11	0	0	0	17	0	
0	0	0	-6	0	0	0	
0	0	0	0	0	39	0	
91	0	0	0	0	0	0	
0	0	28	0	0	0	0	

进程已结束,退出代码为 0
相关推荐
Java程序员威哥2 小时前
SpringBoot2.x与3.x自动配置注册差异深度解析:从原理到迁移实战
java·大数据·开发语言·hive·hadoop·spring boot·后端
TracyCoder1232 小时前
LeetCode Hot100(2/100)——49. 字母异位词分组 (Group Anagrams)。
算法·leetcode
cheems95272 小时前
【javaEE】文件IO
java
lixinnnn.2 小时前
字符串拼接:Cities and States S
开发语言·c++·算法
AI街潜水的八角2 小时前
医学图像算法之基于MK_UNet的肾小球分割系统3:含训练测试代码、数据集和GUI交互界面
算法
larance2 小时前
方差和标准差
人工智能·算法·机器学习
微露清风2 小时前
系统性学习Linux-第一讲-Linux基础指令
java·linux·学习
TracyCoder1232 小时前
LeetCode Hot100(3/100)——128.最长连续序列
算法·leetcode
tqs_123452 小时前
tcc中的空回滚和悬挂问题
java·数据库