[英]Print a digit using data from csv file
我正在嘗試創建一個小型的機器學習系統,該系統可以從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
方法中最后讀取的ReadCSVFile
。 然后, print()
方法進入並運行多次, numData
等於9,即輸入中的最后一個數字。
由於9> 6; 你得到一堆X。
只需將這行代碼添加到第二個for
循環定義下的print()
方法中即可:
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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.