2017-09-25 3 views
0

Was ich will ist, dass standardmäßig C ist 0 aber wenn der Benutzer 2 addiert, dann sollte es 2 anzeigen und wenn der Benutzer 4 addiert, sollte es 6 sein, aber stattdessen zeigt es 4 Any help würde geschätzt werden!Integer-Werte in Java können nicht hinzugefügt werden

public void addCash(View view) { 
    //Intent intent = new Intent(this, Main.class); 

    EditText val1 = (EditText) findViewById(R.id.num); 
    int b = 0; 
    int a = 0; 
    int c = 0; 
    int d = 0; 

    a = Integer.parseInt(val1.getText().toString()); 

    if (c == 0) { 
     c = a + b; 
    } 
    else { 
     c = c + a; 
    } 

    TextView result = (TextView) findViewById(R.id.outPut); 
    result.setText(""+c); 

    //startActivity(intent); 
} 
+0

Sie initialisieren immer 'c' auf' 0'. –

+0

Sie müssen 'c' eine _instance Variable_ in einem Objekt sein, keine lokale Variable in einer Methode. Wenn es sich um eine lokale Variable in einer Methode handelt, können Sie den Wert zwischen Methodenaufrufen nicht beibehalten. Der Wert wird gelöscht, sobald "addCash" ausgeführt wird. – ajb

+1

poste deine komplette Klasse – Anonymous

Antwort

0

Variable c sein ist lokal für diese Funktion und jedes Mal, wenn die Funktion aufgerufen wird, wird c = 0 initialisiert.

Also jedes Mal nur wenn Bedingung läuft.

sonst wird die Bedingung nie ausgeführt.

können Sie c als global deklarieren ....

+0

Wie deklariere ich C als global int? –

+0

für globale Deklaration müssen Sie beim Start der Klasse c deklarieren. ZB: class Test {private int c; Test() {c = 0;} fun() {// benutze c}} –

0

initialisieren „c“ als globaler Membervariable Ihres activity.Because Beispiel hierfür wird in der gesamten Tätigkeit bleiben während, wenn Sie es als lokales vairable jedes Mal initialisiert werden, wenn Sie die Methode neue Variable Instanz aufrufe erstellt

Dies als globale Instanz in Ihrer Aktivität

private int c = 0; 

Diese "a", b“, "d" wieder initialzed und wieder, wenn Aufruf addcash Methode

public void addCash(View view) { 
//Intent intent = new Intent(this, Main.class); 

EditText val1 = (EditText) findViewById(R.id.num); 

int b = 0; 
int a = 0; 
int d = 0; 

a = Integer.parseInt(val1.getText().toString()); 

if (c == 0) { 
    c = a + b; 
} 
else { 
    c = c + a; 
} 

TextView result = (TextView) findViewById(R.id.outPut); 
result.setText(""+c); 

Auch unter Codezeile mit c ersetzen = c + a als "b" wird immer Null nach Ihren Code

if (c == 0) 
{ 
    c = a + b; 
} 

Weitere Informationen erhalten Sie auf diesen Link

http://www.cafeaulait.org/course/week3/11.html 
0

initialisieren Ihre Variable c mit dem Wert der Textview wie folgt aus:

TextView result = (TextView) findViewById(R.id.outPut); 
int c = Integer.parseInt(val1.getText().toString()); 

Edit: Wenn die Textview standardmäßig nicht auf 0 Dann sollten Sie eine zusätzliche Überprüfung in Betracht ziehen.

+0

Wie setze ich es auf Standard 0? –

+0

@MusaUsman Fügen Sie in der onCreate-Methode der Aktivität Folgendes hinzu: 'TextView result = (TextView) findViewById (R.id.outPut); result.setText ("0"); ' –

0

Wie die anderen bereits erwähnten Antworten verwenden Sie lokale Variablen, die bei jedem Methodenaufruf initialisiert werden.

class SomeActivity { 

    private int c = 3; // Instance variable being initialized to 3. When you 
         // leave out the "= 3" part, then it is initialized 
         // to 0. 

    public void addCash(View v) { 
     // Now if you add something to c, it will persist between multiple 
     // method calls 
     EditText inputField = (EditText) findViewById(R.id.num); 
     EditText outputField = (TextView) findViewById(R.id.outPut); 
     c += Integer.parseInt(inputField.getText().toString()); 
     outputField.setText(String.valueOf(c)); 
    } 
} 
Verwandte Themen