2017-12-27 9 views
1
私は "-3.1+0.12*0.0023-34.1/2.1"

のようにJavaで文字列の数値を計算する際に、IFSの多くを制御する(「-3.1 + 0.12 * 0.0023から34.1/2.1」)

のようにJavaで文字列の数値を計算についての私の宿題を解決するためにしたい

私は配列と文字列のみを使用し、再帰関数は使用しない(初年度の学生として)という制限があります

私は何を試していますか? 文字列をcharで解析することで解決しようとしています。私はこの方法

に/ *追加しようとしています

public static double CalcPlusMinus(String s) { 
    double A[] = new double[10000]; 
    if ((s.charAt(0) != '+') && (s.charAt(0) != '-')) 
     s = '+' + s; 
    int i = 0, j = 0; 
    while (i < s.length()) { 
     int flag = 1; 
     if (s.charAt(i) == '-') 
      flag = -1; 
     i++; 
     double m = 0; 
     int end = 0; 
     if ((s.charAt(i) >= '0') && (s.charAt(i) <= '9')) 
      while ((s.charAt(i) >= '0') && (s.charAt(i) <= '9')) { 
       m = m * 10 + (s.charAt(i) - '0'); 
       i++; 
       if (i >= s.length()) { 
        end = 1; 
        break; 
       } 
      } 
     if (end == 0) 
      if (s.charAt(i) == '.') { 
       i++; 
       double x = 10; 
       while ((s.charAt(i) >= '0') && (s.charAt(i) <= '9')) { 
        m = m + ((s.charAt(i) - '0')/x); 
        x *= 10; 
        i++; 
        if (i >= s.length()) 
         break; 
       } 
      } 
     A[j++] = m * flag; 
    } 
    A[A.length - 1] = j; 
    for (int m = (int) A[A.length - 1] - 1; m > 0; m--) { 
     A[m - 1] = A[m] + A[m - 1]; 
    } 
    return A[0]; 
} 

しかし、私の主な質問はです::どのように私は多くを制御することができます -

私は+とのために、この方法を試してみてください私のコードでif-then-elseの

コード内に多くのifsを制御する正式な方法がありますか?ですか? 私はフローチャートを知っていますが、フローチャートも非常に大きな画像に変わります!! advancの中

おかげ

+0

スイッチとケースのコントロールの意味ですか? – TimLayne

+0

'switch'文を使うことができます。 –

+0

返事ありがとう、私の問題は、ifまたはswitchを使用していない、私は多くのifsを制御する方法を探しています。私は困惑し、私のソースコードのコントロールを失う。フローチャートを描くことによって、私は大きな論文に直面した。このパズルコードを制御する戦略はありますか? –

答えて

0

あなたは、3つの別々のステップが必要です:

  1. 解析/トークン化 - spiting "-3.1 + 0.12 * 0.0023から34.1/2.1" へ: " - " "3.1" "+" "0.12" "*" "0.0023" " - " "34.1" "/" "2.1"
  2. は、式の値を計算するスタック
  3. としてアレイを使用して、Reverse Polish notationに変換
関連する問題