2016-10-18 3 views
1

Ich habe drei Klassen: Mazesolver, Hexagon und Maze. Wenn ich versuche, ein Hexagon Objekt in der Mazesolver Klasse zu erstellen, tritt ein Fehler auf. Kann mir bitte jemand bei diesem Problem helfen? Was bedeutet es auch, einen Hinweis auf den Start Hexagon im Labyrinth zu erhalten?Wie erstelle ich ein Objekt in einer anderen Klasse, wenn der Parameter außerhalb des Gültigkeitsbereichs liegt?

public class Hexagon extends HexComponent 
{ 
    // constants 
    private static final Color WALL_COLOR = Color.BLACK; 
    private static final Color START_COLOR = Color.GREEN; 
    private static final Color END_COLOR = Color.YELLOW; 
    private static final Color UNVISITED_COLOR = Color.CYAN; 
    private static final Color PROCESSED_COLOR = Color.BLUE; 
    private static final Color PUSHED_COLOR = Color.MAGENTA; 
    private static final Color END_PROCESSED_COLOR = Color.RED; 
    private static final Color START_PROCESSED_COLOR = Color.PINK; 

    //enum to represent available hexagon types 
    public static enum HexType{WALL, START, END, UNVISITED, PROCESSED, PUSHED,  END_PROCESSED, START_PROCESSED}; 

    // Attributes 
    private HexType type; // Stores the type of Hexagon this currently is 
    private boolean isStart; // Is this the start? 
    private boolean isEnd; // Is this the end? 
    private Hexagon[] neighbors; // Stores the hexagons which surround this one on each of 6 sides 

    /** 
    * Create a Hexagon tile of the specified type 
    * @param t the HexType to create 
    */ 
    public Hexagon(HexType t) { 
     this.type = t; 
     this.isStart = t == HexType.START; 
     this.isEnd = t == HexType.END; 

     //set the initial color based on the initial type 
     this.setColor(this.type); 
     //allocate space for the neighbor array 
     this.neighbors = new Hexagon[6]; 
    } 

Wie erstelle ich ein Objekt von Hexagon in MazeSolver?

public class MazeSolver 
{ 
    public static void main (String[] args) { 
     try { 
      if (args.length < 1) { 
       throw new IllegalArgumentException("No Maze Provided"); 
      } 
      String maze0 = args[0]; 
      private ArrayStack<String> steps; 
      Hexagon Start = new Hexagon(t); //error 
     } 
+0

Ihre 'ArrayStack' -Instanz' steps' hat einen unzulässigen Modifikator. Sie können 'private' nicht für eine lokal begrenzte Variable innerhalb einer Methode verwenden. Darüber hinaus haben Sie keine Details zu der Art des angezeigten Fehlers angegeben. Bitte fügen Sie diese Informationen Ihrem Beitrag hinzu. Wie auch immer, es ist unmöglich zu sagen, welche Fehler auf ein fehlerhaftes Kopieren/Einfügen zurückzuführen sind. – nbrooks

Antwort

3

Ich bin kein Codierung Experte, aber es kann sein, weil die einzigen Hexagon Konstruktor Sie erfordert einen HexType Wert zu übergeben. Ich kann mich irren, aber was ich denke, das Problem ist, dass Sie t in Ihrem Hexagon-Konstruktor übergeben, wenn t kein HexType Wert ist. Sie müssen eine von diesen an Ihren Hexagon-Konstruktor übergeben: HexType.WALL, HexType.START, HexType.END, HexType.UNVISITED, HexType.PROCESSED, HexType.PUSHED, HexType.END_PROCESSED, HexType.START_PROCESSED.

EDIT: Also yea Ich denke, es ist sicher zu sagen, Sie müssen nur HexType.VALUE zu Ihrem Hexagon-Konstruktor übergeben, Wert ist ein beliebiger Wert Ihrer HexType Enum-Klasse.

Ich bin neu bei StackOverFlow, bitte lassen Sie mich wissen, wenn ich falsch liege, damit ich meine Antwort löschen oder zumindest korrigieren kann.

+0

Ja, @ LeonelRamos Ich bin mir sicher, dass das das Problem ist. – gschambial

+0

@TedLaw Konnten Sie auch StackTrace Ihres Fehlers bekannt geben. – gschambial

+0

Wenn ich T zu START ändere, heißt das, START kann nicht in eine Variable aufgelöst werden. –

0
 Hexagon Start = new Hexagon(t); //error 

In über die Linie alles korrekt ist, außer:

1) es t sein kann wird definieren nicht, definiert zunächst t als Hexagon, bevor es zu benutzen.

2) Es könnte sein, dass Sie t irgendwo in Code definiert haben, aber das muss Hexagon sein, ändern Sie seinen Typ in Hexagon.

3) Wenn Sie beide Punkte korrekt ausgeführt haben, müssen Sie die Hexagon-Klasse in MazeSolver importieren. lke:

import <Package>.HEXAGON; 
public class MazeSolver 
{ 
    public static void main (String[] args) { 
     try { 
      if (args.length < 1) { 
       throw new IllegalArgumentException("No Maze Provided"); 
      } 
      String maze0 = args[0]; 
      private ArrayStack<String> steps; 
      HexType t; // Change Here 
      Hexagon Start = new Hexagon(t); // No Error 
+0

Wenn ich T zu HEX –

+0

Wenn ich T zu HEXTYPE ändern. es sagt, kann nicht zu einer Variablen aufgelöst werden. Was soll ich jetzt tun? –

+0

@TedLaw Sie wissen, was HexType ist, teilen Sie bitte über HexType –

Verwandte Themen