Я работаю над калькулятором и имею всю функциональность. Единственная проблема заключается в том, что при вводе уравнения, содержащего два арифметических оператора, он работает неправильно. Например, если я нахожу «2 + √9», он возвращает 3, и если я нахожу «√9 + 2», он закроется и говорит «недействительный двойной √9». Пожалуйста помоги.калькулятор не обрабатывает два операторных уравнения
ScientificCalculator.javaString prevAnswer = "";
TextView formulascreen;
TextView resultscreen;
String formuladisplay = "";
String resultdisplay = "";
String result = "";
String operator;
DecimalFormat res = new DecimalFormat("#,###,###,###.######");
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.scientific_calculator, container, false);
formulascreen = (TextView) view.findViewById(R.id.formulaTextView);
updateformuladisplay();
resultscreen = (TextView) view.findViewById(R.id.resultTextView);
updateresultdisplay();
view.findViewById(R.id.btn0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn4).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn5).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn6).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn7).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn8).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btn9).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickNumber(v);
}
});
view.findViewById(R.id.btnSqrt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClicksqrt(v);
}
});
view.findViewById(R.id.btnClear).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickClear(v);
}
});
view.findViewById(R.id.btnDel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickDel(v);
}
});
view.findViewById(R.id.btnAdd).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickOperator(v);
}
});
view.findViewById(R.id.btnMinus).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickOperator(v);
}
});
view.findViewById(R.id.btnDivide).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickOperator(v);
}
});
view.findViewById(R.id.btnMultiply).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickOperator(v);
}
});
view.findViewById(R.id.btnEquals).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickEquals(v);
}
});
view.findViewById(R.id.btnPrevAns).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickAns(v);
}
});
return view;
}
public void onClickEquals(View view) {
getResult();
updateresultdisplay();
}
private boolean getResult() {
if (operator.equals("")) return false;
String[] operation = formuladisplay.split(Pattern.quote(operator));
if (operation.length < 2) return false;
if (operator.equals("√")) {
result = String.valueOf(res.format(sqrtOp(operator, operation[1])));
resultdisplay = result;
prevAnswer = result;
result = "";
}
else {
result = String.valueOf(res.format(simpleOp(operation[0], operation[1], operator)));
resultdisplay = result;
prevAnswer = result;
result = "";
}
return true;
}
public double simpleOp(String a, String b, String op) {
switch (op) {
case "+":
return Double.valueOf(a) + Double.valueOf(b);
case "-":
return Double.valueOf(a) - Double.valueOf(b);
case "x":
return Double.valueOf(a) * Double.valueOf(b);
case "÷":
return Double.valueOf(a)/Double.valueOf(b);
default:
return -1;
}
}
private void updateformuladisplay() {
formulascreen.setText(formuladisplay);
}
private void updateresultdisplay() {
resultscreen.setText(resultdisplay);
}
public void onClicksqrt(View view) {
Button b = (Button) view;
operator = b.getText().toString();
formuladisplay += operator;
updateformuladisplay();
}
public void onClickDel(View view) {
if (formuladisplay.length() >= 1) {
formuladisplay = formuladisplay.substring(0, formuladisplay.length() - 1);
updateformuladisplay();
}
}
private void clear() {
formuladisplay = "";
resultdisplay = "";
}
public void onClickClear(View view) {
clear();
updateformuladisplay();
updateresultdisplay();
}
public void onClickNumber(View view) {
//if (!(result.equals(""))) {
// clear();
//updateformuladisplay();
//}
Button b = (Button) view;
if (formuladisplay.length() >= 0 && formuladisplay.length() <= 17) {
formuladisplay += b.getText();
updateformuladisplay();
}
else {
updateformuladisplay();
}
}
public void onClickOperator(View view) {
Button b = (Button) view;
operator = b.getText().toString();
formuladisplay += operator;
updateformuladisplay();
}
public double sqrtOp(String op, String a) {
switch (op) {
case "√":
return Math.sqrt(Double.valueOf(a));
default:
return -1;
}
}
public void onClickAns(View view) {
Button b = (Button) view;
if (formuladisplay.length() >= 0 && formuladisplay.length() <= 10) {
formuladisplay += prevAnswer;
updateformuladisplay();
}
else {
updateformuladisplay();
}
}
}
Вы должны использовать разделить выражение в суб выражении, то вычислить математическое calculaation –
@DixitPanchal Не могли бы вы, пожалуйста, руководство меня, как я могу осуществить это в моем текущий код? Извините, я новичок –