【问题标题】:Calculator in Android StudioAndroid Studio 中的计算器
【发布时间】:2015-08-30 17:05:56
【问题描述】:

我一直在尝试在 android studio 中构建一个简单的计算器。我是初学者,只有 java 的基本知识。我试图在单个文本字段中接受值而不是使用两个不同的文本字段。我使用过我的操作员按钮和等号按钮上的点击监听器。但我的应用程序在我点击操作员按钮后立即关闭。如何使用单个文本视图两个接受两个或更多数字并应用数学运算符他们?

编辑:正如我已经说过的,我对 java 知之甚少。在发布这个问题之前,我进行了谷歌搜索。

        add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            n.setText("");
            final float a = Float.parseFloat(n.getText().toString());
            n.setText("");
            equals.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    float b = Float.parseFloat(n.getText().toString());
                    float c = a + b;
                    ans.setText("" + c);
                    n.setText("");
                }
            });
        }
    });

【问题讨论】:

  • 请发布您的代码。
  • 您是否尝试将 equals.setOnClickListener 块放在 add.setOnClickListener 之外?
  • @Nabin 是的。即使我在 add.set 块之外使用 equals.set...... 并使用 if else 条件来检查要执行的操作,它仍然没有工作。

标签: java android android-studio calculator


【解决方案1】:

在你做的第一行:

n.setText("");

只有在那之后你才能阅读文本

n.getText().toString()

它返回一个传递给 parseFloat() 的空字符串。 parseFloat() 不需要空字符串,因此它会引发异常并关闭您的应用程序。

因此,在实际读取所需值之前,请不要 setText("")。

更一般地说,我会考虑在每次点击时保存当前状态。例如,您可以仅在输入数字、单击操作员按钮并输入另一个数字后启用等号按钮。

【讨论】:

    【解决方案2】:

    这是 .java 文件。由于空间不足,部分按钮代码丢失。

    one.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            } else {
                textViewresult.setText(textViewresult.getText() + "1");
            }
        }
    });
    two.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            } else
    
                textViewresult.setText(textViewresult.getText() + "2");
        }
    });
    
    
    seven.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            }
            textViewresult.setText(textViewresult.getText() + "7");
        }
    });
    
    
    eight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            }
            textViewresult.setText(textViewresult.getText() + "8");
    
        }
    });
    
    
    nine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            }
            textViewresult.setText(textViewresult.getText() + "8");
        }
    });
    
    zero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //textViewresult.setText("");
            textViewresult.setText(textViewresult.getText() + "0");
        }
    });
    
    
    dot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (equalcheck == true) {
                textViewresult.setText("");
                equalcheck = false;
            }
            textViewresult.setText(textViewresult.getText() + ".");
        }
    });
    
    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            if (textViewresult.getText() == "") {
    
                textViewresult.setText("");
            } else {
                val1 = Double.parseDouble(textViewresult.getText() + "");
                add = true;
    
                textViewresult.setText(null);
            }
        }
    });
    
    minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            if (textViewresult.getText() == "") {
    
                textViewresult.setText("");
            } else {
                val1 = Double.parseDouble(textViewresult.getText() + "");
                sub = true;
                textViewresult.setText(null);
            }
        }
    });
    
    multiply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (textViewresult.getText() == "") {
    
                textViewresult.setText("");
            } else {
                val1 = Double.parseDouble(textViewresult.getText() + "");
                mul = true;
                textViewresult.setText(null);
            }
        }
    });
    division.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (textViewresult.getText() == "") {
    
                textViewresult.setText("");
            } else {
                val1 = Double.parseDouble(textViewresult.getText() + "");
                div = true;
                textViewresult.setText(null);
            }
        }
    });
    
    equal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
            if (textViewresult.getText() == "") {
                textViewresult.setText("");
            } else {
                equalcheck = true;
                val2 = Double.parseDouble(textViewresult.getText() + "");
                if (add == true) {
                    textViewresult.setText(val1 + val2 + "");
                    add = false;
                }
                if (sub == true) {
                    textViewresult.setText(val1 - val2 + "");
                    sub = false;
                }
                if (mul == true) {
                    textViewresult.setText(val1 * val2 + "");
                    mul = false;
                }
                if (div == true) {
                    textViewresult.setText(val1 / val2 + "");
                    div = false;
                }
            }
        }
    });
    clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textViewresult.setText("");
        }
    });
    

    【讨论】:

      【解决方案3】:
      package com.example.rahul.calculator;
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.util.Log;
      import android.view.View;
      import android.widget.Button;
      import android.widget.TextView;
      public class MainActivity extends AppCompatActivity {
          Button one, two, three, four, five, six, seven, eight, nine, zero, plus,      minus, multiply, division, equal, dot, clear;
          TextView textViewresult = null;
          double val1, val2;
      
          boolean add, sub, div, mul;
          boolean equalcheck = false;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              one = (Button) findViewById(R.id.btn_1);
              two = (Button) findViewById(R.id.btn_2);
              three = (Button) findViewById(R.id.btn_3);
              four = (Button) findViewById(R.id.btn_4);
              five = (Button) findViewById(R.id.btn_5);
              six = (Button) findViewById(R.id.btn_6);
              seven = (Button) findViewById(R.id.btn_7);
              eight = (Button) findViewById(R.id.btn_8);
              nine = (Button) findViewById(R.id.btn_9);
              zero = (Button) findViewById(R.id.btn_0);
              plus = (Button) findViewById(R.id.btn_plus);
              minus = (Button) findViewById(R.id.btn_minus);
              multiply = (Button) findViewById(R.id.btn_multiply);
              division = (Button) findViewById(R.id.btn_divide);
              equal = (Button) findViewById(R.id.btn_equal);
              textViewresult = (TextView) findViewById(R.id.tv_result);
              dot = (Button) findViewById(R.id.btn_dot);
              clear = (Button) findViewById(R.id.btn_clear);
      
      
              one.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      } else {
                          textViewresult.setText(textViewresult.getText() + "1");
                      }
                  }
              });
      
      
              two.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      } else
      
                          textViewresult.setText(textViewresult.getText() + "2");
                  }
              });
      
      
              three.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "3");
                  }
              });
      
      
              four.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "4");
                  }
              });
      
      
              five.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "5");
                  }
              });
      
      
              six.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "6");
                  }
              });
      
      
              seven.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "7");
                  }
              });
      
      
              eight.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "8");
      
                  }
              });
      
      
              nine.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + "8");
                  }
              });
      
              zero.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      //textViewresult.setText("");
                      textViewresult.setText(textViewresult.getText() + "0");
                  }
              });
      
      
              dot.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (equalcheck == true) {
                          textViewresult.setText("");
                          equalcheck = false;
                      }
                      textViewresult.setText(textViewresult.getText() + ".");
                  }
              });
      
              plus.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
      
                      if (textViewresult.getText() == "") {
      
                          textViewresult.setText("");
                      } else {
                          val1 = Double.parseDouble(textViewresult.getText() + "");
                          add = true;
      
                          textViewresult.setText(null);
                      }
                  }
              });
      
              minus.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
      
                      if (textViewresult.getText() == "") {
      
                          textViewresult.setText("");
                      } else {
                          val1 = Double.parseDouble(textViewresult.getText() + "");
                          sub = true;
                          textViewresult.setText(null);
                      }
                  }
              });
      
              multiply.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (textViewresult.getText() == "") {
      
                          textViewresult.setText("");
                      } else {
                          val1 = Double.parseDouble(textViewresult.getText() + "");
                          mul = true;
                          textViewresult.setText(null);
                      }
                  }
              });
              division.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      if (textViewresult.getText() == "") {
      
                          textViewresult.setText("");
                      } else {
                          val1 = Double.parseDouble(textViewresult.getText() + "");
                          div = true;
                          textViewresult.setText(null);
                      }
                  }
              });
      
              equal.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
      
                      if (textViewresult.getText() == "") {
      
                          textViewresult.setText("");
                      } else {
      
                          equalcheck = true;
                          val2 = Double.parseDouble(textViewresult.getText() + "");
                          if (add == true) {
      
      
                              textViewresult.setText(val1 + val2 + "");
                              add = false;
      
                          }
                          if (sub == true) {
                              textViewresult.setText(val1 - val2 + "");
                              sub = false;
                          }
                          if (mul == true) {
                              textViewresult.setText(val1 * val2 + "");
                              mul = false;
                          }
                          if (div == true) {
                              textViewresult.setText(val1 / val2 + "");
                              div = false;
                          }
      
                      }
      
                  }
      
              });
              clear.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      textViewresult.setText("");
                  }
              });
          }
      }
      

      【讨论】:

        【解决方案4】:
        public class MainActivity extends AppCompatActivity
        {
            private boolean op=false;
            private double f_value=0;
            private int s_value_index=0;
            private char oper;
        
            @Override
            public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
            //Buttons and their values
        
                final TextView show= (TextView) findViewById(R.id.result);
                final Button n9= (Button) findViewById(R.id.n9);
                final Button n8= (Button) findViewById(R.id.n8);
                final Button add= (Button) findViewById(R.id.add);
                final Button clr= (Button) findViewById(R.id.clear);
                final Button dlt= (Button) findViewById(R.id.delete);
                final Button equal= (Button) findViewById(R.id.equal);
        
                final View.OnClickListener xal =new View.OnClickListener(){
                    @Override
                    public void onClick(View v){
                        final int id=v.getId();
                        switch (id){
                            case R.id.n9:{
                                show.append("9");
                                break;
                            }
                            case R.id.n8:{
                                show.append("8");
                                break;
                            }
                            case R.id.add:{
                                String content1=show.getText().toString();
                                s_value_index=content1.length()+1;
                                f_value= Double.parseDouble(content1);
                                op=true;
                                show.append("+");
                                oper='+';
                                break;
                            }
                            case R.id.equal:{
                                if(op)
                                {
                                    if (oper=='+')
                                    {
                                        String content= show.getText().toString();
                                        String content2=
                                       content.substring(s_value_index,content.length());
                                        double s_value=Double.parseDouble(content2);
                                        s_value+=f_value;
                                        show.setText(String.valueOf(s_value));
                                    }
                                }
                                break;
                            }
                            default:
                                break;
                        }
                    }
                };
                n9.setOnClickListener(xal);
                n8.setOnClickListener(xal);
                add.setOnClickListener(xal);
                equal.setOnClickListener(xal);
        
                //Clears a single one
                clr.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String str;
                        str=show.getText().toString();
                        int len=str.length();
                        if(len>0)
                        {
                            str=str.substring(0,len-1);
                            show.setText(str);
                        }
                    }
                });
        
                //Deletes the whole
                dlt.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String s="";
                        show.setText(s.toString());
                    }
                });
            }
        }
        

        我在这里只使用了两个数字 8(n8) 和 9(n9) 以及 add(+)、clear(clr)、delete(dlt) 按钮。 add 只会使用 double 类型变量 添加数字,而 clear删除 用户输入的最后一个数字,而 delete 将删除整个字符串(所有屏幕上的数字或任何特殊符号)(我正在使用 textView)。

        【讨论】:

          【解决方案5】:
          **
          
          > ***SIMPLE CALCULATOR CODE***
          
          **
          
          
          public class MainActivity extends AppCompatActivity {
          
              EditText edit;
              Button add, subtract, multiply, divide, equal,clr;
              TextView result;
              String operator;
              float temp1, temp2, sum;
          
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
          
                  add = (Button) findViewById(R.id.addition);
                  subtract = (Button) findViewById(R.id.subtraction);
                  multiply = (Button) findViewById(R.id.multiplication);
                  divide = (Button) findViewById(R.id.division);
                  equal = (Button) findViewById(R.id.equal);
                  result = (TextView) findViewById(R.id.result);
                  edit = (EditText) findViewById(R.id.user_input);
                  clr = (Button)findViewById(R.id.clear);
          
                  try {
                      //Additon
                      add.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (temp1 == 0) {
                                  temp1 = Float.parseFloat(edit.getText().toString());
                                  operator = "+";
                                  edit.setText("");
                              } else {
          
                                  edit.setText("");
                              }
                          }
                      });
          
                      //Division
                      divide.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (temp1 == 0) {
                                  temp1 = Float.parseFloat(edit.getText().toString());
                                  operator = "/";
          
                                  edit.setText("");
                              } else {
                                  edit.setText("");
                              }
                          }
                      });
          
                      //Subtract
                      subtract.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (temp1 == 0) {
                                  temp1 = Float.parseFloat(edit.getText().toString());
                                  operator = "-";
                                  edit.setText("");
          
                              } else {
          
                                  edit.setText("");
                              }
                          }
                      });
          
                      //Multiplication
                      multiply.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (temp1 == 0) {
                                  temp1 = Float.parseFloat(edit.getText().toString());
                                  operator = "*";
                                  edit.setText("");
                              } else {
                                  edit.setText("");
                              }
                          }
                      });
          
                      //Clear
                      clr.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
          
                              temp1 = 0;
                              temp2 = 0;
                              edit.setText("");
                              result.setText("");
          
                          }
                      });
          
                      //Equal
                      equal.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (temp2 == 0) {
                                  temp2 = Float.parseFloat(edit.getText().toString());
                                  switch (operator) {
                                      case "+":
                                          sum = temp1 + temp2;
          
                                          break;
                                      case "-":
                                          sum = temp1 - temp2;
                                          break;
                                      case "*":
                                          sum = temp1 * temp2;
                                          break;
                                      case "/":
                                          sum = temp1 / temp2;
                                          break;
          
                                  }
                                  edit.setText(Float.toString(sum));
                                  Toast.makeText(MainActivity.this,"RESULT IS DISPLAYED IN EDIT TEXT VIEW :", Toast.LENGTH_SHORT).show();
                                  result.setText(Float.toString(temp1)+" "+operator+" "+Float.toString(temp2));
          
                              }
          
                              temp1 = 0;
                              temp2 = 0;
                          }
                      });
                  } catch (Exception e) {
                  }
          
              }
          }
          

          【讨论】:

          • 这没有回答问题。这只是给出了一个工作计算器的例子,我们都可以在 github 上找到。此外,您需要解释您的答案,而不仅仅是发布代码。
          • 感谢您在这里引起我的注意。下次我会这样做。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          • 2021-11-28
          • 2021-02-16
          • 1970-01-01
          • 1970-01-01
          • 2020-12-31
          • 1970-01-01
          相关资源
          最近更新 更多