0

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>
4

3 に答える 3

6
 if (Operator == "+"){

する必要があります

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

コード内の他のif/elseブロックにも同じことが当てはまります。

文字列を比較するよりも、常に優れています.equals()==文字列リテラルの場合を除いて、文字列リテラルは==条件を渡す場合があります)。

==参照が等しいかどうかをチェックします。equals()コンテンツの同等性をチェックします。この議論はあなたを助けるかもしれません。

編集:

TedHoppがコメントしたように、コンパイル時定数を参照するコードでは、文字列の比較はここでは問題にならない可能性があります。それでも、上記の回答は文字列の比較の良い習慣です。

質問で使用できるスタックトレースがないため、フローがif / else条件の1つを満たしていると仮定すると、エラーのもう1つの可能性はですNumberFormatException

インスタンスを作成する前に、読み取っている番号EditTextが有効な番号であることを確認してください。BigDecimal(String)

于 2012-11-12T19:02:57.380 に答える
4

いくつかの場所では、BigDecimalエラーチェックを行わずにユーザー入力をに変換しています。特に、入力がない場合、「」は有効な数値ではないため、new BigDecimal(String)が生成されます。ドキュメントNumberFormatExceptionから:

文字列には、整数または分数のいずれかに少なくとも1桁の数字が含まれている必要があります。

ユーザー入力を使用しているすべての場所を見つけて、エラーチェックを行います。たとえば、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
        }
    }
}
于 2012-11-12T19:11:27.890 に答える
0

コードを減らすために、xmlのボタンにandroid:onClick = "addandclear"を追加できます(addandclearにView vを引数として使用させます)。次に、v.getText()。toString()で演算子を取得します

于 2012-11-12T20:41:32.763 に答える