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