2017-02-27 4 views
0

私はAndroidスタジオで1つのフィールド計算機を作成しています1つのフィールドに基づく計算機

これは1つのテキストフィールド、ボタン、および別のテキストビューになります。 例えば「2 + 5 * 6」を入力すると、操作を理解する必要があります。

誰でも手伝ってもらえますか?

は、あなたが文字列の逆ポーランド記法を実装する必要があります私のコードください

public class MainActivity extends AppCompatActivity { 
    public static final String equation = "[0-9]"; 

    String opr = " "; 
    int[] result; 
    int castedInt; 
    String temp; 
    String[] separated; 
    EditText txte; 
    TextView txtv; 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void buResult(View view) { 
     txte = (EditText)findViewById(R.id.editText); 
     for (int i = 0; i < txte.length(); i++) { 
      if (Pattern.matches(txte.toString(), equation)) { 
       separated[i] = txte.toString(); 
       temp = separated[i]; 
       castedInt = Integer.parseInt(temp.toString()); 
       result[i] = castedInt; 
      } 
      else { 
       opr = txte.toString(); 
      } 
      txtv.setText(result[i] + opr + result[i]); 
     } 
    } 
} 

答えて

0

正規表現は正規表現でなければなりません。ユーザー入力を正規表現に変換する必要があります。

Pattern.matches(String regex, CharSequence input) 

また、あなたは、常に全体のユーザーの入力を使用している:

separated[i] = txte.toString(); 

すべてのインデックスが同じが含まれています「分離しました」。

0

それが(代わりに最初からアルゴリズムを作成する)言語サポートを使用するように大丈夫だ場合は、次のように使用することができます:

import javax.script.ScriptEngineManager; 
import javax.script.ScriptEngine; 
... 
ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("js"); 
txtv.setText(engine.eval(txte.toString())); 

*クレジット:stackoverflow.com/a/2605051/936786

関連する問題