2013-12-10 6 views
1

저는 계산기를 제 응용 프로그램에 넣었습니다. 그러나 무엇을해도 첫 번째 숫자는 항상 0이됩니다. 그래서 1을 클릭하면 01을 나타내지 만, 대신 결과를 나타내지 않습니다 결과는 .0으로 끝납니다.이 두 가지 문제는 제가 초급자이기 때문에이 계산기가 가능한 한 기본적이고 간단해야합니다.계산기는 항상 0을 표시합니다.

.0은 '이중'문제이지만 두 가지 문제 중 하나를 제거하는 방법을 연습 할 수는 없습니다. 아무도 나를 위해 이것에 대해 밝힐 수 있습니까? 여기 내 코드가있다. 에 관한

public class CalcActivity extends Activity implements OnClickListener, OnInitListener { 
private EditText Scr; 
private float NumberBf; 
private String Operation; 
private ButtonClickListener btnClick; 
private TextToSpeech myTTS; 
private int MY_DATA_CHECK_CODE = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_calc); 
    Scr = (EditText) findViewById(R.id.editText); 
    Scr.setEnabled(false); 
    btnClick = new ButtonClickListener(); 
    Button speakButton = (Button)findViewById(R.id.speak); 
    speakButton.setOnClickListener(this); 
    Intent checkTTSIntent = new Intent(); 
    checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    myTTS= new TextToSpeech(this,this); 
    startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE); 


    int idList[] = 
        {R.id.button0,R.id.button1,R.id.button2,R.id.button3, 
R.id.button4, 
R.id.button5,R.id.button6,R.id.button7, 
R.id.button8,R.id.button9,R.id.buttonDot, 
R.id.buttonAdd,R.id.buttonSub,R.id.buttonMul, 
R.id. buttonDiv,R.id.buttonEq,R.id.buttonC 
    }; 

    for(int id:idList){ 
     View v =(View) findViewById(id); 
     v.setOnClickListener(btnClick); 
    } 
} 




public void mMath(String str){ 
    NumberBf = Float.parseFloat(Scr.getText().toString()); 
    Operation = str; 
    Scr.setText("0"); 
} 
public void getKeyboard(String str){ 
    String ScrCurrent = Scr.getText().toString(); 
    ScrCurrent += str; 
    Scr.setText(ScrCurrent); 

} 
public void mResult() { 
    float NumAf = Float.parseFloat(Scr.getText().toString()); 
    float result = 0; 
    if(Operation.equals("+")){ 
     result = NumAf + NumberBf; 
    } 
    if(Operation.equals("-")){ 
     result = NumberBf - NumAf; 
    } 
    if(Operation.equals("*")){ 
     result = NumAf * NumberBf; 
    } 
    if(Operation.equals("/")){ 
     result = NumberBf/NumAf; 
    } 
Scr.setText(String.valueOf(result)); 
} 

public void onClick(View v) { 
    //get the text entered 
    EditText enteredText = (EditText)findViewById(R.id.editText); 
    String words = enteredText.getText().toString(); 
    speakWords(words); 
} 
private void speakWords(String speech) { 
    //speak straight away 
    myTTS.speak(speech, TextToSpeech.QUEUE_FLUSH, null); 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      myTTS = new TextToSpeech(this, this); 
     } 
     else {Intent installTTSIntent = new Intent(); 
      installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installTTSIntent); 
     } 
    } 
} 
public void onInit(int initStatus) { 
    //check for successful instantiation 
    if (initStatus == TextToSpeech.SUCCESS) { 
     if(myTTS.isLanguageAvailable(Locale.US)==TextToSpeech.LANG_AVAILABLE) 
      myTTS.setLanguage(Locale.US); 
    } 
    else if (initStatus == TextToSpeech.ERROR) { 
    Toast.makeText(this, "Sorry! Text To Speech failed...",     

Toast.LENGTH_LONG).show(); 
    } 
} 



private class ButtonClickListener implements View.OnClickListener{ 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.buttonC: 
       Scr.setText("0"); 
       NumberBf = 0; 
       Operation = ""; 
       break; 
      case R.id.buttonAdd: 
       mMath("+"); 
       break; 
      case R.id.buttonSub: 
       mMath("-"); 
       break; 
      case R.id.buttonMul: 
       mMath("*"); 
       break; 
      case R.id.buttonDiv: 
       mMath("/"); 
       break; 
      case R.id.buttonEq: 
       mResult(); 
       break; 
      default: 
       String numb = ((Button) v).getText().toString(); 
       getKeyboard(numb); 
       break; 

     } 
    } 
} 
} 
+0

질문을 할 때 정말 더 구체적으로해야한다. 여기에 아무도 긴 코드를보고 솔직히 명확하지 않은 문제를 찾을 시간이 없습니다. "1"을 (를) 어디에 클릭합니까? 키보드 또는 번호가있는 버튼이 있습니까? 이 텍스트는 어디에 표시됩니까? 이 텍스트를 보여주는이 EditText의 이름은 무엇입니까? –

+0

예 1은 키보드가 아닌 버튼입니다. 사과하지 않았습니까? 내가 모호하다는 것을 알았지 만 표시하는 텍스트가 하나 밖에 없습니다. – martinseal1987

답변

0

당신은 항상 ButtonClickListener에 mMath (_)를 호출하지 그래서 상관없이 당신이 그것을 클릭 어떤 버튼된다 그것을 설정을 "0"으로

public void mMath(String str){ 
    NumberBf = Float.parseFloat(Scr.getText().toString()); 
    Operation = str; 
    Scr.setText("0"); <-- 
} 
+0

그래서 간단히 비워두면됩니다 : public void mMath (String str) { NumberBf = Float.parseFloat (Scr.getText(). toString()); 작업 = str; Scr.setText (""); } – martinseal1987

+0

나는 또한 결과에서 동일한 작업을 수행하므로 Scr.setText ("0"); Scr.setText (""); 첫 번째 문제가 해결되어 대단히 감사합니다. – martinseal1987

1

당신의 문제에서 0.0, 당신은 당신의 setText()를 호출하기 전에, 마지막 두 문자를 생략 결과의 문자열을 사용할 수 있습니다;

str = str.substring(0,str.length-2); 

은 따라서 당신이 마지막에 당신의 0.0을 극복 할 수 : STR 당신이 전화의 setText하기 전에 코드 줄을 넣어 Scr.settext 방법을 통해 할당 할 당신의 문자열 변수 인 경우 입니다 문제입니다.

+0

괜찮 았던가 아니면 나에게 그다지 잘 작동하지 않습니다. – martinseal1987

+1

넣기 ** 귀하의 마지막 Scr.setText 문 바로 앞에있는 * mResult * 함수 **에서. 당신이 float 메소드를 사용하고 있기 때문에, **는 ** 부동 상태가 될 것입니다. 이 방법을 사용하면 변경하지 않아도 원하는 것을 얻을 수 있습니다. – SoulRayder

관련 문제