Switch语句无法识别字段变量

时间:2012-02-22 03:50:21

标签: java android switch-statement

为什么我的代码没有切换到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;
        }
    }
  }
}

2 个答案:

答案 0 :(得分:4)

这与开关在另一个开关内部无关。事实是,在onClick()方法中,甚至不存在像displayValue这样的变量。其他开关识别显示,因为display是类的成员变量。他们也无法识别displayValue,因为displayValue不是该类的成员变量。事实上,开关内的开关也能识别显示器。

我认为你将“display”与“displayValue”混淆。它们是不同的变量。

答案 1 :(得分:0)

displayValue超出了onClick方法的范围。将displayValue更改为全局变量..