实现的思路:

实现代码:
public class SparseArray_a {
// 原始的棋盘是有11*11
// 有两个棋子,在 1,2 和 2,3 这两个地方
// 其中0 代表空的 1 代表黑子 2 代表 蓝子
public static void main(String[] args) {
int chessArr[][] = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[4][6] = 1;
// 输出原始的二维数组
for (int[] row:chessArr) {
for (int data:row ) {
System.out.printf("%d\t",data);
}
System.out.println();
}
// 计算得到一共有多少个棋子
int sum = 0;
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++) {
if(chessArr[i][j] != 0){
sum ++;
}
}
}
System.out.println("一共有棋子:"+sum);
// 创建稀疏数组
int chessArr2[][] = new int[sum+1][3];
chessArr2[0][0] = 11;// 一共是多少行
chessArr2[0][1] = 11;// 一共是多少列
chessArr2[0][2] = sum;// 有几个值
int count = 0;// 计数器
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++) {
if(chessArr[i][j] != 0){
count ++;
chessArr2[count][0] = i;
chessArr2[count][1] = j;
chessArr2[count][2] = chessArr[i][j];
}
}
}
System.out.println("稀疏数组~~~~");
// 输出稀疏数组
for (int i = 0; i<chessArr2.length;i++){
System.out.printf("%d\t%d\t%d\t\n",chessArr2[i][0],chessArr2[i][1],chessArr2[i][2]);
}
// 将稀疏数组保存到文件中去
try {
OutputStream os = new FileOutputStream("xishu.txt");
PrintStream ps = new PrintStream(os);
for (int i = 0; i <= sum; i++) {
for (int j = 0; j <3 ; j++) {
ps.print(chessArr2[i][j]+",");
}
ps.println();
}
ps.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
***********在文件中读取并且转化********************
// 从文件中读取稀疏数组
String[] arr = new String[1024];
try {
BufferedReader bd = new BufferedReader(new FileReader("xishu.txt"));
String line = null;
int number = 0;
while( (line = bd.readLine()) != null){
arr[number] = line;
number++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("从文件中读取的数组。。。");
// 输出从文件读取的数组
for (int i = 0; i < arr.length; i++) {
if(arr[i] != null){
System.out.println(arr[i]);
}
}
//将数组进行转化
String[] arr1 = arr[0].split(",");
int a[] = new int[3];
for (int i = 0; i < arr1.length; i++) {
a[i] = Integer.parseInt(arr1[i]);
}
int sum1 = a[2];
int chessArr4[][] = new int[a[0]][a[1]];
for (int i = 1; i <= a[2]; i++) {
String b[] = arr[i].split(",");
int c[] = new int[b.length];
for (int j = 0; j < b.length; j++) {
c[j] = Integer.parseInt(b[j]);
}
chessArr4[c[0]][c[1]] = c[2];
}
// 从文件读取以后的稀疏数组转化为二维数组
System.out.println("从文件读取以后的稀疏数组转化为二维数组");
for (int[] row:chessArr4 ) {
for (int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
***********未在文件中读取并且转化********************
// 将稀疏数组转化为二维数组
System.out.println("稀疏数组转化为二维数组~~~");
int chessArr3[][] = new int[chessArr2[0][0]][chessArr2[0][1]];
// 将初始化的二维数组赋值为0--> 其实这一步不需要的,因为默认为0
// for (int i = 0; i < chessArr2[0][0]; i++){
// for (int j = 0; j < chessArr2[0][1]; j++) {
// chessArr3[i][j] = 0;
// }
// }
// 将稀疏数组中的值赋值给二维维数组
for (int i = 1; i <= sum ; i++) {
chessArr3[chessArr2[i][0]][chessArr2[i][1]] = chessArr2[i][2];
}
// 输出转化以后的二维数组
for (int[] row:chessArr3) {
for (int data:row ) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
本文介绍了如何使用Java将二维数组转换为稀疏数组,并将转换后的稀疏数组保存到文件中。详细阐述了实现过程和相关代码实现。
241

被折叠的 条评论
为什么被折叠?



