2014-10-10 4 views
3

Точкой этой программы является чтение символов из txt-файла и сохранение их в 2D-массив. После этого информация должна быть напечатана таким же образом, как она считывается из файла txt.Печать содержимого двумерного массива

Вот код, который я до сих пор:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) throws FileNotFoundException { 
     File file = new File("sampleMaze.txt"); 
     Scanner s = new Scanner(file); 
     Maze maze = new Maze(s); 
     System.out.print(file); 
    } 
} 

import java.io.File; 
import java.util.Scanner; 
import java.util.Arrays; 

public class Maze { 

    public int width; 
    public int height; 
    public Square [] [] sampleMaze; 

    Maze(Scanner file) { 
     this.width = Integer.parseInt(file.next()); 
     this.height = Integer.parseInt(file.next()); 
     this.sampleMaze = new Square [height] [width]; 

     for (int i = 0 ; i < height ; i++) { 
      String s = file.next(); 

      for (int j = 0 ; j < width ; j++) { 
       sampleMaze[height][width] = Square.fromChar(s.charAt(j)); 
      } 

     } 
     System.out.print(sampleMaze[height][width]); 
    } 

} 

public enum Square { 
    WALLS("#"), 
    OPEN_SPACES("."), 
    START("o"), 
    FINISH("*"); 

    String x; 

    Square(String x) { 
     this.x = x; 
    } 

    public String toString() { 
     return x; 
    } 

    public static Square fromChar(char x) { 
     if (x == '#') 
      return WALLS; 
     else if (x == '.') 
      return OPEN_SPACES; 
     else if (x == 'o') 
      return START; 
     else if (x == '*') 
      return FINISH; 
     else 
      throw new IllegalArgumentException(); 
    } 
} 

И это ошибка я получаю при попытке достичь цели проекта:

Exception in thread "main" java.lang.NumberFormatException: For input string: "############" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at Maze.<init>(Maze.java:15) 
    at Main.main(Main.java:20) 

Кто-нибудь знает, что происходит вот и как я могу это исправить ??

(Это то, что находится в файле sampleMaze.txt) Что мне нужно для этого сделать, это печать, как это:

############ 
#.#........# 
#.#.######.# 
#.#....#...# 
#.###.*#.#.# 
#...####.#.# 
#.#.#..#.#.# 
#.#.#.##.#.# 
#o#......#.# 
+0

когда вы разборе Int для вашей ширины и высоты он trowing в NumberFormatException, что означает то, что он читает из файла разве в Int быть разобраны – JRowan

+0

Более конкретно, это строка «############», предполагающая, что ширина и высота отсутствуют во входном файле. –

+0

Итак, я должен написать код как таковой: this.width = Character.parseChar (file.next()); this.height = Character.parseChar (file.next()); – Wes

ответ

1

Если вы хотите сохранить ширина/высота в файле, что метод может работать с небольшой настройкой. Вы можете сделать первые две строки файла, содержащие ширину и высоту лабиринта, и использовать parseInt(file.nextLine()) вместо parseInt(file.next()). Входной файл может выглядеть следующим образом:

12 
9 
############ 
#.#........# 
#.#.######.# 
#.#....#...# 
#.###.*#.#.# 
#...####.#.# 
#.#.#..#.#.# 
#.#.#.##.#.# 
#o#......#.# 

и код, вместо

this.width = Integer.parseInt(file.next()); 
this.height = Integer.parseInt(file.next()); 

будет

this.width = Integer.parseInt(file.nextLine()); 
this.height = Integer.parseInt(file.nextLine()); 

Намного лучше, чтобы получить ширину и высоту будет определить их из фактических размеров файла (Примечание: в том числе размеры в верхней части входного файла для этого метода будут испорчены). Вместо того, чтобы передавать в сканере конструктор Maze, пройдите в самом файле. Затем установите width = new Scanner(file).nextLine().length() и height = file.length(), где file не является сканером, а сам файл. Затем установите scanner = new Scanner(file) и используйте это для остальной части метода.

+0

Итак, я изменил свои конструкторы на то, как вы упомянули, но я честно смущен тем, что вы пытаетесь сказать в своем последнем абзаце. Я довольно новичок, когда дело доходит до обучения программированию, поэтому я пытаюсь выяснить самый простой способ выполнить эту задачу. – Wes

+0

Я мог бы сформулировать это лучше. Чтобы получить ширину, вы создаете новый файл сканера и получаете первую строку файла. Затем вы просто получаете длину этой строки.Чтобы получить высоту, вызовите метод length() файла, который возвращает количество строк в файле – wgoodall01

0

Самый простой способ:

 Console.WriteLine("Array : "); 
     Console.WriteLine("[{0}]", string.Join(", ", <your array>)); 
Смежные вопросы