为android计算器创建点函数

时间:2014-06-01 00:42:06

标签: java android xml calculator

我正在做一个小项目,从网上收集一些随机计算器代码并改进它们以学习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"
            />

这是dot函数的java函数和代码,具体是主要错误:

 public void btndotClicked(View v){
      insert('.');


     }

那么,点函数的代码应该如何呢? 所有帮助表示赞赏:))

1 个答案:

答案 0 :(得分:0)

问题是您的插入函数具有签名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
}