java实现阶层计算器

<span style="font-family: Arial, Helvetica, sans-serif;">以下程序是用BigInteger实现阶层的小型计算器,欢迎参考。
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">package win.bigInteger;</span>

import com.sun.glass.events.KeyEvent;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * @author hgs_Rainbow
 * @date:2014-12-19   @time:11:15:21
 */
public class Show extends JFrame implements ActionListener{
    JTextField text;
    JTextArea showArea;
    JButton button;
    Box basebox,box1,box2;
    JMenu men;
    JMenuBar jmb;
    JMenuItem cls,save;//清空和保存
    Show(){
        //add(new showMenu());
        init();
        setLayout(new FlowLayout());   
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("阶层计算器");
        setBounds(100,20,250,450);
        setVisible(true);
    }
    private void init(){    
        //菜单
        
        cls = new JMenuItem("清空");
        cls.addActionListener(this);
        
        save = new JMenuItem("保存");
        save.addActionListener(this);
        
        jmb = new JMenuBar();
        men = new JMenu("M e n u");
        men.add(xnjp);
        men.add(cls);
        men.add(save);
        jmb.add(men);
        this.setJMenuBar(jmb);
        //窗口
        box1 = Box.createHorizontalBox();//横向
        box2 = Box.createVerticalBox();//纵向
        text = new JTextField(10);
        text.addActionListener(this);
        button = new JButton("计算");
        //button.setMnemonic(KeyEvent.VK_ENTER);
        
        button.addActionListener(this);
        showArea = new JTextArea(20,20);
        showArea.setLineWrap(rootPaneCheckingEnabled);//根据JTextArea的size 换行。
        
        add(new JLabel("输入阶层:"));
        //盒式布局
        box1.add(text);
        box1.add(new JLabel("!"));
        box1.add(Box.createHorizontalStrut(15));
        box1.add(button);
        box2.add(box1);  
        box2.add(Box.createVerticalStrut(10));
        box2.add(new JScrollPane(showArea)); 
        add(box2);
    }
    
    /**
     * 
     * @param 事件处理操作
     */
    @Override
    public void actionPerformed(ActionEvent e){
        String num = text.getText().trim();
        String BI;
        BigInteger big,bi;
        jiecheng n = new jiecheng();
        XNJP jp;
        
        if(e.getSource()==button){//确定按钮事件
            if(num.equals("")){
                showArea.append("您没输入阶层值!\n");
            }
            else{
                try{
                int m = Integer.parseInt(num);
                big = new BigInteger(Integer.toString(m));
                bi = n.jiecheng(big);
                BI = bi.toString();
                showArea.append(text.getText()+"的阶层:"+BI+"\n");  
                }catch(NumberFormatException e1){
                    showArea.append("请输入正确的值!\n");
                }
            }           
        }
        else
        if(e.getSource() == cls){//清空事件
            int jop = JOptionPane.showConfirmDialog(this, "是否清空显示窗数据?", "确认"
                + "对话框", JOptionPane.YES_NO_OPTION);
            if(jop == JOptionPane.YES_OPTION){
                if(text.getText().equals("")||showArea.getText().equals("")){
                    showArea.setText(null);
                    text.setText(null);
                }
                else{
                    showArea.setText("");
                    text.setText("");
                }
            }
            if(jop == JOptionPane.NO_OPTION){
                showArea.setText(null);
                text.setText(null);
            }
        }
        else
        if(e.getSource() == save){//saveFile
            JFileChooser fileDialog = new JFileChooser();//文件对话框
            FileNameExtensionFilter filter = new FileNameExtensionFilter("txt文件","java");
            fileDialog.setFileFilter(filter);
            int state = fileDialog.showSaveDialog(this);
            if(state == JFileChooser.APPROVE_OPTION){
                try{
                    File dir = fileDialog.getCurrentDirectory();
                    String name = fileDialog.getSelectedFile().getName();
                    File file = new File(dir,name);
                    try (FileWriter fileWriter = new FileWriter(file); 
                            BufferedWriter out = new BufferedWriter(fileWriter)) {
                        out.write(showArea.getText());
                    }
                }catch(IOException eee){
                    showArea.setText("文件保存失败!");
                }
                
            }
        }
    }
    public static void main(String [] args){
        Show win = new Show();
    }
}
class jiecheng{//阶层的递归实现
    BigInteger jiecheng(BigInteger n){
        if(n.equals(BigInteger.ONE))
            return BigInteger.ONE;
        else
            if(n.equals(BigInteger.ZERO))
                return BigInteger.ZERO;
        else 
            return n.multiply(jiecheng(n.subtract(BigInteger.ONE)));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值