为android计算器创建点函数



我正在做一个小项目,从网上收集一些随机的计算器代码并改进它们来学习java和android开发…

所以,我目前试图实现这个计算器代码的点函数,但它不工作,因为它应该。它不是添加一个点,而是添加值46(为什么是46??)你能帮我创建一个功能点函数吗?

Java代码:

package com.example.Elof_Calculator;

  import android.os.Bundle;
  import android.app.Activity;
  import android.view.Menu;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  public class MainActivity extends Activity {
   public String str ="";
   Character op = 'q';
   double i,num,numtemp;
      EditText showResult;
      @Override
      public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    showResult = (EditText)findViewById(R.id.result_id);

   }
  public void btn1Clicked(View v){
   insert(1);
  }
   public void btn2Clicked(View v){
   insert(2);
  }
  public void btn3Clicked(View v){
   insert(3);
  }
  public void btn4Clicked(View v){
   insert(4);
  }
  public void btn5Clicked(View v){
   insert(5);
  }
  public void btn6Clicked(View v){
   insert(6);
  }
  public void btn7Clicked(View v){
   insert(7);
  }
  public void btn8Clicked(View v){
   insert(8);
  }
  public void btn9Clicked(View v){
   insert(9);
  }
  public void btn0Clicked(View v){
      insert(0);
     }
  public void btndotClicked(View v){
      insert('.');
      //error
     }
  public void btnplusClicked(View v){
   perform();
   op = '+';
  }
   public void btnminusClicked(View v){
      perform();
     op = '-';
  }
  public void btndivideClicked(View v){
   perform();
   op = '/';
  }
  public void btnmultiClicked(View v){
   perform();
   op = '*';
  }
  public void btnequalClicked(View v){
   calculate();
  }
   public void btnclearClicked(View v){
   reset();
  }
  private void reset() {
    // TODO Auto-generated method stub
  str ="";
  op ='q';
  num = 0;
  numtemp = 0;
  showResult.setText("");
  }
 private void insert(int j) {
    // TODO Auto-generated method stub
   str = str+Integer.toString(j);
   num = Integer.valueOf(str).intValue();
   showResult.setText(str);

  }
     private void perform() {
    // TODO Auto-generated method stub
    str = "";
    numtemp = num;
     }
      private void calculate() {
     // TODO Auto-generated method stub
     if(op == '+')
    num = numtemp+num;
   else if(op == '-')
    num = numtemp-num;
   else if(op == '/')
    num = numtemp/num;
   else if(op == '*')
    num = numtemp*num;
   showResult.setText(""+num);
     }
    }
点按钮的XML代码:
 <Button
            android:id="@+id/Btndot_id"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="70dp"
            android:layout_height="64dp"
            android:background="@drawable/buttonstyle1"
            android:gravity="center_vertical|center_horizontal"
            android:text="."
            android:textColor="@android:color/white"
            android:textSize="22sp" 
             android:onClick="btndotClicked"
            />
下面是java函数和点函数的代码,这是主要的错误:
 public void btndotClicked(View v){
      insert('.');

     }
那么,点函数的代码应该是怎样的呢?感谢所有的帮助:)

问题是您的插入函数具有签名void insert(int j)

在Java中,如果您使用char原语类型而期望使用int类型,则会发生隐式的扩展转换。例如这是有效的Java:

int dot = '.';

然而,int变量dot的值现在将是46,恰好是与用于表示'.'的位模式对应的整数。

你能做的就是改变你的insert函数来接受String参数,并为int参数添加一个重载。您还需要更改num周围的逻辑,因为您现在可以使用浮点数。

private void insert(int value) {
    insert(Integer.toString(value));
    ...
    num = Double.parseDouble(str);
}
private void insert(String value) {        
    ...
}
...
public void btndotClicked(View v){
    insert("."); // inserting a String instead of a char
}

最新更新