2016-07-25 7 views
-2

Im Making-Rechner App und jedes Mal wenn ich starten Sie die App und klicken Sie auf Nummer zum ersten Mal auf den Bildschirm (Edittext) zeigt Null(Number)meine App druckt Null auf EditText

Wenn ich n Zahl für die erste Zeit nach der App klicken starten ihre zeigt null(num)

Hier meine Anwendung Screenshot ist:

enter image description here

Hauptaktivität:

package com.example.user.calculator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import java.util.regex.Pattern; 

public class MainActivity extends AppCompatActivity { 
private EditText _screen; 
private String display; 
private String currentOperator = ""; 
private String result = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    _screen = (EditText)findViewById(R.id.textView); 
    _screen.setText(display); 
} 

private void updateScreen() { 
    _screen.setText(display); 


} 

public void onClickNumber(View v) { 
    if (result != ""){ 
     clear(); 
     updateScreen(); 

} 
    Button b = (Button)v; 
    display += b.getText(); 
    updateScreen(); 
} 


private boolean isOperator(char op){ 
    switch (op){ 
     case '+': 
     case '-': 
     case 'X': 
     case '/': return true; 
     default: return false; 
    } 
} 

public void onClickOperator(View v){ 

    if(display == "") return; 

    Button b =(Button)v; 
    if (result != ""){ 
     String _display = result; 
     clear(); 
     display = _display; 
    } 

    if(currentOperator != "") { 
     Log.d("CalcX", ""+display.charAt(display.length()-1)); 
     if(isOperator(display.charAt(display.length()-1))){ 
      display = display.replace(display.charAt(display.length()-1), b.getText().charAt(0)); 
      updateScreen(); 
      return; 
     }else { 
      getResult(); 
      display = result; 
      result = ""; 
    } 
     currentOperator = b.getText().toString(); 
    } 
    display += b.getText(); 
    currentOperator = b.getText().toString(); 
    updateScreen(); 

} 

private void clear(){ 

    display = ""; 
    currentOperator = ""; 
    result = ""; 

} 



public void onClickClear(View v) { 

    clear(); 
    updateScreen(); 

} 

private double operate(String a, String b, String op) { 
    switch (op) { 

     case "+": 
      return Double.valueOf(a) + Double.valueOf(b); 
     case "-": 
      return Double.valueOf(a) - Double.valueOf(b); 
     case "X": 
      return Double.valueOf(a) * Double.valueOf(b); 
     case "/": 
      try { 
       return Double.valueOf(a)/Double.valueOf(b); 
      } catch (Exception e) { 
       Log.d("Calc", e.getMessage()); 
      } 
     default: 
      return -1; 
    } 
} 

private boolean getResult(){ 
    if(currentOperator == "") return false; 
    String[] operation = display.split(Pattern.quote(currentOperator)); 
    if (operation.length < 2) return false; 
    result = String.valueOf(operate(operation[0], operation[1], currentOperator)); 
    return true; 
} 

public void onClickEqual(View v){ 
    if(display == "") return; 
    if(!getResult()) return; 
    _screen.setText(display + "\n" + String.valueOf(result)); 
} 


} 
+0

machen Sie Ihre Anzeige Wert = "" in top –

+0

Auch Sie werden eine Menge anderer Fehler haben (na ja, Fehlverhalten ist das richtige Wort). Ihre String-Vergleiche funktionieren einfach nicht. Lesen Sie, wie Sie Strings in Java vergleichen können. –

Antwort

2

Set display zu ""

private String display = ""; 

Zunächst String Variablen

So String von "" durch Initialisierung auf null initialisiert Sie verhindern können null in Ihrem EditText zu erhalten

0

Sie müssen dem Feld 'display' den Standardwert zuweisen. Standardmäßig gibt Java der Feldvariablen den Wert null. Wenn Sie versuchen, eine Zeichenfolge anzuzeigen, die null ist, wird es als 'Null' angezeigt

private String display= ""; 

private String display="123"; 
0
_screen = (EditText)findViewById(R.id.textView); 
**_screen.setText(display);** //remove this line because you have to set number after user entry... 

ODER

String Display = null; initialisieren die Variable ..

0

Sie müssen String vergleichen mit .equals("") wie

if(str.equals("")) // for check == condition 
if(!str.equals("")) // for check != condition 

hier str ist Ihr result, display und currentOperator

Bei Deklarationsteil müssen Sie initialisieren Ihre display Variable . das ist display = ""

das kann Ihnen helfen.