安卓应用程序上的 if 语句帮助



iv 创建了一个 android 应用程序,我的问题是当我在输入数字之前按下 + = -/* 按钮时,我的应用程序停止工作,无论如何我可以让它如果没有数字输入它不会停止工作?


package steven.mcilhone.calculatorcoursework;
import java.math.BigDecimal;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Calculator extends Activity {
EditText firstValue;
EditText secondValue;
TextView result;
Button addbtn, subtractbtn, dividebtn, multiplybtn, equalbtn, clearbtn;
BigDecimal firstNum, secondNum;

String Operator = "";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calculator);
    addbtn = (Button) findViewById(R.id.addbtnID);
    subtractbtn = (Button) findViewById(R.id.subtractbtnID);
    dividebtn = (Button) findViewById(R.id.dividebtnID);
    multiplybtn = (Button) findViewById(R.id.multiplybtnID);
    equalbtn = (Button) findViewById(R.id.equalbtnID);
    clearbtn = (Button) findViewById(R.id.clearbtn);
    firstValue = (EditText) findViewById(R.id.edttxt1);
    secondValue = (EditText) findViewById(R.id.edttxt1);

    clearbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            EditText edttxt1 = (EditText) findViewById(R.id.edttxt1);
            edttxt1.setText("");
        }
    });

    addbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Operator = "+";
            addandclear();
        }
    });
    subtractbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Operator = "-";             
            addandclear();
        }
    });
    dividebtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Operator = "/";
            addandclear();
        }
    });
    multiplybtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Operator = "*";
            addandclear();
        }
    });
    equalbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            secondNum = new          BigDecimal(secondValue.getText().toString());
            EditText edttxt1 = (EditText) findViewById(R.id.edttxt1);
            edttxt1.setText("");
            if (Operator == "+"){
                edttxt1.setText(firstNum.add(secondNum).toString());
            }
            else if (Operator == "-"){
                edttxt1.setText(firstNum.subtract(secondNum).toString());
            }
            else if (Operator == "/"){
                edttxt1.setText(firstNum.divide(secondNum).toString());
            }   
            else if (Operator == "*"){
                edttxt1.setText(firstNum.multiply(secondNum).toString());
            }   

        }
    });
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_calculator, menu);
    return true;
}

        public void addandclear(){

            firstNum = new BigDecimal(firstValue.getText().toString());             
            EditText edttxt1 = (EditText) findViewById(R.id.edttxt1);
            edttxt1.setText("");
        }

}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
    android:id="@+id/edttxt1"
    android:layout_width="250dp"
    android:layout_height="100dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="?android:attr/editTextBackground"
    android:ems="15"
    android:inputType="numberDecimal" 
    android:gravity="right"/>
<Button
    android:id="@+id/addbtnID"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_below="@+id/edttxt1"
    android:layout_marginLeft="20dp"
    android:text="@string/add" />
<Button
    android:id="@+id/dividebtnID"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_below="@+id/edttxt1"
    android:layout_toRightOf="@+id/addbtnID"
    android:text="@string/divide" />
<Button
    android:id="@+id/multiplybtnID"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_below="@+id/edttxt1"
    android:layout_toRightOf="@+id/dividebtnID"
    android:text="@string/multiply" />
<Button
    android:id="@+id/subtractbtnID"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignBaseline="@+id/multiplybtnID"
    android:layout_alignBottom="@+id/multiplybtnID"
    android:layout_toRightOf="@+id/multiplybtnID"
    android:text="@string/subtract" />
<Button
    android:id="@+id/zerobtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignLeft="@+id/addbtnID"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/twobtn"
    android:text="@string/zero" />
<Button
    android:id="@+id/onebtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/zerobtn"
    android:layout_alignLeft="@+id/zerobtn"
    android:text="@string/one" />
<Button
    android:id="@+id/twobtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/zerobtn"
    android:layout_toLeftOf="@+id/multiplybtnID"
    android:text="@string/two" />
<Button
    android:id="@+id/threebtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/zerobtn"
    android:layout_toLeftOf="@+id/subtractbtnID"
    android:text="@string/three" />
<Button
    android:id="@+id/fourbtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/onebtn"
    android:layout_toLeftOf="@+id/twobtn"
    android:text="@string/four" />
<Button
    android:id="@+id/fivebtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignBaseline="@+id/fourbtn"
    android:layout_alignBottom="@+id/fourbtn"
    android:layout_toLeftOf="@+id/threebtn"
    android:text="@string/five" />
<Button
    android:id="@+id/sixbtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignBaseline="@+id/fivebtn"
    android:layout_alignBottom="@+id/fivebtn"
    android:layout_toRightOf="@+id/fivebtn"
    android:text="@string/six" />
<Button
    android:id="@+id/sevenbtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/fourbtn"
    android:layout_toLeftOf="@+id/fivebtn"
    android:text="@string/seven" />
<Button
    android:id="@+id/eightbtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/fivebtn"
    android:layout_toLeftOf="@+id/sixbtn"
    android:text="@string/eight" />
<Button
    android:id="@+id/ninebtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignBaseline="@+id/eightbtn"
    android:layout_alignBottom="@+id/eightbtn"
    android:layout_toRightOf="@+id/eightbtn"
    android:text="@string/nine" />
<Button
    android:id="@+id/equalbtnID"
    android:layout_width="70dp"
    android:layout_height="120dp"
    android:layout_alignBottom="@+id/threebtn"
    android:layout_alignTop="@+id/sixbtn"
    android:layout_toRightOf="@+id/threebtn"
    android:text="@string/equal" />
<Button
    android:id="@+id/clearbtn"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_above="@+id/equalbtnID"
    android:layout_alignLeft="@+id/equalbtnID"
    android:text="@string/clear" />
</RelativeLayout>
 if (Operator == "+"){

应该是

 if (Operator.eqauls("+")){

这同样适用于代码中的其他 if/else 块。

在比较字符串时,对我们来说总是.equals()而不是==更好(字符串文字的情况除外,字符串文字可能会传递 == 条件)。

==检查引用是否相等。 equals()检查内容是否相等。此讨论可能会对您有所帮助。

编辑:

正如 TedHopp 评论的那样,您的代码引用编译时间常量,字符串比较在这里可能不是问题,仍然高于答案是字符串比较的良好做法。

由于没有可用的堆栈跟踪问题,假设流满足 if/else 条件之一,则另一种错误可能性是 NumberFormatException

Maek 确保您从EditText读取的数字是有效的数字,然后再创建BigDecimal(String)实例。

在多个地方,您将用户输入转换为BigDecimal而不进行任何错误检查。特别是,当没有输入时,new BigDecimal(String)将生成一个NumberFormatException,因为 " 不是有效数字。从文档中:

字符串必须在整数或分数中至少包含一个数字。

找到您使用用户输入的每个位置,并进行一些错误检查。例如,在addandclear()

public void addandclear(){
    String val = firstValue.getText().toString();
    try {
        firstNum = new BigDecimal(val);
        EditText edttxt1 = (EditText) findViewById(R.id.edttxt1);
        edttxt1.setText("");
    } catch (NumberFormatException e) {
        if (val.length() == 0) {
            // blank field
        } else {
            // something wrong with the input
        }
    }
}

要减少代码,您可以将android:onClick="addandclear"添加到xml中的按钮中(使addandclear将View v作为参数)。然后通过 v.getText().toString() 获取运算符

最新更新