⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 window.java

📁 大整数计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                case ')': {
                    while (opStack.top().operator != '(') {
                        bigintStack.push(operation(bigintStack.pop(),
                                bigintStack.pop(), opStack.pop()));
                    }
                    opStack.pop();
                    break;
                }
                case '+': {
                    if (opStack.elementCount == 0)
                        opStack.push(new Operator('+', 1));
                    else {
                        while (opStack.elementCount != 0
                                && opStack.top().level >= 1) {
                            bigintStack.push(operation(bigintStack.pop(),
                                    bigintStack.pop(), opStack.pop()));
                        }
                        opStack.push(new Operator('+', 1));
                    }
                    break;
                }
                case '-': {
                    if (i == 0 || s.charAt(i - 1) == '(')
                        bigintStack
                                .push(new BigINT(new StringBuffer("0"), true));
                    if (opStack.elementCount == 0)
                        opStack.push(new Operator('-', 1));
                    else {
                        while (opStack.elementCount != 0
                                && opStack.top().level >= 1) {
                            bigintStack.push(operation(bigintStack.pop(),
                                    bigintStack.pop(), opStack.pop()));
                        }
                        opStack.push(new Operator('-', 1));
                    }
                    break;
                }
                case '*': {
                    if (opStack.elementCount == 0)
                        opStack.push(new Operator('*', 2));
                    else {
                        while (opStack.elementCount != 0
                                && opStack.top().level >= 2) {
                            bigintStack.push(operation(bigintStack.pop(),
                                    bigintStack.pop(), opStack.pop()));
                        }
                        opStack.push(new Operator('*', 2));
                    }
                    break;
                }
                case '/': {
                    if (opStack.elementCount == 0)
                        opStack.push(new Operator('/', 2));
                    else {
                        while (opStack.elementCount != 0
                                && opStack.top().level >= 2) {
                            bigintStack.push(operation(bigintStack.pop(),
                                    bigintStack.pop(), opStack.pop()));
                        }
                        opStack.push(new Operator('/', 2));
                    }
                    break;
                }
                case '^': {
                    if (opStack.elementCount == 0)
                        opStack.push(new Operator('^', 3));
                    else {
                        while (opStack.elementCount != 0
                                && opStack.top().level > 3) {
                            bigintStack.push(operation(bigintStack.pop(),
                                    bigintStack.pop(), opStack.pop()));
                        }
                        opStack.push(new Operator('^', 3));
                    }
                    break;
                }
                }

            }
        }
        while (opStack.elementCount != 0) {
            bigintStack.push(operation(bigintStack.pop(), bigintStack.pop(),
                    opStack.pop()));
        }
        result = bigintStack.top();
        System.out.println(result.toStringBuffer());
        return result;
    }

    private int toINT(char c) {
        int result = 0;
        switch (c) {
        case '1':
            result = 1;
            break;
        case '2':
            result = 2;
            break;
        case '3':
            result = 3;
            break;
        case '4':
            result = 4;
            break;
        case '5':
            result = 5;
            break;
        case '6':
            result = 6;
            break;
        case '7':
            result = 7;
            break;
        case '8':
            result = 8;
            break;
        case '9':
            result = 9;
            break;
        }
        return result;
    }

    private boolean isNumber(char c) {
        boolean result = false;
        switch (c) {
        case '0': {
            result = true;
            break;
        }
        case '1': {
            result = true;
            break;
        }
        case '2': {
            result = true;
            break;
        }
        case '3': {
            result = true;
            break;
        }
        case '4': {
            result = true;
            break;
        }
        case '5': {
            result = true;
            break;
        }
        case '6': {
            result = true;
            break;
        }
        case '7': {
            result = true;
            break;
        }
        case '8': {
            result = true;
            break;
        }
        case '9': {
            result = true;
            break;
        }
        }
        return result;
    }

    private boolean isOperator(char c) {
        boolean result = false;
        switch (c) {
        case '+': {
            result = true;
            break;
        }
        case '-': {
            result = true;
            break;
        }
        case '*': {
            result = true;
            break;
        }
        case '/': {
            result = true;
            break;
        }
        case '^': {
            result = true;
            break;
        }
        case '(': {
            result = true;
            break;
        }
        case ')': {
            result = true;
            break;
        }
        }
        return result;
    }

    private BigINT operation(BigINT b1, BigINT b2, Operator op) {
        BigINT result = new BigINT(new StringBuffer("0"), true);
        switch (op.operator) {
        case '+': {
            result = b2.addition(b1);
            break;
        }
        case '-': {
            result = b2.subtration(b1);
            break;
        }
        case '*': {
            result = b2.multiplication(b1);
            break;
        }
        case '/': {
            result = b2.division(b1);
            break;
        }
        case '^': {
            result = b2.power(b1);
            break;
        }
        }
        return result;
    }

    public boolean isCorrect(StringBuffer s) {
        boolean result = true;
        int n = 0;
        int kuohao = 0;
        int nofFalse = 0;
        for (int i = 0; i < s.length(); i++) {
            if (!(isOperator(s.charAt(i)) || isNumber(s.charAt(i)))) {
                return false;
            }
        }
        for (int i = 0; i < s.length(); i++)
            if (isOperator(s.charAt(i)))
                nofFalse++;
        boolean input[] = new boolean[nofFalse * 2 + 1];
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '-') {
                if (i == 0 || s.charAt(i - 1) == '(')
                    s.delete(i, i + 1);
            }
        }
        for (int i = 0; i < s.length(); i++) {
            if (isNumber(s.charAt(i))) {
                int v1 = i;
                int v2 = s.length();
                for (int j = i; j < s.length(); j++) {
                    if (!isNumber(s.charAt(j))) {
                        v2 = j;
                        if (j == s.length() - 1)
                            v2 = j + 1;
                        break;
                    }
                }
                i = v2 - 1;
                n++;
                input[n - 1] = true;
            }
            if (s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*'
                    || s.charAt(i) == '/' || s.charAt(i) == '^') {
                n++;
                input[n] = false;
            }
            if (s.charAt(i) == '(')
                if (i == 0 || isOperator(s.charAt(i - 1)))
                    kuohao++;
                else {
                    result = false;
                    break;
                }
            if (s.charAt(i) == ')')
                if (i == s.length() - 1 || isOperator(s.charAt(i + 1)))
                    kuohao--;
                else {
                    result = false;
                    break;
                }
            if (kuohao < 0)
                return false;
        }
        boolean b = true;
        if (kuohao != 0)
            return false;
        for (int i = 0; i < n; i++) {
            if (input[i] == b)
                b = !b;
            else {
                result = false;
                break;
            }
        }
        return result;
    }

    public void openfile() {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        choosen = fileChooser.showOpenDialog(this);
        if (choosen != JFileChooser.CANCEL_OPTION) {
            file = fileChooser.getSelectedFile();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -