计算器应用程序在相等按钮上没有响应
Calculator app not responding on equal button
在我的简单计算器项目中,当我按下等号按钮时程序退出,它说我的程序没有响应。在 android 监视器中,我找不到任何 error.The 等号按钮应该查看用户输入的数学运算符,假设它已经输入一次,之后它会得到之前和之后的数值运算符并执行所需的数学函数。这是我的代码:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public boolean isEmpty(EditText editText) {
if (editText.getText().toString().trim().length() > 0)
return false;
return true;
}
Button number9;Button number8;Button number7;Button number6;Button number5;Button number4;Button number3;Button number2;
Button number1;Button number0;Button numberplus;Button numberminus;Button numbertimes;Button numberdiv;Button numberequal;
Button numberdecimal;EditText text_;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number0= (Button) findViewById(R.id.btn0);
number1= (Button) findViewById(R.id.btn1);
number2= (Button) findViewById(R.id.btn2);
number3= (Button) findViewById(R.id.btn3);
number4= (Button) findViewById(R.id.btn4);
number5= (Button) findViewById(R.id.btn5);
number6= (Button) findViewById(R.id.btn6);
number7= (Button) findViewById(R.id.btn7);
number8= (Button) findViewById(R.id.btn8);
number9= (Button) findViewById(R.id.btn9);
numberplus= (Button) findViewById(R.id.btnplus);
numbertimes= (Button) findViewById(R.id.btntimes);
numberminus= (Button) findViewById(R.id.btnminus);
numberequal= (Button) findViewById(R.id.btnequal);
numberdiv= (Button) findViewById(R.id.btndiv);
numberdecimal= (Button) findViewById(R.id.btndecimal);
text_=(EditText) findViewById(R.id.editText);
number0.setOnClickListener(this);
number1.setOnClickListener(this);
number2.setOnClickListener(this);
number3.setOnClickListener(this);
number4.setOnClickListener(this);
number5.setOnClickListener(this);
number6.setOnClickListener(this);
number7.setOnClickListener(this);
number8.setOnClickListener(this);
number9.setOnClickListener(this);
numberplus.setOnClickListener(this);
numberminus.setOnClickListener(this);
numbertimes.setOnClickListener(this);
numberdiv.setOnClickListener(this);
numberequal.setOnClickListener(this);
numberdecimal.setOnClickListener(this);
text_.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn0:
text_.append("0");
break;
case R.id.btn1:
text_.append("1");
break;
case R.id.btn2:
text_.append("2");
break;
case R.id.btn3:
text_.append("3");
break;
case R.id.btn4:
text_.append("4");
break;
case R.id.btn5:
text_.append("5");
break;
case R.id.btn6:
text_.append("6");
break;
case R.id.btn7:
text_.append("7");
break;
case R.id.btn8:
text_.append("8");
break;
case R.id.btn9:
text_.append("9");
break;
case R.id.btnplus:
text_.append("+");
break;
case R.id.btnminus:
text_.append("-");
break;
case R.id.btndiv:
text_.append("/");
break;
case R.id.btntimes:
text_.append("*");
break;
case R.id.btndecimal:
text_.append(".");
break;
case R.id.btnequal:
String textString = text_.getText().toString();
if(textString.contains("+")) {
String before = textString.substring(textString.indexOf("+") - 1);
String after=textString.substring(textString.indexOf("+") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before + number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("-")) {
String before = textString.substring(textString.indexOf("-") - 1);
String after=textString.substring(textString.indexOf("-") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before - number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("*")) {
String before = textString.substring(textString.indexOf("*") - 1);
String after=textString.substring(textString.indexOf("*") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before * number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("/")) {
String before = textString.substring(textString.indexOf("/") - 1);
String after=textString.substring(textString.indexOf("/") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before / number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
break;
}
}
}
如果有任何遗漏的信息,请告诉我添加。提前致谢
编辑 :
这是错误:
01-31 19:16:11.604 3772-3772/com.example.ahmed.calculator E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ahmed.calculator, PID: 3772
java.lang.NumberFormatException: For input string: "5+2"
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
at java.lang.Float.parseFloat(Float.java:459)
at com.example.ahmed.calculator.MainActivity.onClick(MainActivity.java:137)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
你复制粘贴太多了,看看你的条件,如果你勾选 -,* 或 / 你仍然用 '+' 分割你的字符串而不是 - 或 * 或 / 分别你需要改变它,这样你获取边界异常索引
here is the issue
String before = textString.substring(textString.indexOf("+") - 1);
String after=textString.substring(textString.indexOf("+") + 1);
if input is "52+34"
before = 2+34
after = 34
Solution
String before = textString.substring(0,textString.indexOf("+"));
String after=textString.substring(textString.indexOf("+"), textString.length());
before = 52
after = 34
rest of the code to get the result looks OK.
在我的简单计算器项目中,当我按下等号按钮时程序退出,它说我的程序没有响应。在 android 监视器中,我找不到任何 error.The 等号按钮应该查看用户输入的数学运算符,假设它已经输入一次,之后它会得到之前和之后的数值运算符并执行所需的数学函数。这是我的代码:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public boolean isEmpty(EditText editText) {
if (editText.getText().toString().trim().length() > 0)
return false;
return true;
}
Button number9;Button number8;Button number7;Button number6;Button number5;Button number4;Button number3;Button number2;
Button number1;Button number0;Button numberplus;Button numberminus;Button numbertimes;Button numberdiv;Button numberequal;
Button numberdecimal;EditText text_;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number0= (Button) findViewById(R.id.btn0);
number1= (Button) findViewById(R.id.btn1);
number2= (Button) findViewById(R.id.btn2);
number3= (Button) findViewById(R.id.btn3);
number4= (Button) findViewById(R.id.btn4);
number5= (Button) findViewById(R.id.btn5);
number6= (Button) findViewById(R.id.btn6);
number7= (Button) findViewById(R.id.btn7);
number8= (Button) findViewById(R.id.btn8);
number9= (Button) findViewById(R.id.btn9);
numberplus= (Button) findViewById(R.id.btnplus);
numbertimes= (Button) findViewById(R.id.btntimes);
numberminus= (Button) findViewById(R.id.btnminus);
numberequal= (Button) findViewById(R.id.btnequal);
numberdiv= (Button) findViewById(R.id.btndiv);
numberdecimal= (Button) findViewById(R.id.btndecimal);
text_=(EditText) findViewById(R.id.editText);
number0.setOnClickListener(this);
number1.setOnClickListener(this);
number2.setOnClickListener(this);
number3.setOnClickListener(this);
number4.setOnClickListener(this);
number5.setOnClickListener(this);
number6.setOnClickListener(this);
number7.setOnClickListener(this);
number8.setOnClickListener(this);
number9.setOnClickListener(this);
numberplus.setOnClickListener(this);
numberminus.setOnClickListener(this);
numbertimes.setOnClickListener(this);
numberdiv.setOnClickListener(this);
numberequal.setOnClickListener(this);
numberdecimal.setOnClickListener(this);
text_.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn0:
text_.append("0");
break;
case R.id.btn1:
text_.append("1");
break;
case R.id.btn2:
text_.append("2");
break;
case R.id.btn3:
text_.append("3");
break;
case R.id.btn4:
text_.append("4");
break;
case R.id.btn5:
text_.append("5");
break;
case R.id.btn6:
text_.append("6");
break;
case R.id.btn7:
text_.append("7");
break;
case R.id.btn8:
text_.append("8");
break;
case R.id.btn9:
text_.append("9");
break;
case R.id.btnplus:
text_.append("+");
break;
case R.id.btnminus:
text_.append("-");
break;
case R.id.btndiv:
text_.append("/");
break;
case R.id.btntimes:
text_.append("*");
break;
case R.id.btndecimal:
text_.append(".");
break;
case R.id.btnequal:
String textString = text_.getText().toString();
if(textString.contains("+")) {
String before = textString.substring(textString.indexOf("+") - 1);
String after=textString.substring(textString.indexOf("+") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before + number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("-")) {
String before = textString.substring(textString.indexOf("-") - 1);
String after=textString.substring(textString.indexOf("-") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before - number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("*")) {
String before = textString.substring(textString.indexOf("*") - 1);
String after=textString.substring(textString.indexOf("*") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before * number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
if(textString.contains("/")) {
String before = textString.substring(textString.indexOf("/") - 1);
String after=textString.substring(textString.indexOf("/") + 1);
float number_after=Float.parseFloat(after);
float number_before=Float.parseFloat(before);
float result = number_before / number_after;
String final_result =String.valueOf(result);
text_.setText(final_result);
}
break;
}
}
}
如果有任何遗漏的信息,请告诉我添加。提前致谢 编辑 : 这是错误:
01-31 19:16:11.604 3772-3772/com.example.ahmed.calculator E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ahmed.calculator, PID: 3772
java.lang.NumberFormatException: For input string: "5+2"
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
at java.lang.Float.parseFloat(Float.java:459)
at com.example.ahmed.calculator.MainActivity.onClick(MainActivity.java:137)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
你复制粘贴太多了,看看你的条件,如果你勾选 -,* 或 / 你仍然用 '+' 分割你的字符串而不是 - 或 * 或 / 分别你需要改变它,这样你获取边界异常索引
here is the issue
String before = textString.substring(textString.indexOf("+") - 1);
String after=textString.substring(textString.indexOf("+") + 1);
if input is "52+34"
before = 2+34
after = 34
Solution
String before = textString.substring(0,textString.indexOf("+"));
String after=textString.substring(textString.indexOf("+"), textString.length());
before = 52
after = 34
rest of the code to get the result looks OK.