Логика работает в SWING , кидает NumberFormatException в ANDROID
package com.example.vhcalcandroid;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView textView;
Button button0;
Button button1;
Button button2;
Button button3;
Button button4;
Button button5;
Button button6;
Button button7;
Button button8;
Button button9;
Button buttonPlus;
Button buttonMinus;
Button buttonDivide;
Button multiply;
Button buttonDot;
Button buttonC;
Button buttonDel;
Button buttonResult;
static double number1 = 0;
static double number2 = 0;
//static double memory = 0;
static double result = 0;
static char operation = '0';
static StringBuilder stringBuilder = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
button0 = findViewById(R.id.button0);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
button3 = findViewById(R.id.button3);
button4 = findViewById(R.id.button4);
button5 = findViewById(R.id.button5);
button6 = findViewById(R.id.button6);
button7 = findViewById(R.id.button7);
button8 = findViewById(R.id.button8);
button9 = findViewById(R.id.button9);
buttonPlus = findViewById(R.id.buttonPlus);
buttonMinus = findViewById(R.id.buttonMinus);
buttonDivide = findViewById(R.id.buttonDivide);
multiply = findViewById(R.id.multiply);
buttonDot = findViewById(R.id.buttonDot);
buttonC = findViewById(R.id.buttonC);
buttonDel = findViewById(R.id.buttonDel);
buttonResult = findViewById(R.id.buttonResult);
button0.setOnClickListener(this);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
button6.setOnClickListener(this);
button7.setOnClickListener(this);
button8.setOnClickListener(this);
button9.setOnClickListener(this);
buttonPlus.setOnClickListener(this);
buttonMinus.setOnClickListener(this);
buttonDivide.setOnClickListener(this);
multiply.setOnClickListener(this);
buttonDot.setOnClickListener(this);
buttonC.setOnClickListener(this);
buttonResult.setOnClickListener(this);
textView.setText("0");
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button0 : {
'stringBuilder.append("0");'
'textView.setText(stringBuilder.toString());'
'number1 = Double.parseDouble(stringBuilder.toString());'
}
case R.id.button1 : {
stringBuilder.append("1");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button2 : {
stringBuilder.append("2");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button3 : {
stringBuilder.append("3");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button4 : {
stringBuilder.append("4");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button5 : {
stringBuilder.append("5");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button6 : {
stringBuilder.append("6");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button7 : {
stringBuilder.append("7");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button8 : {
stringBuilder.append("8");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.button9 : {
stringBuilder.append("9");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.buttonPlus : {
stringBuilder.delete(0,stringBuilder.length());
textView.setText("+");
number2 = number1;
operation = '+';
}
case R.id.buttonMinus : {
stringBuilder.delete(0,stringBuilder.length());
textView.setText("-");
number2 = number1;
operation = '-';
}
case R.id.buttonDivide : {
stringBuilder.delete(0,stringBuilder.length());
textView.setText("/");
number2 = number1;
operation = '/';
}
case R.id.multiply : {
stringBuilder.delete(0,stringBuilder.length());
textView.setText("*");
number2 = number1;
operation = '*';
}
case R.id.buttonDot : {
stringBuilder.append(".");
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
}
case R.id.buttonC : {
stringBuilder.delete(0,stringBuilder.capacity());
textView.setText("0");
}
case R.id.buttonDel : {
if(stringBuilder.length() > 0)
stringBuilder.deleteCharAt(stringBuilder.length()-1);
textView.setText(stringBuilder.toString());
number1 = Double.parseDouble(stringBuilder.toString());
break;}
case R.id.buttonResult : {
BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(number2));
BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(number1));
switch (operation){
case '+': result = number2 + number1;break;
case '-': result = number2 - number1;break;
case '*': result = Double.parseDouble(bigDecimal2.multiply(bigDecimal1).toString());break;
case '/': result = Double.parseDouble(bigDecimal2.divide(bigDecimal1,7, RoundingMode.HALF_UP).toString());break;
}
String tempText = String.valueOf(result);
String resultText = "";
if((tempText.charAt(tempText.length()-1) == '0')){
resultText = tempText.substring(0,tempText.length() - 2);
textView.setText(resultText);
}
else {
textView.setText(tempText);
}
operation = '0';
number1 = 0;
number1 = result;
}
}
}
}
Ответы (1 шт):
Автор решения: Moskit
→ Ссылка
Заменил имплементацию View.OnClickLIstener на лямбды - все заработало.