复习稀疏数组,详解
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