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

📄 window.java

📁 大整数计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package 大整数计算器;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Window extends JFrame {
    private JTabbedPane tabbedPane;

    private JTextArea AboutFile;

    private JTextField display;

    private JButton[] buttons;

    private JPanel page1;

    private JPanel page2;

    private JTextArea display2;

    private JButton choosefile = new JButton("载入");

    private JButton doit = new JButton("计算");

    private JButton view = new JButton("View");

    public StringBuffer displayString;

    public File file;

    int choosen;

    String[] ButtonTexts = { "(", ")", "^", "+", "7", "8", "9", "-", "4", "5",
            "6", "*", "1", "2", "3", "/", "0", "<-", "CE", "=" };

    int i;

    Window() {
        super("--/ 大整数计算器 /--");
        buttons = new JButton[20];
        JPanel buttonpanel = new JPanel();
        displayString = new StringBuffer("");
        display = new JTextField("0", 19);
        display.setHorizontalAlignment(4);
        display.setEditable(false);
        display.setBackground(new Color(255, 255, 255));
        buttonpanel.setBackground(new Color(200, 221, 242));
        buttonpanel.setLayout(new GridLayout(5, 4, 9, 9));
        for (i = 0; i < 16; i++) {
            buttons[i] = new JButton(ButtonTexts[i]);
            buttons[i].setFont(new Font("宋体", 21, 12));
            buttons[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    JButton Source = (JButton) event.getSource();
                    String s = Source.getText();
                    displayString.insert(displayString.length(), s);
                    display.setText(displayString.toString());
                }
            });
            buttonpanel.add(buttons[i]);
        }

        buttons[16] = new JButton(ButtonTexts[16]);
        buttons[16].setFont(new Font("宋体", 21, 12));
        buttons[16].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                JButton Source = (JButton) event.getSource();
                String s = Source.getText();
                if (!(display.getText().charAt(0) == '0' && display.getText()
                        .length() == 1)) {
                    displayString.insert(displayString.length(), s);
                    display.setText(displayString.toString());
                }
            }
        });
        buttonpanel.add(buttons[16]);

        buttons[17] = new JButton(ButtonTexts[17]);
        buttons[17].setForeground(new Color(255, 0, 0));
        buttons[17].setFont(new Font("宋体", 21, 12));
        buttons[17].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if (!(display.getText().charAt(0) == '0' && display.getText()
                        .length() == 1)) {
                    displayString.delete(displayString.length() - 1,
                            displayString.length());
                    display.setText(displayString.toString());
                }
                if (displayString.length() == 0)
                    display.setText("0");
            }
        });
        buttonpanel.add(buttons[17]);

        buttons[18] = new JButton(ButtonTexts[18]);
        buttons[18].setForeground(new Color(255, 0, 0));
        buttons[18].setFont(new Font("宋体", 21, 12));
        buttons[18].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                displayString = new StringBuffer("");
                display.setText("0");
            }
        });
        buttonpanel.add(buttons[18]);

        buttons[19] = new JButton(ButtonTexts[19]);
        buttons[19].setForeground(new Color(255, 0, 0));
        buttons[19].setFont(new Font("Arial Black", 21, 14));
        buttons[19].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if (isCorrect(new StringBuffer(display.getText()))) {
                    display.setText(calculate(display.getText())
                            .toStringBuffer().toString());
                    if (!display.getText().equals("0"))
                        displayString = new StringBuffer(display.getText());
                    else
                        displayString = new StringBuffer("");
                } else {
                    display.setText("ERROR~~!");
                    displayString = new StringBuffer("");
                }
            }
        });
        buttonpanel.add(buttons[19]);
        tabbedPane = new JTabbedPane();
        page1 = new JPanel();
        page1.setBackground(new Color(200, 221, 242));
        // page1.setBackground(new Color(200, 221, 242));
        page1.setLayout(new FlowLayout());
        page1.add(new JScrollPane(display));
        page1.add(buttonpanel);
        JLabel inf = new JLabel("本程序支持表达式及大整数计算");
        inf.setForeground(new Color(0, 0, 0));
        inf.setFont(new Font("宋体", 20, 13));
        page1.add(inf);// 第一页

        display2 = new JTextArea(" 请选择批量处理文件-->\n", 10, 19);
        display2.setEditable(false);
        page2 = new JPanel();
        page2.setBackground(new Color(200, 221, 242));
        JScrollPane js = new JScrollPane(display2);
        js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        js
                .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        page2.add(js);
        page2.add(choosefile);
        doit.setEnabled(false);
        view.setEnabled(false);
        choosefile.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                openfile();
                display2.setText(" 请选择批量处理文件-->\n");
                if (choosen != JFileChooser.CANCEL_OPTION && file.isFile()) {
                    BufferedReader stream;
                    boolean isTrue = true;
                    try {
                        stream = new BufferedReader(new FileReader(file));
                        String s = stream.readLine();
                        while (s != null) {
                            for (int i = 0; i < s.length(); i++) {
                                if (!isNumber(s.charAt(i))
                                        && !isOperator(s.charAt(i))
                                        && s.charAt(i) != ' ') {
                                    isTrue = false;
                                    break;
                                }
                            }
                            if (!isTrue)
                                break;
                            s = stream.readLine();
                        }
                    } catch (IOException e) {
                    }
                    if (isTrue) {
                        display2.insert(" 文件打开成功!  ", display2.getText()
                                .length());
                        display2.insert(" 目标文件:" + " " + file.getName()
                                + "   \n\n", display2.getText().length());
                        doit.setEnabled(true);
                        view.setEnabled(true);
                    } else {
                        display2.insert(" 未知的文件格式  ", display2.getText()
                                .length());
                    }
                }
            }
        });
        doit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                BufferedReader stream;
                try {
                    stream = new BufferedReader(new FileReader(file));
                    StringBuffer thisformula;
                    thisformula = new StringBuffer(stream.readLine());
                    while (thisformula != null) {
                        for (int i = 0; i < thisformula.length(); i++) {
                            if (thisformula.charAt(i) == ' ') {
                                thisformula.delete(i, i + 1);
                                i--;
                            }
                        }
                        while (isOperator(thisformula.charAt(thisformula
                                .length() - 1))) {
                            thisformula.insert(thisformula.length(), stream
                                    .readLine());
                            for (int i = 0; i < thisformula.length(); i++) {
                                if (thisformula.charAt(i) == ' ') {
                                    thisformula.delete(i, i + 1);
                                    i--;
                                }
                            }
                        }
                        display2.insert(
                                "   " + thisformula.toString() + "  \n",
                                display2.getText().length());
                        if (isCorrect(thisformula)) {
                            display2.insert(" = "
                                    + calculate(thisformula.toString())
                                            .toStringBuffer() + "  \n\n",
                                    display2.getText().length());
                        } else {
                            display2.insert(" = ERROR  \n\n", display2
                                    .getText().length());
                        }
                        String s = stream.readLine();
                        if (s != null)
                            thisformula = new StringBuffer(s);
                        else
                            thisformula = null;
                    }
                } catch (IOException e) {
                    display2.insert(" 文件打开错误!\n", display2.getText().length());
                }
                doit.setEnabled(false);
            }
        });
        view.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                StringBuffer viewcontains = new StringBuffer("");
                BufferedReader stream;
                boolean isTrue = true;
                try {
                    stream = new BufferedReader(new FileReader(file));
                    String s = stream.readLine();
                    while (s != null) {
                        for (int i = 0; i < s.length(); i++) {
                            if (!isNumber(s.charAt(i))
                                    && !isOperator(s.charAt(i))
                                    && s.charAt(i) != ' ') {
                                isTrue = false;
                                break;
                            }
                        }
                        if (!isTrue)
                            break;
                        viewcontains.insert(viewcontains.length(), s);
                        viewcontains.insert(viewcontains.length(), "\n");
                        s = stream.readLine();
                    }
                } catch (IOException e) {
                }
                if (isTrue) {
                    JOptionPane.showMessageDialog(null,
                            viewcontains.toString(), file.getPath(),
                            JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(null, "未知的文件格式", file
                            .getPath()
                            + file.getName(), JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });

        page2.add(new JLabel("    "));
        page2.add(view);
        page2.add(new JLabel("    "));
        page2.add(doit);

        tabbedPane.addTab("图形计算器", null, page1, "按照图形化界面计算");
        tabbedPane.addTab("批量处理器", null, page2, "运行批量运算");
        getContentPane().add(tabbedPane);
        setSize(260, 310);
        setResizable(false);
        setVisible(true);
    }

    public BigINT calculate(String s) {
        System.out.println(s);
        BigINT result = new BigINT(new StringBuffer("0"), true);
        OperatorStack opStack = new OperatorStack();
        BigINTStack bigintStack = new BigINTStack();
        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 && s.charAt(j) != ')')
                            v2 = j + 1;
                        break;
                    }
                }
                i = v2 - 1;
                bigintStack.push(new BigINT(new StringBuffer(s
                        .substring(v1, v2)), true));
            }
            if (isOperator(s.charAt(i))) {
                switch (s.charAt(i)) {
                case '(': {
                    opStack.push(new Operator('(', 0));
                    break;
                }

⌨️ 快捷键说明

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