Заполнение массива объектами из файла .txt? - PullRequest
0 голосов
/ 08 февраля 2012

Я новичок в Java и пытаюсь создать массив с объектами, считанными из файла .txt. Файл выглядит примерно так

Wall 2 2
Wall 3 4
Wall 3 5

.... и т. Д.

Я хочу использовать функцию RandomAccessFile (), чтобы заполнить массив [8] [8] объектами в файле и назначенными им позициями. Я искал вокруг, но не могу найти решение, или, возможно, я не ищу в правильном месте. Любая помощь будет оценена.

EDIT:

Я достиг некоторого прогресса (я думаю) и могу читать из файла .txt, однако я не могу назначить объекты определенным местам в моем массиве ... Это то, что у меня есть

        public static void leer() throws IOException
{
    Scanner s = new Scanner(new File("init.txt"));
        while (s.hasNext()) 
        {

            if (s.next()=="Wall")
            {
            int i = s.nextInt();
            int j = s.nextInt();
            Tablero[i][j]=new Wall();

            }
            else if (s.next()=="Ghost")
            {
            int i = s.nextInt();
            int j = s.nextInt();
            Tablero[i][j]=new Ghost();
            }
        }
}

Теперь я получаю «NoSuchElementException», которое, как я понимаю, означает, что я не определяю стены или призраков должным образом, и, к сожалению, я не совсем понимаю функцию enum ... Опять же, любая помощь будет отличной!

1 Ответ

1 голос
/ 09 февраля 2012

Это будет работать:

Scanner s = new Scanner(new File("map.txt"));
String[][] map = new String[8][8];
while (s.hasNext()) {
    String value = s.next();
    int x = s.nextInt();
    int y = s.nextInt();
    map[x][y] = value;
}

Возможно, вы захотите использовать Enum для хранения элемента в каждой ячейке:

public enum CellType {
    EMPTY, WALL, POWERUP
}

Scanner s = new Scanner(new File("map.txt"));
CellType[][] map = new CellType[8][8];
while (s.hasNext()) {
    String value = s.next().toUpperCase();
    int x = s.nextInt();
    int y = s.nextInt();
    map[x][y] = CellType.valueOf(value);
}

EDIT:

Вы дважды набираете .next() в своем коде. Вам нужно оценить его только один раз, поэтому потребляется только один токен:

public static void leer() throws IOException {  
    Scanner s = new Scanner(new File("init.txt"));  
    while (s.hasNext()) {
        //Read these at the top, so we don't read them twice, and consume too many tokens 
        String item = s.next();
        int i = s.nextInt();  
        int j = s.nextInt();

        if(item == "Wall") {  
            Tablero[i][j] = new Wall();
        }  
        else if(item =="Ghost") {  
            Tablero[i][j]=new Ghost();  
        }  
    }  
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...