Оператор Switch не распознает переменную поля - PullRequest
0 голосов
/ 22 февраля 2012

Почему мой код не переключается на 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 ]

4 голосов
/ 22 февраля 2012

Это не имеет ничего общего с переключателем, находящимся внутри другого переключателя. Дело в том, что в методе onClick () нет такой переменной, как displayValue. Другие переключатели распознают отображение, потому что отображение является переменной-членом класса. Они также не смогут распознать displayValue, потому что displayValue не является переменной-членом класса. Фактически, коммутатор внутри коммутатора также сможет распознавать дисплей.

Я думаю, что вы путаете "display" с "displayValue". Это разные переменные.

0 голосов
/ 22 февраля 2012

displayValue выходит за рамки метода onClick. Измените displayValue как глобальную переменную ..

...