簡體   English   中英

在Java代碼中添加平方根和退格按鈕

[英]Adding Square Root and Backspace Button to Java Code

您能否看一下我的代碼,並幫助我在項目中添加平方根(√)百分比(%)和退格鍵(<-)。 我認為問題出在CalcUtils Java代碼上,如果您也可以添加MainActivity.java和activity_main.xml文件。

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();
}

不確定您想要的退格字符是什么。

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

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

您也可以在布局的xml中執行此操作:

 android:text="\u221A"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM