私は単純なアンドロイド電卓のアプリを作ろうとしています。それは素晴らしいとは思わないでしょう。私が助けが必要なのは、 "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:乗算と除算は何もしていない、私はコードが間違っていることを知っている、実際の結果が何であるかを明確にしたい。
あなたのエラーは何ですか? – Roljhon
"resultBtnClick"メソッドを見て、どのようにしてスタック内のすべての変数を互いに引き算するのですか?もし私が10-2-5とタイプしたら、それは私が望むことをしない。 – random1234
「私が欲しいものはしません」は、実際に何をしているのか、あなたが期待していたものなのかを全く記述していません。 'result = 0'を起動すると、なぜあなたは本質的に' 0-10-2-5'をやっていますか? 10は肯定的です! –