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
相关推荐
草履虫建模10 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq12 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq12 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
qq_2975746712 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚12 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学12 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang2015092812 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚13 小时前
Java入门17——异常
java·开发语言
爱吃rabbit的mq13 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
缘空如是13 小时前
基础工具包之JSON 工厂类
java·json·json切换