2015-11-17 8 views
1

Я пытаюсь сделать метод, который принимает int[][] список и имя файла String outName как параметры, читает каждую запись list[i][j] и преобразует их в символ ascii соответственно.PrintStream Arrays

Это то, что у меня есть:

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); 
    } 

} 

Проблема, что у меня есть то, что в то время как этот метод создает текстовый файл, соответственно, он не пишет никаких символов в текстовом файле, таким образом, оставляя файл пустым , Почему это?

ответ

2

Вы перевернули условия в своих if s.

Возьмите первый:

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.

0

Вам также необходимо очистить выходной поток, чтобы фактически записать его в файл, иначе он просто находится в буфере. В конце вашей программы сделайте output.close();