如何解决 android (java) 中的退格错误
how do I resolve backspace error in android (java)
我正在 java 中制作一个计算器应用程序。我添加了退格键功能,它在屏幕上显示正常,但是当计算完成后,它显示一些 random value
.
示例:-
input-1 : 963, input-2 : 78 但我按退格键删除了 8。
操作: input-1 + input-2.
答案: 14.
input-1 : 956, input-2 : 48 但我按退格键删除了 8。
操作: input-1 + input-2.
答案: 8.
如果我使用减法运算(带退格键),那么它总是 returns 0.
这是我的 backspace
代码
private String input, input2 ;
private Double input_number;
boolean Addition, Subtract, Multiplication, Division, mRemainder, decimal, add_sub;
num_backspace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sample_input = (num_input.getText() + "");
input = sample_input.substring(0, sample_input.length() - 1);
num_input.setText(input);
if (input.contains(".")){
decimal = true;
}
else{
decimal = false;
}
}
});
这是我的 equals
代码
num_equals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Addition || Subtract || Multiplication || Division || mRemainder) {
input2 = (num_input.getText() + "");
}
if (Addition) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input + final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input + final_input2 + "").toString().replaceAll("\.?0*$", ""));
Addition = false;
}
if (Subtract) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input - final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input - final_input2 + "").toString().replaceAll("\.?0*$", ""));
Subtract = false;
}
if (Multiplication) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input * final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input * final_input2 + "").toString().replaceAll("\.?0*$", ""));
Multiplication = false;
}
if (Division) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input / final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input / final_input2 + "").toString().replaceAll("\.?0*$", ""));
Division = false;
}
if (mRemainder) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input % final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input % final_input2 + "").toString().replaceAll("\.?0*$", ""));
mRemainder = false;
}
}
});
如果需要,可以在此处查看完整代码
您好,您要在点击 backpress
时重置 input
字段,将您的 backpress
代码更改为下面的代码,它将起作用
num_backspace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sample_input = (num_input.getText() + "");
String mInput = sample_input.substring(0, sample_input.length() - 1);
num_input.setText(mInput);
if (mInput.contains(".")){
decimal = true;
}
else{
decimal = false;
}
}
});
这里一般有4个按钮。
0
、1
…9
:在num_input
上加数字
+
,将num_input
分配给input
。清除 num_input
<-
, input
= num_input.substring(0, n-1)
=
,将num_input
分配给input2
问题是,退格键可能发生在选择操作之前或之后。但是,退格键总是从 num_input
中减去字符串。同时,num_input
可能是 input
和 input2
的数据来源(参见第 2 和 4 部分)。
如果我输入这个序列 4
0
+
1
2
<-
=
。应该是40+1=。但在 <-
期间实际发生的是将 1 覆盖为 input
而不是 input2
。这就是为什么根据您的示例,错误答案 = 第二个数字 + 第二个数字。
输入 2 : 78 , 答案 = 7 + 7 = 14
input-2 : 48 ,answer = 4 + 4 = 8
此外,我有一些建议阅读您的问题。它们不是必需的,可能与问题没有直接关系,只是一般编程中的一些建议。
- 不要将数字存储为字符串。您不需要通过从 TextView 中提取它来获取计算器当前保存的数值。你有你的
input_number
,其中包含数字的真实值。将其作为最准确的来源,并将 TextView 仅视为一种表示形式。反其道而行之可能不是一个好主意。字符串操作和解析不是很安全(解析错误)。而且,这对我来说听起来是一个额外的步骤。
- 加法、减法、乘法、除法。命令模式的一个很好的展示。你不想写很长的if。这对可维护性不利。考虑到以后你可能会在计算器中添加更多的功能,sin, cos, log, power 等。很快代码就会变得凌乱。
- 为什么
(num_input.getText() + "")
? getText()
return 字符串,不需要隐式转换
num_period
设置 onclick 侦听器。
我正在 java 中制作一个计算器应用程序。我添加了退格键功能,它在屏幕上显示正常,但是当计算完成后,它显示一些 random value
.
示例:-
input-1 : 963, input-2 : 78 但我按退格键删除了 8。
操作: input-1 + input-2.
答案: 14.
input-1 : 956, input-2 : 48 但我按退格键删除了 8。
操作: input-1 + input-2.
答案: 8.
如果我使用减法运算(带退格键),那么它总是 returns 0.
这是我的 backspace
private String input, input2 ;
private Double input_number;
boolean Addition, Subtract, Multiplication, Division, mRemainder, decimal, add_sub;
num_backspace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sample_input = (num_input.getText() + "");
input = sample_input.substring(0, sample_input.length() - 1);
num_input.setText(input);
if (input.contains(".")){
decimal = true;
}
else{
decimal = false;
}
}
});
这是我的 equals
num_equals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Addition || Subtract || Multiplication || Division || mRemainder) {
input2 = (num_input.getText() + "");
}
if (Addition) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input + final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input + final_input2 + "").toString().replaceAll("\.?0*$", ""));
Addition = false;
}
if (Subtract) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input - final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input - final_input2 + "").toString().replaceAll("\.?0*$", ""));
Subtract = false;
}
if (Multiplication) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input * final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input * final_input2 + "").toString().replaceAll("\.?0*$", ""));
Multiplication = false;
}
if (Division) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input / final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input / final_input2 + "").toString().replaceAll("\.?0*$", ""));
Division = false;
}
if (mRemainder) {
float final_input = Float.parseFloat(input);
float final_input2 = Float.parseFloat(input2);
num_input.setText(new Float(final_input % final_input2 + "").toString().replaceAll("\.?0*$", ""));
num_output.setText(new Float(final_input % final_input2 + "").toString().replaceAll("\.?0*$", ""));
mRemainder = false;
}
}
});
如果需要,可以在此处查看完整代码
您好,您要在点击 backpress
时重置 input
字段,将您的 backpress
代码更改为下面的代码,它将起作用
num_backspace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sample_input = (num_input.getText() + "");
String mInput = sample_input.substring(0, sample_input.length() - 1);
num_input.setText(mInput);
if (mInput.contains(".")){
decimal = true;
}
else{
decimal = false;
}
}
});
这里一般有4个按钮。
0
、1
…9
:在num_input
上加数字
+
,将num_input
分配给input
。清除num_input
<-
,input
=num_input.substring(0, n-1)
=
,将num_input
分配给input2
问题是,退格键可能发生在选择操作之前或之后。但是,退格键总是从 num_input
中减去字符串。同时,num_input
可能是 input
和 input2
的数据来源(参见第 2 和 4 部分)。
如果我输入这个序列 4
0
+
1
2
<-
=
。应该是40+1=。但在 <-
期间实际发生的是将 1 覆盖为 input
而不是 input2
。这就是为什么根据您的示例,错误答案 = 第二个数字 + 第二个数字。
输入 2 : 78 , 答案 = 7 + 7 = 14
input-2 : 48 ,answer = 4 + 4 = 8
此外,我有一些建议阅读您的问题。它们不是必需的,可能与问题没有直接关系,只是一般编程中的一些建议。
- 不要将数字存储为字符串。您不需要通过从 TextView 中提取它来获取计算器当前保存的数值。你有你的
input_number
,其中包含数字的真实值。将其作为最准确的来源,并将 TextView 仅视为一种表示形式。反其道而行之可能不是一个好主意。字符串操作和解析不是很安全(解析错误)。而且,这对我来说听起来是一个额外的步骤。 - 加法、减法、乘法、除法。命令模式的一个很好的展示。你不想写很长的if。这对可维护性不利。考虑到以后你可能会在计算器中添加更多的功能,sin, cos, log, power 等。很快代码就会变得凌乱。
- 为什么
(num_input.getText() + "")
?getText()
return 字符串,不需要隐式转换 num_period
设置 onclick 侦听器。