2014-10-20 4 views
1

У меня есть три аргумента запуска, которые являются минимальной шириной, максимальной шириной и именем текстового файла. Текстовые файлы заполняются одной длинной строкой случайных символов. Я хочу поместить каждого персонажа в пятно сетки. Но все, что я получаю, это сама строка из файла. Как создать сетку?Сделать сетку из строки в текстовом файле

class GridCipher{ 

    static int minGridWidth; 
    static int maxGridWidth; 

    static File inputFile; 

    public static void main(String[] args) throws FileNotFoundException { 
     if (handleArguments(args)) 
     processInput(); 

    } 

    static final String usage = "Usage: GridWriter min_width max_width input_file_name"; 

    static boolean handleArguments(String[] args) { 
     // Check for correct number of arguments 
     if (args.length != 3) { 
     System.out.println("Wrong number of command line arguments."); 
     System.out.println(usage); 
     return false; 
     } 

    try { 
     minGridWidth = Integer.parseInt(args[0]); 
     maxGridWidth = Integer.parseInt(args[1]); 
     } catch (NumberFormatException ex) { 
     System.out.println("min_width and max_width must be integers."); 
     System.out.println(usage); 
     return false; 
     } 

     inputFile = new File(args[2]); 
     if (!inputFile.canRead()) { 
     System.out.println("The file " + args[2] + " cannot be opened for input."); 
     return false; 
     } 

     return true; 
    } 

    static void processInput() throws FileNotFoundException { 
     Scanner input = new Scanner(inputFile); 
     String line = input.nextLine(); 
     int length = line.length(); // number of characters. 

    // Try each width in the appropriate range 
     for (int width = minGridWidth; width <= maxGridWidth; width++) { 
     // Determine heigth of grid 
     int height = line.length()/width; 

     // Add one to height if there's a partial last row 
     if (line.length() % width != 0) 
      height += 1; 

     loadUnloadGrid(line, width, height); 
     } 
    } 

    static void loadUnloadGrid(String line, int width, int height) { 
     char grid[][] = new char[height][width]; 

     // Determine number long columns 
     int longColumn = line.length() % width; 
     if (longColumn == 0) 
     longColumn = width; 

     //Load the input data into the grid by column 
     int charCount = 0; 
     for (int c = 0; c < width; c++) { 
     for (int r = 0; r < height; r++) { 
      if (r < height - 1 || c < longColumn) { 
       grid[r][c] = line.charAt(charCount); 
       charCount += 1; 
      } 
     } 
     } 

     // Output data from the grid by rows 
     for (int r = 0; r < height - 1; r++) { 
     for (int c = 0; c < width; c++) { 
      System.out.print(grid[r][c]); 
     } 
     } 
     // Special handling for last row 
     for (int c = 0; c < longColumn; c++) { 
     System.out.print(grid[height - 1][c]); 
     } 
     System.out.println("\""); 
    } 
} 

Если текстовый файл имеет ABCDE, я просто вернусь ABCDE. Я хотел бы, чтобы символы в сетке определялись моей минимальной и максимальной шириной.

+0

Не могли бы вы объяснить людям, как я, что вы имеете в виду символы в препояшьтесь определяется моим мин и максимальной шириной? –

+0

Вы пробовали отлаживать код? –

+0

, если я выбираю ширину, чтобы быть 2, тогда сетка будет AB, CD, E оставлена ​​с дополнительным пространством. – Jordan

ответ

0

Если я вас правильно понял вы хотите ABCDEFG в

A B C 
D E F 
G 

но во фрагменте писать его на экране вы пропустите символ новой строки

// Output data from the grid by rows 
     for (int r = 0; r < height - 1; r++) { 
     for (int c = 0; c < width; c++) { 
      System.out.print(grid[r][c]); 
     } 
     } 

должен быть

// Output data from the grid by rows 
     for (int r = 0; r < height - 1; r++) { 
     for (int c = 0; c < width; c++) { 
      System.out.print(grid[r][c]); 
     } 
     System.out.println(); 
     } 
0

Печать сетка неверна в вашей программе.

Изменение ниже

// Output data from the grid by rows 
for (int r = 0; r < height - 1; r++) { 
    for (int c = 0; c < width; c++) { 
     System.out.print(grid[r][c]); 
    } 
} 

этот код

for(char[] arr : grid) { 
    System.out.println(Arrays.toString(arr)); 
}