2012-01-14 4 views
1

Я пытаюсь построить калькулятор для Android, я пытаюсь умножить два числа. Если я дам номер 1 и оставлю номер 2 открытым, я хочу получить нуль в качестве ответа.умножить на ноль, двойное число нет

Вначале я подумал, что это может быть проблема отсутствия значения для двойника. Итак, я попытался: if (Double.isNaN (number1)) {number1 = 0; } Но это не сработало.

Как это сделать?

R.layout.main:

  <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<!-- 1 --> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="number:" /> 
    <EditText 
     android:id="@+id/number1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="0" 
     android:inputType="number" 
     android:layout_marginLeft="20dp" /> 
</LinearLayout> 

<!-- 2 --> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="number:" /> 
    <EditText 
     android:id="@+id/number2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="0" 
     android:inputType="number" 
     android:layout_marginLeft="20dp" /> 
</LinearLayout> 


<!-- multiply --> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:layout_marginTop="20dp" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="multiply:" /> 
    <TextView 
     android:id="@+id/multiplydisplay" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:layout_marginLeft="20dp" /> 
</LinearLayout> 


<Button 
    android:id="@+id/btncalculate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Calculate"/> 

<Button 
    android:id="@+id/btnreset" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Reset" /> 

    </LinearLayout> 

TipcalcActivity.java

package com.tip.calc; 

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


    public class TipcalcActivity extends Activity { 
private EditText number1; 
private EditText number2; 
private TextView multiplydisplay; 
private Button btncalculate; 
private Button btnreset; 
private double number1calc = 0; 
private double number2calc = 0; 
private double multiply  = 0; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initControls(); 
} 

private void initControls() { 
    number1 = (EditText)findViewById(R.id.number1); 
    number2 = (EditText)findViewById(R.id.number2); 
    multiplydisplay = (TextView)findViewById(R.id.multiplydisplay); 
    btncalculate = (Button)findViewById(R.id.btncalculate); 
    btnreset = (Button)findViewById(R.id.btnreset); 
    btncalculate.setOnClickListener(new Button.OnClickListener() { public void 
    onClick (View v){ calculate(); }}); 
    btnreset.setOnClickListener(new Button.OnClickListener() { public void 
    onClick (View v){ reset(); }}); 
} 

private void calculate() { 
    number1calc=Double.parseDouble(number1.getText().toString()); 
    number2calc=Double.parseDouble(number2.getText().toString()); 
    multiply=(number1calc*number2calc); 
    multiplydisplay.setText(Double.toString(multiply)); 
} 

private void reset() { 
    multiplydisplay.setText(""); 
    number1.setText(""); 
    number2.setText(""); 
} 
} 
+0

извините, я имею в виду * вместо +. Старый код, мой плохой – John

ответ

1
if(numberOne.getText().toString().trim().length() < 1 || numberTwo.getText().toString().length() < 1){ 
    multiplyDisplay.setText("0"); 
} 
else{ 
    //default handling 
} 

Если EditText остается пустым, это, очевидно, не является числом (NaN). Выполнение любой операции с NaN в Java приведет к тому, что результатом этой операции станет NaN.

+0

меняет полезность, решил случай. использовал это следующим образом: (новичок в этом, поэтому не могу дать вам код в хорошем формате, извините) 'code' if (number1.getText(). toString(). trim(). length() <1) {number1calc = 0;} else {number1calc = Double.parseDouble (number1.getText(). toString());} 'code' – John

2

вы должны просто проверить, что содержание TextField значения отличается от "". Если нет, то просто присвоить значение 0.

В стоимость:

private void calculate() { 
    number1calc=(number1.getText().toString() != "") ? Double.parseDouble(number1.getText().toString()) : 0; 
    number2calc=(number2.getText().toString() != "") ? Double.parseDouble(number2.getText().toString()) : 0; 
    multiply=(number1calc*number2calc); 
    multiplydisplay.setText(Double.toString(multiply)); 

}

+0

все еще получил ошибки при умножении, действительно думал, что у вас есть хороший ответ. – John

+0

так ... не могли бы вы дать ошибку? Я имею в виду ... 0 * что-нибудь даст 0. –

Смежные вопросы