2017-03-11 12 views
0

私は単純なアンドロイド電卓のアプリを作ろうとしています。それは素晴らしいとは思わないでしょう。私が助けが必要なのは、 "resultBtnClick"メソッドの減算、乗算、除算です。追加部分は簡単でしたforループで "result + = ..."を使用しました。では、スタックの数値を減算/除算/乗算する方法を教えてください。シンプルなアンドロイド電卓アプリ

public class MainActivity extends AppCompatActivity { 

TextView tv1; 
Boolean emptyResult = true; 
private static char operator; 
double result, res; 

Stack values = new Stack(); 

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

    tv1 = (TextView) findViewById(R.id.tv1); 
} 
public void btnClick(View v) 
{ 
    if (!emptyResult) 
    { 
     tv1.setText(""); 
     emptyResult = true; 
    } 
    switch(v.getId()) 
    { 
     case R.id.btn1: 
      tv1.setText(tv1.getText() + "1"); 
      break; 
     case R.id.btn2: 
      tv1.setText(tv1.getText() + "2"); 
      break; 
     case R.id.btn3: 
      tv1.setText(tv1.getText() + "3"); 
      break; 
     case R.id.btn4: 
      tv1.setText(tv1.getText() + "4"); 
      break; 
     case R.id.btn5: 
      tv1.setText(tv1.getText() + "5"); 
      break; 
     case R.id.btn6: 
      tv1.setText(tv1.getText() + "6"); 
      break; 
     case R.id.btn7: 
      tv1.setText(tv1.getText() + "7"); 
      break; 
     case R.id.btn8: 
      tv1.setText(tv1.getText() + "8"); 
      break; 
     case R.id.btn9: 
      tv1.setText(tv1.getText() + "9"); 
      break; 
     case R.id.btn0: 
      tv1.setText(tv1.getText() + "0"); 
      break; 
     case R.id.btnDot: 
      tv1.setText(tv1.getText() + "."); 
      break; 
     case R.id.btnClear: 
      tv1.setText(""); 
      emptyResult = true; 

      while (!values.isEmpty()) 
      { 
       values.pop(); 
      } 
      break; 
    } 
} 
public void calculateBtnClick(View v) 
{ 
    values.push(tv1.getText()); 

    switch(v.getId()) 
    { 
     case R.id.btnAdd: 
      operator = '+'; 
      break; 
     case R.id.btnSub: 
      operator = '-'; 
      break; 
     case R.id.btnMult: 
      operator = 'x'; 
      break; 
     case R.id.btnDiv: 
      operator = '/'; 
      break; 
    } 
    tv1.setText(""); 
} 
public void resultBtnClick(View v) 
{ 
    values.push(tv1.getText()); 

    switch(operator) 
    { 
     case '+': 
      for (int i=0; i < values.size(); i++) 
      { 
       result += Double.valueOf(values.get(i).toString()); 
      } 
      break; 
     case '-': 
      for (int i=0; i < values.size(); i++) 
      { 
       result -= Double.valueOf(values.get(i).toString()); 
      } 
      break; 
     case 'x': 
      for (int i=0; i < values.size(); i++) 
      { 
       result *= Double.valueOf(values.get(i).toString()); 
      } 
      break; 
     case '/': 
      for (int i=0; i < values.size(); i++) 
      { 
       result /= Double.valueOf(values.get(i).toString()); 
      } 
      break; 
    } 
    while (!values.isEmpty()) 
    { 
     values.pop(); 
    } 
    res = ((long)(result * 100000 + 0.5))/100000.0; 
    tv1.setText(Double.toString(res)); 
    result = 0; 
    emptyResult = false; 
} 
} 

編集1:私はので、もし私がクリックした、また、私は一つだけをクリックし、最後で一度に一つの演算子を使用することができることを承知しています:5 +それとして、それを計算します6-8x2 + 4 :5 + 6 + 8 + 2 + 4、これはおそらく通常の電卓として動作するように修正するためにはもっと多くの作業が必要ですので、上記の主な問題を助けてください。あなたの答えに追加することを歓迎しますが、私は主な問題への答えに優先順位をつけるでしょう、ありがとう!

編集2:乗算と除算は何もしていない、私はコードが間違っていることを知っている、実際の結果が何であるかを明確にしたい。

+0

あなたのエラーは何ですか? – Roljhon

+0

"resultBtnClick"メソッドを見て、どのようにしてスタック内のすべての変数を互いに引き算するのですか?もし私が10-2-5とタイプしたら、それは私が望むことをしない。 – random1234

+1

「私が欲しいものはしません」は、実際に何をしているのか、あなたが期待していたものなのかを全く記述していません。 'result = 0'を起動すると、なぜあなたは本質的に' 0-10-2-5'をやっていますか? 10は肯定的です! –

答えて

1

最初の結果を初期化する必要があります

+0

あなたは素晴らしいです、ありがとう、男!できます! – random1234

0

最初の数字ではなく、0になっているようです。加えて、0 + values.get(i)はiの値です。あなたはしかし、「操車場アルゴリズム」の研究を考えてみましょう0

result = Double.valueOf(values.get(0)); // Get first, so 'result != 0' 
for (int i = 1; i < values.size(); i++) { 
    double val = Double.valueOf(values.get(i).toString()); 
    switch(operator) { 
     case '+': 
      result += val; 
      break; 
     case '-': 
      result -= val; 
      break; 

に対する/乗算/除算そうでなければ、減算、あなたがスタックから最初の値を取得する必要があり

+0

「resultBtnClick」メソッドは計算機で「=」記号をクリックすると実行されます。計算が終了し、変数 "result"がクリアされます。私はそれをどのように初期化すべきですか? – random1234

+0

あなたのやっている結果 - =結果が何もない時は何か。あなたのループの前に結果を最初の数字(スタックの下の数字)に設定する必要があります。その後、ループして減算を行います。 – pdoyle5000

+0

上記のクリケットの警告には、信頼性の高い正しいタイプではないダブルタイプについての警告にも耳を傾けます。 Math.Roundを使用して小数点以下を調整することもできます。 – pdoyle5000