2017-03-11 74 views
0

我試圖做一個簡單的計算器,但我得到一個錯誤。這是我的代碼。循環內arraylist中的錯誤java.lang.IllegalStateException:無法執行android的方法: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); 
    } 
    } 
} 

我認爲錯誤的,因爲循環中的結果變化VAR ..

這是錯誤:

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

問題出在哪裏? 解決方案是什麼?

+1

我在代碼中看不到任何onClick方法;它可能是必需的。也許考慮發佈整個堆棧跟蹤,而不是你認爲可能至關重要的部分 – planetmaker

+0

請附上你的整個錯誤堆棧跟蹤。但我有一種感覺,問題在於你連接xml文件中按鈕的onclick。你應該有'onClick =「btn1()」'' – Siavash

回答

0

您在下面的代碼得到錯誤,因爲ArrayIndexOutofBound最後指數

result=result+number.get(i); 

在for循環中你已經盯着我形成1,通過i<=number.size()和你正在使用取值(i-1),但在在上面你直接取值,所以當循環到達最後的位置時,它沒有最後一個元素。使用下面的代碼來完成這個操作。

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); 
    } 
    } 
} 
相關問題