package sjjg;
import java.io.*;
import java.util.ArrayList;
public class SparseArr {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("untitled1\\normalArr.txt"));
String line;//缓冲字符输入流读取数组
ArrayList<int[]> normalArr = new ArrayList<>();//创建存放普通数组的动态数组
int columns = 0;//定义存放原始数组的列数的变量
while ((line = br.readLine()) != null) {
String[] Elements = line.split(" ");//将获取的每行数据分割
int[] rowElements = new int[Elements.length];//将字符串类型的数组转化为int型数组
for (int i = 0; i < Elements.length; i++) {
rowElements[i] = Integer.parseInt(Elements[i]);
columns = i;
}
normalArr.add(rowElements);//将原始数组写入到动态数组中
}
br.close();
int[][] normalArray = new int[normalArr.size()][columns + 1];//定义储存原始数组的有限维数组
int rows = 0;
int nums = 0;
System.out.println("原始的普通数组是:");
for (int[] row : normalArr) {
columns = 0;
for (int data : row) {
normalArray[rows][columns] = data;//将动态数组中的元素复制到有限维数组中
if (data != 0) {
nums++;//统计非零元素的个数
}
System.out.printf("%d\t", data);
columns++;
}
rows++;
System.out.println();
}
int Sparse[][] = new int[nums + 1][3];//转化为稀疏数组
Sparse[0][0] = rows;
Sparse[0][1] = columns;
Sparse[0][2] = nums;
int count = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (normalArray[i][j] != 0) {
count++;
Sparse[count][0] = i;
Sparse[count][1] = j;
Sparse[count][2] = normalArray[i][j];
}
}
}
System.out.println("得到是稀疏数组是:");
for (int i = 0; i < nums + 1; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(Sparse[i][j] + "\t");
}
System.out.println();
}
BufferedWriter bw2 = new BufferedWriter(new FileWriter("untitled1\\Sparse.txt"));
for (int[] row : Sparse) {
for (int data : row) {
bw2.write(String.valueOf(data));//将转化后的稀疏数组写入文件
bw2.write(" ");
bw2.flush();
}
bw2.newLine();
}
bw2.close();
}
}
e.g.
->