Note that there are some explanatory texts on larger screens.

plurals
  1. POClassCastException in java
    primarykey
    data
    text
    <p>I keep getting a ClassCastException </p> <p>Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to homework5.Creature</p> <pre><code>at ho.Creature.compareTo(Creature.java:11) at java.util.Collections.indexedBinarySearch(Collections.java:215) at java.util.Collections.binarySearch(Collections.java:201) at ho.PC.play(PC.java:61) at ho.Main.main(Main.java:41) </code></pre> <p>Java Result: 1</p> <p>I'm not sure what else I need to give for information</p> <p>Method I have to start things:</p> <pre><code>public void play(PC pc) { Scanner reader = new Scanner(System.in); while (true) { String command = reader.nextLine(); String[] commands = null; if (command.contains(":")) { commands = command.split(":"); ArrayList array = getRoom().getCreatures(); Collections.sort(array); int index = Collections.binarySearch(array, commands[0]); Creature c = getRoom().getCreatures().get(index); //Creature c = getRoom().binarySearchForCreature(commands[0], 0, getRoom().getCount() - 1); if (c != null) { if (commands[1].equalsIgnoreCase("clean")) { c.clean(pc); pc.getRoom().critReactRoomStateChange("clean", pc, c.getName()); } else if (commands[1].equalsIgnoreCase("dirty")) { c.dirty(pc); pc.getRoom().critReactRoomStateChange("dirty", pc, c.getName()); } else if (commands[1].equalsIgnoreCase("n")) { c.tryMove(commands[1], pc); c.checkNewRoom(); } else if (commands[1].equalsIgnoreCase("e")) { c.tryMove(commands[1], pc); c.checkNewRoom(); } else if (commands[1].equalsIgnoreCase("s")) { c.tryMove(commands[1], pc); c.checkNewRoom(); } else if (commands[1].equalsIgnoreCase("w")) { c.tryMove(commands[1], pc); c.checkNewRoom(); } else { System.out.println("Command Does not exist."); } } else { System.out.println("That creature is not in the room."); } ...(Keeps going) </code></pre> <p>After I implemented the Collections.binarySearch I started getting this error I get the error in my creature class. This is the class the top error comes from ho.Creature.compareTo(Creature.java:11) The compareTo is near the bottom. </p> <pre><code>public abstract class Creature implements Comparable&lt;Creature&gt; { protected Room roomRef; private String name; private String descript; public Creature(String name, String descript) { this.name = name; this.descript = descript; } public void setRoom(Room roomRef) { this.roomRef = roomRef; } public Room getRoom() { return this.roomRef; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public final void clean(PC pc) { String cClass = ""; if (!getRoom().getState().equalsIgnoreCase("clean")) { if (getRoom().getState().equalsIgnoreCase("dirty")) { getRoom().setState("half-dirty"); } else { getRoom().getState().equalsIgnoreCase("half-dirty"); getRoom().setState("clean"); } if (this instanceof Animal) { cClass = "Animal"; System.out.println(getName() + " the " + cClass + " cleans the room " + roomRef.getName() + ". The room's state is now " + roomRef.getState()); reactG(pc); reactG(pc); reactG(pc); } if (this instanceof NPC) { cClass = "NPC"; System.out.println(getName() + " the " + cClass + " cleans the room " + roomRef.getName() + ". The room's state is now " + roomRef.getState()); reactD(pc); reactD(pc); reactD(pc); } if (this instanceof PC) { cClass = "PC"; } } else { System.out.println("The room " + roomRef.getName() + "is already clean."); } } public final void dirty(PC pc) { String cClass = ""; if (!getRoom().getState().equalsIgnoreCase("dirty")) { if (getRoom().getState().equalsIgnoreCase("clean")) { getRoom().setState("half-dirty"); } else { getRoom().getState().equalsIgnoreCase("half-drity"); getRoom().setState("dirty"); } if (this instanceof Animal) { cClass = "Animal"; System.out.println(getName() + " the " + cClass + " dirties the room " + roomRef.getName() + ". The room's state is now " + roomRef.getState()); reactD(pc); reactD(pc); reactD(pc); } if (this instanceof NPC) { cClass = "NPC"; System.out.println(getName() + " the " + cClass + " dirties the room " + roomRef.getName() + ". The room's state is now " + roomRef.getState()); reactG(pc); reactG(pc); reactG(pc); } if (this instanceof PC) { cClass = "PC"; System.out.println(getName() + " the " + cClass + " dirties the room " + roomRef.getName() + ". The room's state is now " + roomRef.getState()); } } else { System.out.println("The room " + roomRef.getName() + "is already dirty."); } } public String getCreatureType() { if ((this instanceof PC)) { return "PC"; } if ((this instanceof NPC)) { return "NPC"; } if ((this instanceof Animal)) { return "Animal"; } return null; } public void reactStateChange(String command, PC pc) { if ((this instanceof NPC)) { if (command.equals("clean")) { reactD(pc); } if (command.equals("dirty")) { reactG(pc); } if (this.roomRef.getState().equalsIgnoreCase("clean")) { tryLeaveRoom(pc); } } if (this instanceof Animal) { if (command.equalsIgnoreCase("clean")) { reactG(pc); } if (command.equals("dirty")) { reactD(pc); } if (this.roomRef.getState().equalsIgnoreCase("dirty")) { tryLeaveRoom(pc); } } } public void checkNewRoom() { if ((this instanceof NPC)) { if (this.roomRef.getState().equalsIgnoreCase("clean")) { this.roomRef.setState("half-dirty"); } } if (this instanceof Animal) { if (this.roomRef.getState().equalsIgnoreCase("dirty")) { this.roomRef.setState("half-dirty"); } } } public void tryMove(String direction, PC pc) { try { Room dest = getRoom().getNeighbor(direction); if (dest.getCreatures().size() &lt;= 9) { getRoom().removeCreature(this); setRoom(getRoom().getNeighbor(direction)); dest.addCreature(this); System.out.println("The " + getCreatureType() + " " + getName() + " left the room and goes to " + dest.getName() + " through the " + changeDirectionName(direction) + " door."); } else { System.out.println("Cannot move " + changeDirectionName(direction) + " to the room " + getRoom().getNeighbor(direction).getName() + " because it is full!"); reactD(pc); } } catch (NullPointerException e) { System.out.println("There is not a neighbor to the " + changeDirectionName(direction) + "!"); reactD(pc); } } private String changeDirectionName(String ref) { if (ref.equalsIgnoreCase("n")) { ref = "north"; return ref; } if (ref.equalsIgnoreCase("s")) { ref = "south"; return ref; } if (ref.equalsIgnoreCase("e")) { ref = "east"; return ref; } if (ref.equalsIgnoreCase("w")) { ref = "west"; return ref; } return null; } public void tryLeaveRoom(PC pc) { boolean allChosen = false; boolean[] chosen = new boolean[4]; while (allChosen == false) { String[] directions = {"n", "e", "s", "w"}; Random dirPick = new Random(); int rNum = dirPick.nextInt(4); String direction = directions[rNum]; Room destRoom = getRoom().getNeighbor(direction); if (chosen[rNum] == false) { if (destRoom != null) { tryMove(direction, pc); break; } chosen[rNum] = true; } if (chosen[0] == true &amp;&amp; chosen[1] == true &amp;&amp; chosen[2] == true &amp;&amp; chosen[3] == true) { allChosen = true; getRoom().removeCreature(this); getRoom().roofAction(pc); System.out.println("The " + getCreatureType() + " " + getName() + "leaves through the roof of " + getRoom().getName()); } } } protected abstract void reactRoom(PC pc); protected abstract void reactG(PC pc); protected abstract void reactD(PC pc); public void look() { String creatureS = ""; System.out.print("The name of the room you are in is " + roomRef.getName() + ". "); System.out.print("\nDescription: " + roomRef.getDescription() + " "); System.out.print("and it's state is " + roomRef.getState() + ".\n"); System.out.print("It contains the creatures: \n"); for (int i = 0; i &lt; roomRef.getCreatures().size(); i++) { creatureS += "\t" + roomRef.getCreatures().get(i).getName()+ "\n"; } // for (int i = 0; i &lt; roomRef.getCreatures().length; i++) { // if (this.roomRef.getCreatures()[i] != null) { // creatureS += "\t" + roomRef.getCreatures()[i] + "\n"; // } // } System.out.println(creatureS); System.out.print("Neighbors:\n"); if (this.roomRef.getNeighbor("n") != null) { System.out.print("\tThe north door is: " + this.roomRef.getNorthD().getName() + "\n"); } else { System.out.print(""); } if (this.roomRef.getNeighbor("s") != null) { System.out.print("\tThe south door is: " + this.roomRef.getSouthD().getName() + "\n"); } else { System.out.print(""); } if (this.roomRef.getNeighbor("e") != null) { System.out.print("\tThe east door is: " + this.roomRef.getEastD().getName() + "\n"); } else { System.out.print(""); } if (this.roomRef.getNeighbor("w") != null) { System.out.print("\tThe west door is: " + this.roomRef.getWestD().getName() + "\n"); } else { System.out.print(""); } } public int compareTo(Creature o) { return this.getName().compareToIgnoreCase(o.getName()); } public String toString() { return name + " is a/an " + this.getCreatureType() + " who is " + descript; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload