我正在尝试创建一个小型机器学习系统,从CSV文件中打印图片模式。
}
我已经读取了CSV文件并将其存储在数组中,但接下来我需要以8×8的形式打印出来。我尝试使用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); //解析数据 System.out.print(numData + ","); data[currRow][currCol] = numData; //存储numData } System.out.println(); } } catch(IOException | NumberFormatException ex) { ex.printStackTrace(); } }