繁体   English   中英

使用CSV文件中的数据打印数字

[英]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];

将来,在使用类级别的变量(例如上面的numDatadata )时要格外小心。 通常,最好使用局部变量作为函数的输入/输出,这将帮助您避免出现此类错误,还可以使代码更简洁,更易于维护。

编辑: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM