2017-11-18 5 views
0

これまでシャントヤードアルゴリズムのメソッドを書いていましたが、ここでは後置式を評価できるようにメソッドを作成します。私はpostfixキューでこれを実行できるように、このcalculateメソッドを呼び出します。ダブルを文字列に変換しようとすると解決できない変数

public String calculate(Queue post, Stack polish) { 

私は自分のキューをデキューし、私は「変換」を変換しようとすると

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; 
      } 

を読み込むべきトークンが存在する間

String token = post.Dequeue(); 

を読み取ることが個々のトークンに区切るますStringに変換すると、変換が変数として解決できないことがわかります

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

Plzを投票&受け入れることを忘れないでください –

答えて

1

これは範囲の問題です。変数を宣言すると、その宣言は、{文字が既に渡された文字のうち、次の}文字まで続きます。それぞれifまたはelse ifブロック内にconvertを宣言しているため、宣言はそのブロックの最後まで続きます。

は何をする必要があるとの宣言は、あなたがconvertを使用する必要がある時点まで続くように、すべてのifelse文の前にdouble convert;を宣言することです。

オペレータがifelse ifのいずれのステートメントにも一致しない場合に対処するために、double convert = 0;などの初期値を与えることもできます。そうしないと、別のコンパイルエラーが発生する可能性があります。

1

convertをそのスコープ内に定義していません。変数として宣言されていないので、そのエラーが発生します。

変更するには:

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; 
       } 
関連する問題