2011-01-19 3 views
1

私が見つけた問題の1つは、+、 - 、*、/を比較することができないということです。ヘルプ逆ポリッシュ表記(Java)の問題

CODEのためのTHX:

import java.util.Scanner; 

public class Question2 { 

    public static void main(String args[]){ 

    Scanner scan = new Scanner(System.in); 

    double array[] = new double[20]; 

    System.out.print("Enter sum: "); 
    String sum = scan.nextLine(); 

    getValue(sum, array, 0); 

    System.out.print(array[0]); 
    } 


    public static void getValue(String input, double array[], int poi){ 
    int counter = 0; 
    char nextValue = ' '; 
    String value = ""; 
    double num = 0; 
    boolean checkDub = true; 

     do{ 
      value = value + input.charAt(counter); 

      counter ++;  
      nextValue = input.charAt(counter); 
     }while(nextValue != ' '); 

    try {num = Integer.parseInt(value);} 
    catch (Exception e) { 
     checkDub = false; 

     double l2 = array[poi]; 
     poi--; 

     double l1 = array[poi]; 

     if(value.equals("+")){ array[poi] = l1 + l2;} // <--- comparing problem? 
     else if(value.equals("-")){ array[poi] = l1 - l2;} 
     else if(value.equals("*")){ array[poi] = l1 * l2;} 
     else if(value.equals("/")){ array[poi] = l1/l2;} 
     else{System.out.println("Error");} 

    } 
     if(checkDub = true){ 
     array[poi] = num;} 

     String nextInput = input.substring(counter); 
     getValue(nextInput, array, poi + 1); 


    } 

} 
+0

'宿題 'タグ? –

+0

再フォーマットされたコード。間違っている場合は元に戻してください。 – trashgod

答えて

0

あなたの問題は、先頭の空白文字を取り除いていないことです。たとえば、入力が"2 2 + "の場合、3回目の呼び出しで入力は" + "、値は" +"になります。それは"+"であなたの平等チェックに失敗します。その一方で、parseIntは明るく前の空白を削除します。

入力がスペースで終了しない場合でも、コードによってIndexOutOfBoundsExceptionがスローされます。さらに"1 2 + 3 +"のようなより複雑な式は処理しません。が最初のものを評価した後に再帰呼び出ししないからです。 (ヒント:入力からすべてのトークンを消費したときに戻ってください)。

スタイルポイント(バグではありません):スペースを見つけるにはindexOfを使用する必要があります。再帰的なテールコールは本当にループでなければなりません(非常に長い入力の場合は、StackOverflowErrorが発生する可能性があります)。あなたはboolean checkDubを持つ必要はありません - if (checkDub == true)の本文をtryの内側に置くことができます(parseIntの後)。しかし、もしあなたがループを使っているなら、おそらくリファクタリングしたいと思うでしょう。

1

ヒント:

  1. valueあなたは比較に問題があると思い時点で含まれているものを印刷してみてください。
  2. OOの方法で問題を解決してみてください。例えばgetValueメソッドを非静的に変更し、その状態にインスタンス変数を使用します。
  3. =を使用して値を比較することはできません。代わりに==を使用してください。 a == trueaに相当します。