2012-02-22 50 views
0

爲什麼我的代碼在b.Equal處無法識別「displayValue」。所有其他開關都會識別顯示。是因爲它是交換機中的交換機嗎?請告訴我。開關語句無法識別字段變量

package rechee.cool; 

import android.app.Activity; 

import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

//////////////////////////////////////////////////////////// 

public class HelloAndroidActivity extends Activity { 
    /** Called when the activity is first created. */ 

    // Here's display 
    public EditText display; 

    double total1=0.0; 
    double total2=0.0; 
    char theOperator; 
    public String buttonText; 
    public Button ButtonAdd, ButtonEqual, ButtonMultiply, ButtonDivide; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // display 
    display= (EditText) findViewById(R.id.editText1); 
    } 

    public void getOperator(String btnText){ 
    theOperator = btnText.charAt(0); 
    String display1= display.getText().toString(); 
    double displayValue= Double.parseDouble(display1); 

    total1+=displayValue; 
    display.setText(""); 
    } 

    // All the switches recognize and use display... except for Equals 
    public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.bOne: 
     display.append("1"); 
     break; 
     case R.id.bTwo: 
     display.append("2"); 
     break; 
     case R.id.bThree: 
     display.append("3"); 
     break; 
     case R.id.bFour: 
     display.append("4"); 
     break; 
     case R.id.bFive: 
     display.append("5"); 
     break; 
     case R.id.bSix: 
     display.append("6"); 
     break; 
     case R.id.bSeven: 
     display.append("7"); 
     break; 
     case R.id.bEight: 
     display.append("8"); 
     break; 
     case R.id.bNine: 
     display.append("9"); 
     break; 
     case R.id.bZero: 
     display.append("0"); 
     break; 
     case R.id.bPoint: 
     display.append("."); 
     break; 
     case R.id.bClear: 
     display.setText(""); 
     break; 
     case R.id.bAdd: 
     buttonText="+"; 
     ButtonAdd= (Button)findViewById(R.id.bAdd); 
     ButtonAdd.setText(buttonText); 
     getOperator(buttonText); 
     break; 
     case R.id.bEqual: 
     switch (theOperator){ 
      case '+': 
      //Error right here. This switch doesn't recognize displayValue, 
      // but the other switches recognize display. Why? 
      total2= total1 + displayValue; 
     } 
    } 
    } 
} 
+0

除了等於...您是否獲得了正確的顯示或與其相同的所有內容? – 2012-02-22 03:57:30

+0

交換機不識別任何東西。瞭解Java中的[variable scope](http://www.java2s.com/Tutorial/Java/0020__Language/VariableScope.htm)。 – 2012-02-22 04:00:51

回答

4

這與開關在另一個開關內部沒有任何關係。事實上,在onClick()方法中,甚至不存在像displayValue這樣的變量。其他開關識別顯示,因爲display是類的成員變量。他們也無法識別displayValue,因爲displayValue不是該類的成員變量。實際上,交換機內部的交換機也可以識別顯示。

我覺得你很迷惑「顯示」與「displayValue」。它們是不同的變量。

0

displayValue超出了onClick方法的範圍。將displayValue更改爲全局變量..

+0

全局變量? – CodeBlue 2012-02-22 05:25:45

+0

我的意思是把它作爲所有方法的一個公共變量聲明.. – VamsiKrishna 2012-02-22 05:31:57

+0

好的。不要爲此使用術語「全局變量」。全局變量表示完全不同的東西。 – CodeBlue 2012-02-22 05:42:10