java - 为 Android 计算器创建点函数

标签 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"
            />

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

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


     }

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

最佳答案

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

在 Java 中,如果在需要 int 类型时使用 char 基元类型,则会发生隐式扩展转换。例如,这是有效的 Java:

int dot = '.';

但是,int 变量dot 的值现在为 46,这恰好是与用于表示 的位模式相对应的整数'.'.

您可以做的是更改您的 insert 函数以接受 String 参数并为 int 参数添加重载。您还需要更改 num 周围的逻辑,因为您现在可以拥有 float 。

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
}

关于java - 为 Android 计算器创建点函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975767/

相关文章:

java - firebase.auth.FirebaseUser.linkWithCredential 抛出空指针异常

android - 在 OpenGL ES 中翻转 Y 轴?

java - ListView 共享元素转换问题

javascript - 如何使用 JavaScript 访问 BadgerFish 注释的属性?

java - 收集线程中的值并将其保存到 java 套接字数组中

java - 服务器-客户端 NTP 项目 - NullPointerException/SocketException 问题

另一个线程内的 Java 同步

java - Android - 超过 3g 使用哪些端口以及 TCP 最佳连接方法?

java - 共享操作提供程序未显示

android - 通过膨胀布局创建自定义 View ?