即时计算,无需单击等于按钮并使用多个运算符
Instant calculation without clicking the equal button and using more than one oper
这是我的第一个问题
我正在编写一个 android 计算器应用程序,但我遇到的问题很少
我正在尝试制作一项功能,其中一旦单击任何操作按钮(+,-/,*),计算器应该立即显示结果而不是单击等于按钮,同时您可以执行多个操作,我成功使其仅适用于一个操作 (+) 但我无法让它与其他操作一起使用
我把它变成了数字按钮
这是 3 号按钮的代码,maddition 和 msubstract 是点击侦听器
的加号按钮
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText() + "3");
tv.setText(tv.getText() + "3");
float z = Float.parseFloat(edt1.getText().toString());
int i = 0;
if (mAddition) {
String s = tv.getText().toString();
String x = "";
while (i < s.length()) {
if (s.charAt(i) != '+') {
x = x + s.charAt(i) + "";
} else {
float m = Float.parseFloat(x);
z = z + m;
x = "";
}
i++;
}
tvz.setText(z + "");
xAdd = false;
}
if (mSubtract) {
String s = tv.getText().toString();
String x = "";
while (i < s.length()) {
if (s.charAt(i) != '-') {
x = x + s.charAt(i) + "";
} else {
if (isDouble(x)){
float m = Float.parseFloat(x);
z = z - m;
x = "";
}
}
i++;
}
tvz.setText(z + "");
xSub = false;
}
}
});
添加点击监听器
buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(edt1.getText().toString())) {
return;
}
String str = edt1.getText().toString();
if (isDouble(str)) {
if (edt1 == null) {
edt1.setText("");
} else {
mValueOne = Float.parseFloat(edt1.getText() + "");
tv.setText(tv.getText() + "+");
mAddition = true;
edt1.setText(null);
}
} else return;
}
});
这是我的源代码
https://pastebin.com/7QaDvx9D
错误日志猫
05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 做部分代码缓存收集,代码=17KB,数据=24KB
05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 代码缓存收集后,代码=17KB,数据=24KB
05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art:增加代码缓存容量至128KB
05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度
05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度
05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度
05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度
05-27 12:33:58.948 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度
05-27 12:33:58.949 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度
05-27 12:33:59.931 24916-24916/ispam.mark_06 D/AndroidRuntime: 关闭虚拟机
05-27 12:33:59.933 24916-24916/ispam.mark_06 E/AndroidRuntime:致命异常:main
进程:ispam.mark_06,PID:24916
java.lang.NumberFormatException:对于输入字符串:“3-3-3”
在 java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
在 java.lang.Float.parseFloat(Float.java:459)
在 ispam.mark_06.Calculator$4.onClick(Calculator.java:182)
在 android.view.View.performClick(View.java:5685)
在 android.view.View$PerformClick.run(View.java:22481)
在 android.os.Handler.handleCallback(Handler.java:751)
在 android.os.Handler.dispatchMessage(Handler.java:95)
在 android.os.Looper.loop(Looper.java:241)
在 android.app.ActivityThread.main(ActivityThread.java:6274)
在 java.lang.reflect.Method.invoke(本机方法)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
提前感谢任何帮助?
根据错误,我了解到原因是您的代码试图将字符串“3-3-3”解析为浮点值,因此出现错误。
为避免此错误,您可以在计算并显示答案后清除编辑文本,即执行 tv.setText("");在显示结果后,旧运算符仍然不会附加到编辑文本文本中。
这是我的第一个问题 我正在编写一个 android 计算器应用程序,但我遇到的问题很少 我正在尝试制作一项功能,其中一旦单击任何操作按钮(+,-/,*),计算器应该立即显示结果而不是单击等于按钮,同时您可以执行多个操作,我成功使其仅适用于一个操作 (+) 但我无法让它与其他操作一起使用
我把它变成了数字按钮 这是 3 号按钮的代码,maddition 和 msubstract 是点击侦听器
的加号按钮button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt1.setText(edt1.getText() + "3");
tv.setText(tv.getText() + "3");
float z = Float.parseFloat(edt1.getText().toString());
int i = 0;
if (mAddition) {
String s = tv.getText().toString();
String x = "";
while (i < s.length()) {
if (s.charAt(i) != '+') {
x = x + s.charAt(i) + "";
} else {
float m = Float.parseFloat(x);
z = z + m;
x = "";
}
i++;
}
tvz.setText(z + "");
xAdd = false;
}
if (mSubtract) {
String s = tv.getText().toString();
String x = "";
while (i < s.length()) {
if (s.charAt(i) != '-') {
x = x + s.charAt(i) + "";
} else {
if (isDouble(x)){
float m = Float.parseFloat(x);
z = z - m;
x = "";
}
}
i++;
}
tvz.setText(z + "");
xSub = false;
}
}
});
添加点击监听器
buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(edt1.getText().toString())) {
return;
}
String str = edt1.getText().toString();
if (isDouble(str)) {
if (edt1 == null) {
edt1.setText("");
} else {
mValueOne = Float.parseFloat(edt1.getText() + "");
tv.setText(tv.getText() + "+");
mAddition = true;
edt1.setText(null);
}
} else return;
}
});
这是我的源代码 https://pastebin.com/7QaDvx9D
错误日志猫 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 做部分代码缓存收集,代码=17KB,数据=24KB 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art: 代码缓存收集后,代码=17KB,数据=24KB 05-27 12:33:55.565 24916-24921/ispam.mark_06 I/art:增加代码缓存容量至128KB 05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:56.931 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:57.375 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能有零长度 05-27 12:33:58.948 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度 05-27 12:33:58.949 24916-24916/ispam.mark_06 E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE 跨度不能为零长度 05-27 12:33:59.931 24916-24916/ispam.mark_06 D/AndroidRuntime: 关闭虚拟机 05-27 12:33:59.933 24916-24916/ispam.mark_06 E/AndroidRuntime:致命异常:main 进程:ispam.mark_06,PID:24916 java.lang.NumberFormatException:对于输入字符串:“3-3-3” 在 java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306) 在 java.lang.Float.parseFloat(Float.java:459) 在 ispam.mark_06.Calculator$4.onClick(Calculator.java:182) 在 android.view.View.performClick(View.java:5685) 在 android.view.View$PerformClick.run(View.java:22481) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:241) 在 android.app.ActivityThread.main(ActivityThread.java:6274) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
提前感谢任何帮助?
根据错误,我了解到原因是您的代码试图将字符串“3-3-3”解析为浮点值,因此出现错误。 为避免此错误,您可以在计算并显示答案后清除编辑文本,即执行 tv.setText("");在显示结果后,旧运算符仍然不会附加到编辑文本文本中。