我在android studio中制作了一个简单的应用程序。我已经使用一个单一的textview接受两个数字。我还为10位数字,4个操作和小数点设置了按钮,并等于它。
我的应用无法读取第二个数字。当我按“ =”按钮时,它仅显示第一个数字。 例如,当我输入数字25并按“ +”按钮时,该数字将存储在float变量res中,并且清除了textview。现在,如果我输入第二个数字11并按'=',则输出为25.0
下面是我按下+按钮时的代码。
sum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText().toString());
res=res+num1;
result.setText(null);
num1=0;
}
}
});
和下面是我按=
时的代码 equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(Float.toString(res));
res=0;
}
});
num1
和res
都是浮点型的,都初始化为0。
编辑:-添加完整的Java代码。
public class Calculator extends AppCompatActivity {
TextView result;
Button one,two,three,four,five,six,seven,eight,nine,zero,sum,sub,mul,div,decimal,equal;
float num1,num2,res=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
result = findViewById(R.id.result);
one = findViewById(R.id.button_one);
two = findViewById(R.id.button_two);
three = findViewById(R.id.button_three);
four = findViewById(R.id.button_four);
five = findViewById(R.id.button_five);
six = findViewById(R.id.button_six);
seven = findViewById(R.id.button_seven);
eight = findViewById(R.id.button_eight);
nine = findViewById(R.id.button_nine);
zero = findViewById(R.id.button_zero);
sum = findViewById(R.id.button_add);
sub = findViewById(R.id.button_sub);
mul = findViewById(R.id.button_mul);
div = findViewById(R.id.button_div);
decimal = findViewById(R.id.button_decimal);
equal = findViewById(R.id.button_equal);
one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "1");
}
});
two.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "2");
}
});
three.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "3");
}
});
four.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "4");
}
});
five.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "5");
}
});
six.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "6");
}
});
seven.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "7");
}
});
eight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "8");
}
});
nine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "9");
}
});
zero.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + "0");
}
});
decimal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(result.getText() + ".");
}
});
sum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText().toString());
res=res+num1;
result.setText(null);
num1=0;
}
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText() + "");
res=res-num1;
result.setText(null);
}
}
});
mul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText() + "");
res=res/num1;
result.setText(null);
}
}
});
div.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText() + "");
res=res/num1;
result.setText(null);
}
}
});
equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(Float.toString(res));
res=0;
}
});
}
}
答案 0 :(得分:0)
所有运算符功能中都存在逻辑错误。 每当调用特定函数时,都应在所有运算符中添加此行。
result.setText(num1 - num2 + "");
result.setText(num1 + num2 + "");
等等!
答案 1 :(得分:0)
您未读入第二个数字的值(运算符的右侧)。您的=按钮的OnClickListener除了显示res之外什么也没有。它不应用运算符的右手,即第二个数字
例如1 + 2 = 3
步骤1按1 步骤2按+,程序将移至运算符的左侧,并将其加载到num1并将其添加到res。 步骤3按2 步骤4按=,程序将显示res
如果您想实时查看程序的运行状况,请尝试使用“调试”工具,在其中可以逐行浏览程序,并查看将哪些变量设置为多余的变量。
答案 2 :(得分:0)
为操作员使用开关盒, 假设以下是字段;
public static final int plus = 1
public static final int minus= 2
public static final int divide= 3
public static final int multiply= 4
和一个保存当前操作的变量,
int currentOperation;
,然后单击某些操作员按钮,然后为该操作分配“ currentOperation” 在听众中
sum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(result.getText()==null)
{
result.setText("");
}
else
{
num1 = Float.parseFloat(result.getText().toString());
res=res+num1;
result.setText(null);
num1=0;
currentOperation = plus //plus is public static final int plus = 1
}
}
});
并使用switch语句更新'='lisetener,
equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = Float.parseFloat(result.getText().toString());
switch(currentOperation){
case plus:
res=res+num1;
break;
case minus:
res=res-num1;
break;
case divide:
res=res/num1;
break;
case multiply:
res=res*num1;
break;
}
result.setText(""+ res);
num1=0;
}
});