二维数组
/*
二维数组
数组中的每一个元素又是一个数组
声明
int[][] a;
*/
public static void main(String[] args) {
/*
new int[3][3]
创建一个二维数组,二维数组的长度为3,二维数组中的一维数组长度也是3
{{0,0,0},{0,0,0},{0,0,0}}
0 1 2 0 1 2 0 1 2
0 1 2
*/
new int[3][] //创建一个长度为3的二维数组,其中每一个一维数组的值为空(null)
/*
二维数组遍历
循环每次取出二维数组中的第i个
*/
int[][]b=new int[][]{{1,2,3},{1,2,3},{1,2,3}};
for (int i = 0; i < b.length; i++) {
//遍历每次取出的一维数组
for (int j = 0; j <b[i].length; j++) {
System.out.print(b[i][j]+"\t");
}
System.out.println();//换行
}
}
稀疏数组
/*稀疏数组
* 含义:稀疏数组一般是将一个数组中有意义的值的信息存放在另一个数组中。
结构: 列数一般为3,分别表示横向下标,纵向下标,值.(第二行开始)
第一行一般存原始数组的行数,原始数组的列数,以及有意义的值的个数。根据情况可以调整
优点:可以对数据进行压缩。*/
public static void main(String[] args) {
//定义一个二维数组
System.out.println("原数组:");
int[][]a=new int[9][9];
a[1][2]=1;
a[2][1]=2;
a[3][3]=3;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
//稀疏数组
int t=0;//定义一个值判断有用的个数
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){
t++;
}
}
}
//创建一个稀疏数组
int[][]x=new int[t+1][3];
x[0][0]=a.length;
x[0][1]=a[0].length;
x[0][2]=t;
//将有用的数存放到稀疏数组中
int c=1;//用来记录稀疏数组中每行的数据
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){
x[c][0]=i;
x[c][1]=j;
x[c][2]=a[i][j];
c++;
}
}
}
//打印稀疏数组
System.out.println("稀疏数组:");
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[i].length; j++) {
System.out.print(x[i][j]+"\t");
}
System.out.println();
}
//将稀疏数组转化为所对应的数组
//创建新数组
int[][]a2=new int[x[0][0]][x[0][1]];
//将有用的数传入数组
int c1=1;
for (int i = 0; i < a2.length; i++) {
for (int j = 0; j <a2[i].length ; j++) {
if (i==x[c1][0]&&j==x[c1][1]){
a2[i][j]=x[c1][2];
if (c1==t)break;//防止超出稀疏数组
c1++;
}
}
}
//打印新数组
System.out.println("新数组为:");
for (int i = 0; i < a2.length; i++) {
for (int j = 0; j < a2[i].length; j++) {
System.out.print(a2[i][j]+"\t");
}
System.out.println();
}
}