2017-11-18 2 views
0

Davor habe ich eine Methode für den Rangierbahnhof-Algorithmus geschrieben, hier möchte ich eine Methode erstellen, mit der ich den Postfix-Ausdruck auswerten kann. Ich werde diese Methode aufrufen, damit ich sie in der Postfix-Warteschlange ausführen kann.Unlösbare Variable beim Versuch, ein Double in einen String zu konvertieren

public String calculate(Queue post, Stack polish) { 

ich werde meine Warteschlange aus der Warteschlange entfernt und in einzelne Tokens trennen zu

String token = post.Dequeue(); 

gelesen werden, während es ein Zeichen ist

while(!(token==null)) { 
     if(isOperator(token)) { 
      double operand_2 = Double.parseDouble(polish.pop()); 
      double operand_1 = Double.parseDouble(polish.pop()); 
      if(token.contains("+")) { 
       double result = operand_2 + operand_1; 
      } 
      else if(token.contains("-")) { 
       double convert = operand_2 - operand_1; 
      } 
      else if(token.contains("/")) { 
       double convert = operand_2/operand_1; 
      } 
      else if(token.contains("*")) { 
       double convert = operand_2/operand_1; 
      } 

werden

lesen, wenn ich versuche, „convert“ zu konvertieren zu einem String, es sagt mir, dass konvertieren nicht als eine Variable

  String result = Double.toString(convert); 
      polish.push(result); 
     } 
     else if(isNumeric(token)){ 
      polish.push(token); 
     } 
     String finalVal = polish.pop(); 
     return finalVal; 
    } 
} 
aufgelöst werden kann
+0

Plz vergessen Sie nicht wählen und akzeptieren –

Antwort

1

Dies ist ein Bereichsproblem. Wenn Sie eine Variable deklarieren, dauert die Deklaration bis zum nächsten } Zeichen, von denen, deren übereinstimmendes { Zeichen bereits bestanden hat. Da Sie innerhalb jedes if oder else if Blocks convert deklarieren, dauert die Deklaration bis zum Ende dieses Blocks.

Was müssen Sie tun, ist double convert; vor allen if und else Aussagen zu erklären, so dass die Erklärung bis zu dem Punkt reicht, wo Sie brauchen convert zu verwenden.

Sie es auch einen Anfangswert, wie double convert = 0; geben möchten, den Fall zu behandeln, in denen der Betreiber keine der if und else if Aussagen überein. Andernfalls könnte ein anderer Kompilierungsfehler auftreten.

1

Sie haben convert in diesem Bereich nicht definiert. Es ist nicht als Variable deklariert, also erhalten Sie diesen Fehler.

Wechseln zu:

double convert; 
    while(!(token==null)) { 
      if(isOperator(token)) { 
       double operand_2 = Double.parseDouble(polish.pop()); 
       double operand_1 = Double.parseDouble(polish.pop()); 
       if(token.contains("+")) { 
        double result = operand_2 + operand_1; 
       } 
       else if(token.contains("-")) { 
        convert = operand_2 - operand_1; 
       } 
       else if(token.contains("/")) { 
        convert = operand_2/operand_1; 
       } 
       else if(token.contains("*")) { 
        convert = operand_2/operand_1; 
       } 
Verwandte Themen