Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为android计算器创建点函数_Java_Android_Xml_Calculator - Fatal编程技术网

Java 为android计算器创建点函数

Java 为android计算器创建点函数,java,android,xml,calculator,Java,Android,Xml,Calculator,我正在做一个小项目,从网上收集一些随机计算器代码,并改进它们以学习java和android开发 所以,我目前正在尝试为这个计算器代码实现一个点函数,但它并没有像预期的那样工作。它不添加点,而是添加值46(为什么是46??)。你能帮我创建一个功能点函数吗 Java代码: package com.example.Elof_Calculator; import android.os.Bundle; import android.app.Activity; import 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"
            />
那么,dot函数的代码应该是什么呢?
感谢所有帮助:)

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

在Java中,如果在需要
int
类型时使用
char
基元类型,则会发生隐式加宽转换。例如,这是有效的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
}

提示:46是字符“.”的ascii值:)@matiash ohh我看到了哈哈:)我试过使用insert(.)、insert(“.”)、str+=“.”和其他一些方法,但都没有成功:(非常感谢,伙计,它现在工作得更好了!:D然而,当我尝试例如6.6*6时,结果变成39599994,而不是39.6为什么?:/对于一些值,它不这样做(例如2.4*2=4.8)@这是因为一些浮点值只能用64位的双精度近似表示。这是一个不幸的现象,也是造成很多混乱的原因。看看这篇文章吧
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
}