Это может быть простое решение и глупый вопрос, но я все еще новичок в изучении 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();
Я не придал текстовому файлу себя, но я могу, если это необходимо найти ошибку.
Можете ли вы выделить строки 143, 90 и 39? – Marv
Не могли бы вы просто поставить комментарий рядом с важной строкой чисел (существует несколько строк 'line = f.nextLine();'). Также, пожалуйста, разместите образец текстового файла. – carloabelli