2016-06-20 49 views
0

您可以看看我的代碼,並幫助我添加平方根(√)百分比(%)和退格鍵(< - )按鈕到我的項目。 我認爲問題出在CalcUtils的Java代碼,如果你想我也可以添加MainActivity.java和activity_main.xml文件。將平方根和退格按鈕添加到Java代碼

public final class CalcUtils { 
private CalcUtils(){ 

} 

public static boolean isOperator(char c){ 
    return c == '/' || 
      c == '÷' || 
      c == '*' || 
      c == '-' || 
      c == '+'; 
} 

public static double evaluate(final String str){ 
    class Parser { 
     int pos = -1, c; 

     void eatChar() { 
      c = (++pos < str.length()) ? str.charAt(pos) : -1; 
     } 

     void eatSpace() { 
      while (Character.isWhitespace(c)) eatChar(); 
     } 

     double parse() { 
      eatChar(); 
      double v = parseExpression(); 
      if (c != -1) throw new RuntimeException("Unexpected: " + (char)c); 
      return v; 
     } 

     // Grammar: 
     // expression = term | expression `+` term | expression `-` term 
     // term = factor | term `*` factor | term `/` factor | term brackets 
     // factor = brackets | number | factor `^` factor 
     // brackets = `(` expression `)` 

     double parseExpression() { 
      double v = parseTerm(); 
      for (;;) { 
       eatSpace(); 
       if (c == '+') { // addition 
        eatChar(); 
        v += parseTerm(); 
       } else if (c == '-') { // subtraction 
        eatChar(); 
        v -= parseTerm(); 
       } else { 
        return v; 
       } 
      } 
     } 

     double parseTerm() { 
      double v = parseFactor(); 
      for (;;) { 
       eatSpace(); 
       if (c == '/' || c == '÷') { // division 
        eatChar(); 
        v /= parseFactor(); 
       } else if (c == '*' || c == '(') { // multiplication 
        if (c == '*') eatChar(); 
        v *= parseFactor(); 
       } else { 
        return v; 
       } 
      } 
     } 

     double parseFactor() { 
      double v; 
      boolean negate = false; 
      eatSpace(); 
      if (c == '+' || c == '-') { // unary plus & minus 
       negate = c == '-'; 
       eatChar(); 
       eatSpace(); 
      } 
      if (c == '(') { // brackets 
       eatChar(); 
       v = parseExpression(); 
       if (c == ')') eatChar(); 
      } else { // numbers 
       int startIndex = this.pos; 
       while ((c >= '0' && c <= '9') || c == '.') eatChar(); 
       if (pos == startIndex) throw new RuntimeException("Unexpected: " + (char)c); 
       v = Double.parseDouble(str.substring(startIndex, pos)); 
      } 

      eatSpace(); 
      if (c == '^') { // exponentiation 
       eatChar(); 
       v = Math.pow(v, parseFactor()); 
      } 
      if (negate) v = -v; // unary minus is applied after exponentiation; e.g. -3^2=-9 
      return v; 
     } 
    } 
    return new Parser().parse(); 
} 
+0

發生了什麼事? –

+0

如果你只是在如何渲染按鈕內的那些字符,你可以嘗試unicode字符,檢查出來:http://stackoverflow.com/questions/15672161/print-a-square-root-symbol-% E2%88%9A-in-java不知道你想要什麼退格字符。 –

回答

0

不知道你想要什麼退格字符。

但是你可以設置使用Unicode字符的平方根或任何其他的Unicode符號的按鈕的文字你想例如:

Button mySquareRootButton = (Button) findViewById(R.id.my_square_root_button); 
mySquareRootButton.setText("\u221A"); 

你可以做這樣做,也是在你佈局的XML:

android:text="\u221A" 
相關問題