【问题标题】:PrintStream Arrays打印流数组
【发布时间】:2015-11-17 07:33:29
【问题描述】:

我正在尝试创建一个将int[][] 列表和文件名字符串outName 作为参数的方法,读取每个list[i][j] 条目并将它们相应地转换为ascii 字符。

这就是我所拥有的:

public static void makeAscii(int[][] list, String outName) {
    try {
    PrintStream output = new PrintStream(new File(outName));
    for (int i = 0; i<list.length; i++) {
        for (int j = 0; j<list[0].length; j++){
        if (list[i][j] <= 20 && list[i][j] >= 0) {
            System.out.print('M');
        }
        if (list[i][j] <= 21 && list[i][j] >= 40) {
            output.print('L');
        }
        if (list[i][j] <= 41 && list[i][j] >= 60) {
            output.print('I');
        }
        if (list[i][j] <= 61 && list[i][j] >= 80) {
            output.print('o');
        }
        if (list[i][j] <= 81 && list[i][j] >= 100) {
            output.print('|');
        }
        if (list[i][j] <= 101 && list[i][j] >= 120) {
            output.print('=');
        }
        if (list[i][j] <= 121 && list[i][j] >= 140) {
            output.print('*');
        }
        if (list[i][j] <= 141 && list[i][j] >= 160) {
            output.print(':');
        }
        if (list[i][j] <= 161 && list[i][j] >= 180) {
            output.print('-');
        }
        if (list[i][j] <= 181 && list[i][j] >= 200) {
            output.print(',');
        }
        if (list[i][j] <= 201 && list[i][j] >= 220) {
            output.print('.');
        }
        if (list[i][j] <= 221 && list[i][j] >= 255) {
            output.print(' ');
        }
        }
        System.out.println();
    }
    }
    catch (FileNotFoundException e) {
        System.out.println("Coudln't create file");
        System.exit(-1);
    }

}

我遇到的问题是,虽然此方法相应地创建了一个 txt 文件,但它并没有在文本文件中写入任何字符,因此将文件留空。为什么是这样?

【问题讨论】:

    标签: java arrays printstream


    【解决方案1】:

    您已经反转了ifs 中的条件。

    拿第一个:

    if (list[i][j] <= 21 && list[i][j] >= 40) {
    

    这意味着当有一个数字同时小于 21和大于 40时,这将是真的。显然,这不可能发生。您需要将条件反转为:

    if (list[i][j] <= 40 && list[i][j] >= 21) {
    

    ifs 的其余部分也是如此。

    另外,请注意,您需要在方法结束时关闭 PrintStream。一个好的做法是用 try-with-resources 语句包装它。

    【讨论】:

      【解决方案2】:

      您还需要刷新输出流以实际写入文件,否则它只是在缓冲区中。在程序结束时,执行output.close();

      【讨论】:

        猜你喜欢
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        相关资源
        最近更新 更多