I've been trying to make a maze type of game by reading in from a configuration file using HashMaps to distinguish between a Room attribute vs Door Attribute. If I just print the String[] values they print the corresponding config values, however, when I try to print the values using a HashMap by calling it by its key, it tells me that the values are null. Any advice?
My code:
while (file.hasNextLine()) {
String line = file.nextLine();
if (line.isEmpty()) {
continue;
}
Scanner scanner = new Scanner(line);
String type = scanner.hasNext() ? scanner.next() : "";
String name = scanner.hasNext() ? scanner.next() : "";
String wall1 = scanner.hasNext() ? scanner.next() : "";
String wall2 = scanner.hasNext() ? scanner.next() : "";
String wall3 = scanner.hasNext() ? scanner.next() : "";
String wall4 = scanner.hasNext() ? scanner.next() : "";
HashMap<String,String[]> roomSite = new HashMap<String, String[]>();
HashMap<String,String[]> doorSite = new HashMap<String, String[]>();
String[] options = new String[]{wall1,wall2,wall3,wall4};
if(type.equals("room")){
roomSite.put(name, options);
}else if(type.equals("door")){
doorSite.put(name, options);
}else{
System.out.println("Error in config file. Please check that all options are valid.");
}
System.out.println(roomSite.get(0));
System.out.println(doorSite.get("d0"));
}
Output:
null
null
null
null
null
null
null
[Ljava.lang.String;@e9e54c2
null
null
config.ini
room 0 wall d0 wall wall
room 1 d0 wall d1 wall
room 2 wall wall wall d1
door d0 0 1 close
door d1 1 2 open
You have System.out.println(roomSite.get(0));
when it should be System.out.println(roomSite.get("0"));
Your maps map from String
to String[]
, not Integer
to String[]
.
Also, if you want to get a more meaningful print statement instead of [Ljava.lang.String;@e9e54c2
, you can use the Arrays.toString()
method.
Initialize your HashMaps
before iterating through your file. Try something like this:
public static void main(String []argh) throws FileNotFoundException
{
Scanner scan = new Scanner(new File("config.ini"));
HashMap<String, String[]> roomSite = new HashMap<>();
HashMap<String, String[]> doorSite = new HashMap<>();
while(scan.hasNext()){
String type = scan.next();
String name = scan.next();
String[] walls = scan.nextLine().trim().split(" ");
switch(type){
case "room":
roomSite.put(name, walls);
break;
case "door":
doorSite.put(name, walls);
break;
default:
System.out.println("Error in config file. Please check that all options are valid.");
}
}
System.out.println(Arrays.toString(roomSite.get("0")));
System.out.println(Arrays.toString(doorSite.get("d0")));
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.