打印流数组
PrintStream Arrays
我正在尝试制作一种方法,该方法将 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 文件,但它不会在文本文件中写入任何字符,从而使文件留空。为什么是这样?
您在 if
中颠倒了条件。
取第一个:
if (list[i][j] <= 21 && list[i][j] >= 40) {
这意味着当有一个数小于 21且大于 40时为真。显然,这不可能发生。您需要将条件反转为:
if (list[i][j] <= 40 && list[i][j] >= 21) {
其余的 if
也是如此。
此外,请注意您需要在方法结束时关闭 PrintStream
。一个好的做法是用 try-with-resources 语句包装它。
您还需要刷新输出流才能真正写入文件,否则它只是在缓冲区中。在程序结束时,执行 output.close();
我正在尝试制作一种方法,该方法将 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 文件,但它不会在文本文件中写入任何字符,从而使文件留空。为什么是这样?
您在 if
中颠倒了条件。
取第一个:
if (list[i][j] <= 21 && list[i][j] >= 40) {
这意味着当有一个数小于 21且大于 40时为真。显然,这不可能发生。您需要将条件反转为:
if (list[i][j] <= 40 && list[i][j] >= 21) {
其余的 if
也是如此。
此外,请注意您需要在方法结束时关闭 PrintStream
。一个好的做法是用 try-with-resources 语句包装它。
您还需要刷新输出流才能真正写入文件,否则它只是在缓冲区中。在程序结束时,执行 output.close();