I’m making a Zork clone, and whenever it loops, an error comes up in Eclipse:
import java.util.Scanner;
public class Level1 {
public static void main(String[] args) {
int x;
for(x=1; x<10; x++) {
System.out.println ("Welcome to Sork - by Wyatt Lucas");
System.out.println (" ");
System.out.println ("Do you want to play?");
Scanner first = new Scanner(System.in);
@SuppressWarnings("unused")
String firstInput;
firstInput = first.nextLine();
System.out.println("Well, it doesn't matter!");
System.out.println("Use commands such as LOOK and GO NORTH \nto complete your adventure.");
System.out.println("");
System.out.println("You are in a room.");
Scanner second = new Scanner(System.in);
String secondInput = second.nextLine();
String look = "look";
if(secondInput.equalsIgnoreCase(look)) {
System.out.println("You look around and see a DOOR \nand a KEY on the floor.");
}
else {
//don't use System.err.println. Just use System.out.println
System.out.println("I do not understand that.");
continue;
}
Scanner third = new Scanner(System.in);
String thirdInput = third.nextLine();
String pick_up_key = "pick up key";
if(thirdInput.equalsIgnoreCase(pick_up_key)) {
System.out.println("You picked up the KEY.");
} else {
System.out.println("I do not understand that.");
continue;
}
Scanner fourth = new Scanner(System.in);
String fourthInput = fourth.nextLine();
String open_door = "open door";
if(fourthInput.equalsIgnoreCase(open_door)) {
System.out.println ("You open the door and are immediately \neaten by a grue!");
} else {
System.out.println("I do not understand that.");
}
first.close();
second.close();
third.close();
fourth.close();
try {
Thread.sleep(1997);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Running the code to the point of opening the door gives
This is happening because you are closing System.in with all your
third.close()calls at the end. Make just one Scanner, and don’t ever close it.