zoukankan      html  css  js  c++  java
  • 稀疏数组案例练习

    blog day1

    需求分析

    现有某行某列棋盘,棋盘上随机分布有部分棋子(棋子数目多,这样才有压缩价值)
    现在需要存储棋子的位置,如果使用正常的二维数组,数组太大,而且在棋盘开始下棋时,会造成大量无效的数据,所以此处选择稀疏数组这种数据结构节省空间
    

    image

    上面棋盘的棋子位置假设以左上角为(0,0),白字设为1,黑子设为2,无子设为0
    
    2
    1
    1

    由此可以定义一个棋盘数组

    int checkerBoard[][] = new int[10][10];
    checkerBoard[1][2] = 2;
    checkerBoard[2][2] = 1;
    checkerBoard[3][1] = 1;
    

    打印棋盘需要用到二维数组的遍历

    for(int i = 0; i < 10; i++){
    	for(int j = 0; j < 10; j++){
    		System.out.printf("%d	", checkerBoard[i][j]);
    	}
    	System.out.println();
    }
    

    需要通过棋子的计数来获取稀疏数组的最大行数,稀疏数组的列数则为,一列为所有棋子行数,一列为所有棋子的列数,一列为棋子的特征值

    // 进行棋子计数
    int count = 0;
    for(int i = 0; i < 10; i++){
    	for(int j = 0; j < 10; j++){
    		if(checkerBoard[i][j] != 0){
    			count++;
    		}
    	}
    }
    
    // 创建一个稀疏数组[conut + 1][3]
    int[][] data = new int[count + 1][3];
    data[0][0] = 10;
    data[0][1] = 10;
    data[0][2] = count;
    

    重新遍历一次棋盘,把所有棋子的数据填入稀疏数组

    // 遍历棋盘存储每个棋子的位置及参数到稀疏数组
    int rowCount = 0;
    for(int i = 0; i < 10; i++){
    	for(int j = 0; j < 10; j++){
    		if(checkerBoard[i][j] != 0){
    			rowCount++;
    			data[rowCount][0] = i;
    			data[rowCount][1] = j;
    			data[rowCount][2] = checkerBoard[i][j];
    		}
    	}
    }
    

    打印稀疏数组

    // 打印此时的稀疏数组
    for(int i = 0; i < count + 1; i++){
    	System.out.printf("%d	%d	%d	
    ", data[i][0], data[i][1], data[i][2]);
    	}
    

    数据写入文件

    从文件中读取数据

    上面两步在IO里面,还没学

    // TODO 后续增加IO操作
    

    遍历稀疏数组提取数据放到新棋盘

    int[][] checkerBoard2 = new int[data[0][0]][data[0][1]];
    for(int i = 1; i < count + 1; i++){
        checkerBoard2[data[i][0]][data[i][1]] = data[i][2];
    }
    
    // 打印新棋盘
    for(int i = 0; i < data[0][0]; i++){
        for(int j = 0; j < data[0][1]; j++){
            System.out.printf("%d	", checkerBoard2[i][j]);
        }
        System.out.println();
    }
    

    知识点

    1. 稀疏数组的数据结构
    2. 练习二维数组的遍历
    3. 格式化输出的写法
  • 相关阅读:
    搭建Springboot+mybatis+redis+druid
    搭建Springboot+mybatis+redis+druid
    Uber是一部无所不在的数字出行物联网
    Uber是一部无所不在的数字出行物联网
    Uber是一部无所不在的数字出行物联网
    Uber是一部无所不在的数字出行物联网
    详解光伏扶贫模式 参与部门和各扮演的角色
    详解光伏扶贫模式 参与部门和各扮演的角色
    深入解析:从源码窥探MySQL优化器
    如何解决NetBeans9出现java.lang.StackOverflowError问题
  • 原文地址:https://www.cnblogs.com/rainful/p/14819980.html
Copyright © 2011-2022 走看看