2017-07-03 18 views
-3

Also die erste Sache, die ich klarstellen möchte, ist, dass ich denke, dass dies mein Fehler ist, den ich gerade nicht sehe, aber ich dachte, es könnte helfen, die IDE zu kennen ist IntelliJ. Ich habe auch andere Überlauf Beiträge (question 1, final keyword, question 2, um ein paar zu nennen), aber sie haben meine Frage nicht beantwortet, soweit ich das beurteilen kann. Ich hatte nur AP Informatik als meine Ausbildung in CS, so dass mein Wissen sehr begrenzt ist.IntelliJ-Variable wurde möglicherweise nicht initialisiert

Das Problem tritt mit einer nicht öffentlichen Klasse in einer Datei auf. Es erstellt einen Pfad durch ein 2D-Array und kann Instanzen von sich selbst für einen Verzweigungseffekt erstellen, muss dies aber nicht tun. Außerdem werden mehrere Versionen davon von der öffentlichen Klasse in der Datei erstellt. Unten ist mein Code (die Teile, die ich für relevant halte. Wenn du mehr brauchst, lass es mich wissen und ich werde meine Frage aktualisieren). Lassen Sie mich wissen, wenn Sie noch etwas brauchen, und danke, dass Sie mir geholfen haben!

public class PathMaker 
{ 
    .... 
} 

class RiverPath 
{ 

    private final int startID; 
    private final int endID; 
    private final double branchChance; 
    private final double endFactor; 

    public RiverPath(int x, int y, int[][] alts, double bChance, int c, double eFactor, int pX, int pY) 
    { 
     startID = MapNode.createID(x, y); 
     branchChance = bChance; 
     endFactor = eFactor; 

     ... 
     endID = a number; 
    } 
    public RiverPath(int x, int y, int[][] alts, double bChance) 
    { 
     this(x, y, alts, bChance, 0, .02, -1, -1); 
    } 
    ... 
} 

Es gibt keine anderen Konstrukteuren, und MapNode ist eine andere Klasse mit dem public static int createID(int x, int y) Methode.

Lassen Sie mich wissen, was ich tun muss, um meine Frage klarer zu machen.


EDIT: Alle vier Variablen geben mir Kummer. Außerdem werde ich den vollständigen Konstruktor unten setzen. Soweit ich sehen kann, gibt es keine return Erklärung in meinem Code. Außerdem ist der Fehler, bevor ich kompilieren und sagt

Variable [name] möglicherweise nicht

initialisiert

Diese 4 Fehler sind die Einzigen. Es gibt einige Variablen, die außerhalb des Konstruktors definiert sind.

public RiverPath(int x, int y, int[][] alts, double bChance, int c, double eFactor, int pX, int pY) 
{ 
count = c; 

if(c > 0) 
    isBranch = true; 
else 
    isBranch = false;//pX and pY only matter if is Branch 

startID = MapNode.createID(x, y); 
branchChance = bChance; 
altitudes = alts; 
endFactor = eFactor; 

mainPath.add(new MapNode(x, y, altitudes)); 

boolean pathing = true; 
MapNode currentNode = mainPath.get(0); 
int[][] heights = new int[3][3];//heights around river 
boolean[][] heightTight = new boolean[3][3]; 
int min; 
int minCount; 
int tID; 
RiverPath branch; 

while(pathing) 
{ 
    if(Math.random() < endFactor*count) 
    { 
     pathing = false; 
    } 
    else 
    { 
     count++; 
     min = 99; 
     minCount = 0; 

     for(int i = -1; i < 2; i++) 
     {//These loops fill heights with the nearby heights of mapnodes and set min as the min 
      for(int z = -1; z < 2; z++) 
      { 
      heights[i+1][z+1] = altitudes[currentNode.getY() + i][currentNode.getX() + z]; 
      if(heights[i+1][z+1] < min) 
      { 
       min = heights[i + 1][z + 1]; 
      } 
      } 
     } 

     if(min == currentNode.getAltitude()) 
     { 
      min = 0; 
      for(int i = -1; i < 2; i++) 
      { 
      for(int z = -1; z < 2; z++) 
      { 
       tID = MapNode.createID(currentNode.getX() + z, currentNode.getY() + i); 
       if(heights[i+1][z+1] == currentNode.getAltitude() && (!isBranch || !(MapNode.createID(pX, pY) == tID)) && (mainPath.size() == 1 || mainPath.get(mainPath.size() - 1).getID() != tID)) 
       {//if the altitude is the min, and it either isn't a branch or it isn't the node before this one 
        heightTight[currentNode.getY()+i][currentNode.getX()+z] = true;//a possible path exists here 
        min++;//min now keeps track of the total number of possible paths there are 
        minCount++;//also keeps track of total, but for a different implementation later 
       } 
      } 
      } 
      while(min != 0) 
      { 
      if(min == -1) 
       min = -2;//signals that we can test branches 
      for (int i = -1; i < 2; i++) 
      { 
       for (int z = -1; z < 2; z++) 
       { 
        if (min > 0 && heightTight[currentNode.getY() + i][currentNode.getX() + z] && Math.random() < 1.0/)// 
        { 

         if(min > 0) 
         min = -1;//signals that we can skip all other true values, but ONLY if there are more possible branches 
         else 
         min = 0;//in case we lower min below 0 
        } 
        else if(min == -2 && heightTight[currentNode.getY() + i][currentNode.getX() + z] && Math.random() < branchChance)//both random chance and it is a possible path 
        { 
         branch = new RiverPath(currentNode.getX() + z, currentNode.getY() + i, altitudes, branchChance, count, endFactor, currentNode.getX(), currentNode.getY()); 
         branches.add(branch); 
        } 
       } 
      } 
      } 
     } 
    } 
} 

endID = currentNode.getID(); 
} 
+4

Das Teilen eines [MCVE] (https://stackoverflow.com/help/mcve) ist sehr hilfreich für diese Art von Fragen; Wenn Sie einen Teil des Codes weglassen, der Ihre Probleme verursacht, ist es schwierig, das Problem zu diagnostizieren. – dimo414

+0

Welche Variable ?? –

+1

Fehlend: die Fehlermeldung! – GhostCat

Antwort

-2

abgehend das Snippet Sie geteilt haben, meine Vermutung ist, dass Sie in diesem ... in Ihrem Konstruktor eine bedingte return irgendwo haben. Da Sie früh zurückkommen, kann endID möglicherweise nicht festgelegt werden. Dies ist eine häufige Ursache für diesen Fehler.


Edit:

Mit dem größeren Code-Schnipsel Sie auf dem Laufenden Ich bin in der Lage Ihr Problem in IntelliJ zu replizieren, und ich sehe einen zusätzlichen Fehler „Ausdruck erwartet“ auf dieser Linie:

if (min > 0 && heightTight[currentNode.getY() + i][currentNode.getX() + z] && Math.random() < 1.0 /)// 

Dieser (speziell die Hinter / nach 1.0) erscheint sei dein wirkliches Problem - die "möglicherweise nicht initialisierten" Fehler sind nur Symptome deines Konstruktors, die fehlerhaft sind.

+0

Das Snippet funktioniert einwandfrei, wenn die unmittelbaren Kompilierungsprobleme behoben werden. Es ist unklar, was es verursacht, nur was das OP zur Verfügung gestellt hat, also raten wir nicht. – Makoto

+0

Sie hatten Recht, ich habe das Divisionszeichen verpasst. Entschuldigung, ich habe nicht genug Code hochgeladen, um damit anzufangen, und danke, dass du dich mit mir trägst! –

+0

Kein Problem, jetzt wissen Sie :) Das Erstellen eines [MCVE] (https://stackoverflow.com/help/mcve) ist immer ein guter Debugging-Schritt, da es Ihnen hilft, das Grundproblem zu identifizieren. Wenn Sie die Lösung nicht selbst identifizieren können, haben Sie ein vorgefertigtes Beispiel, das Sie mit anderen teilen können. – dimo414

Verwandte Themen