2016-07-14 6 views
3

Wenn ich vor irgendwelchen Zahlen "=", "+", "-", "*" oder "/" drücke, stürzt meine App ab! Ich kann keine guten Antworten finden und bin mir nicht sicher, was ich tun muss.Java Android Calculator stürzt ab, wenn der Bediener gedrückt wird, bevor Werte eingegeben werden

Ich habe mehrere verschiedene Möglichkeiten versucht, diesen Rechner zu machen, aber ich bekomme immer noch das gleiche Problem. Ich denke das ist irgendwie eine If-Anweisung, die mit OnCalculation zu tun hat.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

    public void onClick(View v) { 
     Button button = (Button) v; 
     String str = button.getText().toString(); 
     total += str; 
     EditText edit = (EditText) findViewById(R.id.editText); 
     edit.setText(total); 
    } 

    public void OnAdd(View v) { 
     temp1 = Double.parseDouble(total); 
     total = ""; 
     Button button = (Button) v; 
     String str = button.getText().toString(); 
     sign += str; 
     EditText edit = (EditText) findViewById(R.id.editText); 
     edit.setText(""); 
    } 

    public void OnCalculate(View v) { 
     EditText edit = (EditText) findViewById(R.id.editText); 
     String str2 = edit.getText().toString(); 
     temp2 = Double.parseDouble(str2); 
     Double grand_total = 0.0; 

     if (sign.equals("+")) { 
      grand_total = temp1 + temp2; 
     } else if (sign.equals("-")) { 
      grand_total = temp1 - temp2; 
     } else if (sign.equals("*")) { 
      grand_total = temp1 * temp2; 
     } else if (sign.equals("/")) { 
      grand_total = temp1/temp2; 
     } 
     edit.setText(grand_total + ""); 
     sign = ""; 
    } 

public void OnClear(View v) { 
    EditText edit = (EditText)findViewById(R.id.editText); 
    edit.setText(""); 
    total = ""; 
} 
} 


Log:

07-13 18:45:32.831 25631-25631/com.example.shelbywallace.mycalc E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.shelbywallace.mycalc, PID: 25631 
                        java.lang.IllegalStateException: Could not execute method for android:onClick 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                         at android.view.View.performClick(View.java:5702) 
                         at android.widget.TextView.performClick(TextView.java:10888) 
                         at android.view.View$PerformClick.run(View.java:22533) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:158) 
                         at android.app.ActivityThread.main(ActivityThread.java:7229) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                        Caused by: java.lang.reflect.InvocationTargetException 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                         at android.view.View.performClick(View.java:5702)  
                         at android.widget.TextView.performClick(TextView.java:10888)  
                         at android.view.View$PerformClick.run(View.java:22533)  
                         at android.os.Handler.handleCallback(Handler.java:739)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:158)  
                         at android.app.ActivityThread.main(ActivityThread.java:7229)  
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                        Caused by: java.lang.NumberFormatException: Invalid double: "" 
                         at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                         at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                         at java.lang.Double.parseDouble(Double.java:301) 
                         at com.example.shelbywallace.mycalc.MainActivity.OnCalculate(MainActivity.java:54) 
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                         at android.view.View.performClick(View.java:5702)  
                         at android.widget.TextView.performClick(TextView.java:10888)  
                         at android.view.View$PerformClick.run(View.java:22533)  
                         at android.os.Handler.handleCallback(Handler.java:739)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:158)  
                         at android.app.ActivityThread.main(ActivityThread.java:7229)  
                         at java.lang.reflect.Method.invoke(Native Method)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

Was sagt Ihr LogCat? – durbnpoisn

+0

Ich habe die Frage damit aktualisiert –

+0

In auf Methode berechnen Sie Parsing NULL-Wert zu double – Aditi

Antwort

1

java.lang.NumberFormatException: Invalid double: "" at

Versuchen Sie total Zeichenfolge als "0" anstelle des leeren String initialisiert wird. Andernfalls erhalten Sie einen Fehler beim Versuch, nichts in eine Zahl zu konvertieren!


zum Beispiel Double.parseDouble(""); produziert Fehler: Sie

public static int parseDouble(final String value) { 
    if (value.equals("")) { 
     return 0; 
    } 
    return Double.parseDouble(value); 
} 

Dann:

Exception in thread "main" java.lang.NumberFormatException: empty String 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at Ideone.main(Main.java:12) 

Alternativ Sie eine Methode, um die Zeichenfolge, zu analysieren und zu Null zurück für leere Strings machen könnte kann es so nennen:

EditText edit = (EditText) findViewById(R.id.editText); 
String str2 = edit.getText().toString(); 
temp2 = parseDouble(str2); 
+0

Die Anwendung stürzt ab, wenn die Schaltflächen add, sub, mult und Div gedrückt werden. aber es fügt auch eine Null zu den danach hinzugefügten Zahlen hinzu. Außerdem tut es nichts für die Equals-Taste, stürzt trotzdem die App ab. –

+0

Definitiv für Equals gearbeitet, aber ich habe immer noch das gleiche Problem mit den Operatoren ... –

Verwandte Themen