我正在尝试创建一个小型的机器学习系统,该系统可以从csv文件中打印图片模式。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class PicturePrinter {
BufferedReader bufferedReader = null;
String line = "";
int numData = 0;
int[][] data = new int[20][65];
public void readCSVFile(String csvFile) {
try {
bufferedReader = new BufferedReader(new FileReader(csvFile));
String[] dataFromCSV = null;
while ((line = bufferedReader.readLine()) != null) {
dataFromCSV = line.split(",");
for (String dataFromCSV1 : dataFromCSV) {
numData = Integer.parseInt(dataFromCSV1); //parse data
System.out.print(numData + ",");
for (int row = 0; row < 20; row++) {
for (int col = 0; col < 65; col++) {
data[row][col] = numData; //store numData
}
}
}
System.out.println();
}
} catch (IOException | NumberFormatException ex) {
ex.printStackTrace();
}
}
public void print() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
if (numData == 0) {
System.out.print(" ");
} else if (numData > 6) {
System.out.print(" X ");
} else if (numData < 6 || numData > 0) {
System.out.print(" x ");
} else {
}
}
System.out.println();
}
}
public static void main(String[] args) {
PicturePrinter picturePrinter = new PicturePrinter();
System.out.println("Reading data...");
picturePrinter.readCSVFile("digits.csv");
picturePrinter.print();
}
}
我已经阅读了csv文件并将其存储在数组中,但是随后我不得不将其以8x8格式打印出来。我尝试遍历if语句,就像您在我的
print()
方法中看到的那样,但是它给了我这种感觉。 X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
打印时应该像手写的0。数据看起来像这样。
我该如何解决?我正在尝试我能想到的一切,是否有我想念的东西?提前致谢。
最佳答案
看起来numData
设置为ReadCSVFile
方法中最后读取的数字。然后print()
方法进入并运行许多次,而numData
等于9,这是输入中的最后一个数字。
由于9> 6;你得到一堆X。
只需将这行代码添加到第二个print()
循环定义下的for
方法中:numData = data[row][col];
将来,在使用类级变量(例如上面的numData
和data
)时,请格外小心。通常,最好使用局部变量作为函数的输入/输出,这将帮助您避免出现此类错误,还可以使代码更清洁,更易于维护。
编辑:ReadCSV文件方法中存在另一个问题,其中所有值均已读取,并且numData
设置为最后一个值。然后,双循环进入,并在嵌套数组的每个单元格中写入相同的值(9)
编辑:这是新的print()方法应如下所示:
public void print() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
numData = data[row][col];
if (numData == 0) {
System.out.print(" ");
} else if (numData > 6) {
System.out.print(" X ");
} else if (numData < 6 || numData > 0) {
System.out.print(" x ");
} else {
}
}
System.out.println();
}
这是您新的readCSVFile()方法的外观
public void readCSVFile(String csvFile) {
int currRow = 0;
int currCol = 0;
try {
bufferedReader = new BufferedReader(new FileReader(csvFile));
String[] dataFromCSV = null;
while((line = bufferedReader.readLine()) != null) {
currRow++;
dataFromCSV = line.split(",");
for(String dataFromCSV1 : dataFromCSV) {
currCol++;
numData = Integer.parseInt(dataFromCSV1); //parse data
System.out.print(numData + ",");
data[currRow][currCol] = numData; //store numData
}
System.out.println();
}
} catch(IOException | NumberFormatException ex) {
ex.printStackTrace();
}
}