2013-12-10 144 views
1

我已將計算器放入我的應用程序,但出於某種原因,無論我做什麼第一個數字始終爲零,因此如果我單擊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()); Operation = str; Scr.setText(「」); } – martinseal1987

+0

我也在做同樣的結果,所以改變了Scr.setText(「0」); Scr.setText(「」);第一個問題已經解決,非常感謝 – martinseal1987

1

關於你0.0末問題,你可以使用結果的一個子省略了最後兩個字符,你打電話的setText()之前; 即如果STR是你使用過Scr.settext方法來分配 把下面這行代碼調用的setText之前,你的字符串變量:

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

因此,你可以在最後克服你0.0問題。

+0

好吧或者這沒有爲我工作,或者我不知道在哪裏扔它 – martinseal1987

+1

Put它在你的* mResult *函數**之前**最後一個Scr.setText語句。由於您使用的是浮動方法,因此答案**將會浮動。這樣,你不需要改變它,但仍然可以實現你想要的。 – SoulRayder