2014-12-14 2 views
0

Это может быть простое решение и глупый вопрос, но я все еще новичок в изучении Java. В настоящее время я работаю над кодом для класса, который основывается на текстовой игре. Код ниже - это то, что было дано нам из нашего учебника для работы над игрой. Я изменил фактический текст в текстовом файле в основном и не делать много кода, но я получаю следующее сообщение об ошибке:Помощь в текстовой игре

Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Unknown Source) 
    at BradySkuza58.getRoom(BradySkuza58.java:143) 
    at BradySkuza58.loadRoomsFromFile(BradySkuza58.java:90) 
    at BradySkuza58.main(BradySkuza58.java:39) 

Это код, который я использовал для текста игры.

import java.util.Scanner; 

    class Room 
    { 
     int roomNumber; 
    String roomName; 
    String description; 
    int numExits; 
    String[] exits = new String[20]; 
    int[] destinations = new int[20]; 
} 

public class BradySkuza58 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     // initialize rooms from file 
     Room[] rooms = loadRoomsFromFile("textadventurerooms.txt"); 

     //showAllRooms(rooms); // for debugging 

     // Okay, so let's play the game! 
     int currentRoom = 0; 
     String ans; 
     while (currentRoom >= 0) 
     { 
      Room cur = rooms[currentRoom]; 
      System.out.print(cur.description); 
      System.out.print("> "); 
      ans = keyboard.nextLine(); 

      // See if what they typed matches any of our exit names 
      boolean found = false; 
      for (int i=0; i<cur.numExits; i++) 
      { 
       if (cur.exits[i].equals(ans)) 
       { 
        found = true; 
        // if so, change our next room to that exit's room number 
        currentRoom = cur.destinations[i]; 
       } 
      } 
      if (! found) 
      System.out.println("Sorry, I don't understand."); 
     } 

    } 

    public static Room[] loadRoomsFromFile(String filename) 
    { 
     Scanner file = null; 
     try 
     { 
      file = new Scanner(new java.io.File(filename)); 
     } 
     catch (java.io.IOException e) 
     { 
      System.err.println("Sorry, I can't read from the file '" +filename + "'."); 
      System.exit(1); 
     } 

     int numRooms = file.nextInt(); 
     Room[] rooms = new Room[numRooms]; 

     // initialize rooms from file 
     int roomNum = 0; 
     while (file.hasNext()) 
     { 
      Room r = getRoom(file); 
      if (r.roomNumber != roomNum) 
      { 
       System.err.println("Reading room # " + r.roomNumber + ", but" + roomNum + " was expected."); 
       System.exit(2); 
      } 
      rooms[roomNum] = r; 
      roomNum++; 
     } 
     file.close(); 

     return rooms; 
    } 

    public static void showAllRooms(Room[] rooms) 
    { 
     for (Room r : rooms) 
     { 
      String exitString = ""; 
      for (int i=0; i<r.numExits; i++) 
      exitString += "\t" + r.exits[i] + " (" + r.destinations[i] +")"; 
      System.out.println(r.roomNumber + ") " + r.roomName + "\n" +exitString); 
     } 
    } 

    public static Room getRoom(Scanner f) 
    { 
     // any rooms left in the file? 
     if (! f.hasNextInt()) 
     return null; 

     Room r = new Room(); 
     String line; 

     // read in the room # for errorchecking later 
     r.roomNumber = f.nextInt(); 
     f.nextLine(); // skip "\n" after room # 

     r.roomName = f.nextLine(); 

     // read in the room's description r.description = ""; 
     while (true) 
     { 
      line = f.nextLine(); 
      if (line.equals("%%")) 
      break; 
      r.description += line + "\n"; 
     } 

     // finally, we'll read in the exits 
     int i = 0; 
     while (true) 
     { 
      line = f.nextLine(); 
      if (line.equals("%%")) 
      break; 
      String[] parts = line.split(":"); 
      r.exits[i] = parts[0]; 
      r.destinations[i] = Integer.parseInt(parts[1]); 
      i++; 
     } 
     r.numExits = i; 

     // should be done; return the Room 
     return r; 
    } 

} 

линия 39

Room[] rooms = loadRoomsFromFile("textadventurerooms.txt"); 

линия 90

Room r = getRoom(file); 

линия 143

line = f.nextLine(); 

Я не придал текстовому файлу себя, но я могу, если это необходимо найти ошибку.

+0

Можете ли вы выделить строки 143, 90 и 39? – Marv

+0

Не могли бы вы просто поставить комментарий рядом с важной строкой чисел (существует несколько строк 'line = f.nextLine();'). Также, пожалуйста, разместите образец текстового файла. – carloabelli

ответ

0

Я предполагаю, что ваш текстовый файл не имеет столько строк, что ожидает ваша программа (вы пытаетесь вызвать nextLine() после того, как уже достигли EOF. Двойная проверка того, что ваш текстовый файл соответствует тому, что вы хотите. трудно определить более подробно. Основываясь на том, где именно вы должны выйти из этого цикла while. Вы также можете проверить, есть ли другая линия, позвонив по телефону hasNextLine().

+0

Благодарим вас за помощь. Оказывается, мне не хватало строки, которая была необходима в моем текстовом файле. – OMNONOM999

0

Добавить строку "%% "в ваш файл определения комнаты. Ваш парсер требует этого.

Смежные вопросы