2017-03-11 4 views
0

Ich versuche, einen einfachen Rechner zu machen, aber ich bekomme einen Fehler. Hier ist mein Code.Fehler in Arraylist innerhalb der Schleife java.lang.IllegalStateException: Konnte Methode für Android nicht ausführen: onClick

public class MainActivity extends AppCompatActivity { 
TextView tvInput; 
String textcontent = ""; 
String input = ""; 
ArrayList<Integer> number = new ArrayList<Integer>(); 
ArrayList<Character> operator = new ArrayList<Character>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tvInput= (TextView) findViewById(R.id.textView_input); 
} 


public void btn1(View view) { 
    input = input + "1"; 
    tvInput.setText(input); 
} 

public void btn3(View view) { 
    input = input + "3"; 
    tvInput.setText(input); 
} 

public void btn2(View view) { 
    input = input + "2"; 
    tvInput.setText(input); 
} 


public void btn0(View view) { 
    input = input + "0"; 
    tvInput.setText(input); 
} 

public void btn7(View view) { 
    input = input + "7"; 
    tvInput.setText(input); 
} 

public void btn8(View view) { 
    input = input + "8"; 
    tvInput.setText(input); 
} 
public void btn9(View view) { 
    input = input + "9"; 
    tvInput.setText(input); 
} 
public void btn5(View view) { 
    input = input + "5"; 
    tvInput.setText(input); 
} 
public void btn6(View view) { 
    input = input + "6"; 
    tvInput.setText(input); 
} 
public void btnSub(View view) { 
    number.add(Integer.parseInt(tvInput.getText().toString())); 
    tvInput.setText("-"); 
    operator.add('-'); 
    input = ""; 
} 
public void btnMul(View view) { 
    number.add(Integer.parseInt(tvInput.getText().toString())); 
    tvInput.setText("*"); 
    operator.add('*'); 
    input = ""; 
} 
public void btnDiv(View view) { 
    number.add(Integer.parseInt(tvInput.getText().toString())); 
    tvInput.setText("/"); 
    operator.add('/'); 
    input = ""; 
} 
public void btn4(View view) { 
    input = input + "4"; 
    tvInput.setText(input); 
} 
public void btnAdd(View view) { 
    number.add(Integer.parseInt(tvInput.getText().toString())); 
    tvInput.setText("+"); 
    operator.add('+'); 
    input = ""; 
} 
public void btnEqual(View view) { 
    int result = 0; 
    for(int i = 1; i <= number.size(); i++) { 
     result = number.get(i - 1); 
     if(operator.get(i - 1) == '+') 
     result = result+number.get(i); //error is here 
     tvInput.setText("" + result); 
    } 
    } 
} 

denke ich, dass Fehler, da Änderung var des Ergebnisses innerhalb der Schleife ..

Dies ist der Fehler:

java.lang.IllegalStateException: Could not execute method for android:onClick

Wo liegt das Problem? Was ist die Lösung?

+1

Ich sehe keine onClick-Methode in Ihrem Code; es könnte erforderlich sein. Denken Sie vielleicht daran, den gesamten Stacktrace zu veröffentlichen, anstatt nur den Teil, von dem Sie denken, dass er von entscheidender Bedeutung sein könnte – planetmaker

+0

Bitte fügen Sie Ihren gesamten Fehler Stack Trace an. Aber ich habe das Gefühl, dass das Problem darin besteht, wie du den Onclick deiner Buttons in der XML-Datei verbindest. Sie sollten etwas wie 'onClick =" btn1() "' haben – Siavash

Antwort

0

Sie erhalten Fehler wegen ArrayIndexOutofBound zuletzt Index in folgendem Code

result=result+number.get(i); 

In for-Schleife Sie i1 angestarrt haben bildet, durch i<=number.size() und Sie Wert nehmen unter Verwendung von (i-1), aber in Oberhalb der Linie nehmen Sie direkt den Wert, wenn die Schleife die letzte Position erreicht hat, hat sie nicht das letzte Element. Verwenden Sie den Code, um dies zu tun.

public void btnEqual(View view) { 
    int result=0; 
    for(int i=0;i<number.size();i++){ 
     result=number.get(i); 
     if(operator.get(i)=='+') 
     result=result+number.get(i); //error is here 
     tvInput.setText(""+result); 
    } 
    } 
} 
Verwandte Themen