小型计算器(JAVA)
2017-12-10 10:33
134 查看
package 作业;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Stack;//一开始就把所有的类写在一起,后面就不好拆分了(这不是我的锅,祭天比较好)
public class Calculator extends JFrame{//计算器类
static Object []Option={"确定"};
static boolean Flag=false;
static boolean BABA=false;
static String Nit=new String("");
static JPanel Pa,Pb,Pc;
static JMenuItem Mc1=new JMenuItem("文件"),Mc2=new JMenuItem("退出"),Mc3=new JMenuItem("关于");
static JMenu Mb1=new JMenu("文件"),Mb2=new JMenu("帮助");
static JMenuBar Ma1=new JMenuBar();
static JButton []Lan=new JButton[22];
static String []Name={"1","2","3","4","5","6","7","8","9","0","+","-","*","÷","+/-"
, "1/x","sqrt","%","=",".","Back","C"};
static int []Rank={20,21,6,7,8,13,3,4,5,12,0,1,2,11,9,14,19,10,15,17,16,18};
static int []TLE=new int[22];
static JTextField Wo=new JTextField(Nit);
public Calculator() {
//初始化
super("计算器");
for(int i=0;i<22;i++)TLE[Rank[i]]=i;
for(int i=0;i<22;i++){Lan[i]=new JButton(Name[Rank[i]]);Lan[i].addActionListener(
new Action());}
//构建选项菜单
Mb1.add(Mc1);
Mb1.add(Mc2);
Mb2.add(Mc3);
Ma1.add(Mb1);Ma1.add(Mb2);
this.setJMenuBar(Ma1);
Mc1.addActionListener(new Action2());
Mc2.addActionListener(new Action2());
Mc3.addActionListener(new Action2());
//设置面板布局
Pa=new JPanel();Pa.setLayout(new GridLayout(1,1));
Pb=new JPanel();Pb.setLayout(new GridLayout(1,2));
Pc=new JPanel();Pc.setLayout(new GridLayout(5,4));
Pa.add(Wo);
Pb.add(Lan[0]);Pb.add(Lan[1]);
for(int i=2;i<22;i++)Pc.add(Lan[i]);
this.add(Pa,BorderLayout.NORTH);
this.add(Pb,BorderLayout.CENTER);
this.add(Pc,BorderLayout.SOUTH);
//设置面板大小,位置和状态
this.setSize(350,250);
this.setFont(new Font("System", Font.PLAIN, 14));
this.setLocation(20,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//按钮查找函数
public JButton Find(String HK){
for(int i=0;i<22;i++)
if(HK.equals(Name[i]))return Lan[TLE[i]];
return null;
}
//监听器1
class Action implements ActionListener{
public void actionPerformed(ActionEvent e){
if(BABA)return;
JButton TP=(JButton)e.getSource();
if(Flag){
for(int i=0;i<10;i++)if(TP==Find(Integer.toString(i))){Nit="";Flag=false;}
Flag=false;
}
if(TP==Find("=")){Nit=Count(Nit);Wo.setText(Nit);Flag=true;}
else if(TP==Find("C")){Nit="";Wo.setText(Nit);}
else if(TP==Find("Back")){
if(Nit.length()!=0){
Nit=Nit.substring(0,Nit.length()-1);
Wo.setText(Nit);
}
}
else if(TP==Find("1/x")){
double x=Double.valueOf(Count(Nit));
if(x!=0.0){
String y=Double.toString(1.0/x);
Nit=y;
Wo.setText(y);
Flag=true;
}
}
else if(TP==Find("sqrt")){
double x=Double.valueOf(Count(Nit));
String y=Double.toString(Math.sqrt(x));
Nit=y;
Wo.setText(y);
Flag=true;
}
else if(TP==Find("+/-")){
double x=Double.valueOf(Count(Nit));
String y;
if(x==(double)((int)x))y=Integer.toString((int)(-x));
else y=Double.toString(-x);
Nit=y;
Wo.setText(y);
Flag=true;
}
else for(int i=0;i<22;i++)if(TP==Find(Name[i])){
Nit+=Name[i];Wo.setText(Nit);
}
}
}
//监听器2
class Action2 implements ActionListener{
public void actionPerformed(ActionEvent e){
JMenuItem TP=(JMenuItem)e.getSource();
if(TP==Mc1){Nit="愚蠢的家伙,这是禁忌,你触碰了禁忌,重启吧";Wo.setText(Nit);BABA=true;}
else if(TP==Mc2){System.exit(0);}
else {
JOptionPane.showOptionDialog(null, "请查看帮助文档","帮助",JOptionPane.DEFAULT_OPTION
, JOptionPane.WARNING_MESSAGE, null, Option, Option[0]);
}
}
}
//辅助计算函数
double Cou1(double x,double y,char T){
if(T=='*')return x*y;
else if(T=='÷')if(x!=0)return y/x;else Wo.setText(Nit="Error");
else {
int xx=(int)x;int yy=(int)y;
if(xx!=0)return yy%xx;
else Wo.setText(Nit="Error");
}
return 0.0;
}
//计算函数
String Count(String Init){
Stack<Double>s1=new Stack<Double>();
Stack<String>s2=new Stack<String>();
boolean PP=false;
boolean QQ=false;
double ans=0.0;
for(int i=0;i<Init.length();i++){
if(Nit=="Error")return "Error";
int leng=0;
char T=Init.charAt(i);
if(T=='*'||T=='÷'||T=='%'){
s1.push(ans);ans=0.0;leng=0;PP=false;
if(s1.size()!=s2.size()+1)return "Error";
if(QQ)s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
s2.push(String.valueOf(T));
QQ=true;
}
else if(T=='+'||T=='-'){
s1.push(ans);ans=0.0;leng=0;PP=false;
if(QQ){
if(s1.size()!=s2.size()+1)return "Error";
s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
QQ=false;
}
s2.push(String.valueOf(T));
}
else if(T=='.')PP=true;
else {
double Change=(T-'0')*1.0;
if(PP){
leng++;
for(int j=0;j<leng;j++)Change/=10.0;
ans+=Change;
}
else {
ans=ans*10.0+Change;
}
if(i==Init.length()-1){
s1.push(ans);ans=0.0;
if(QQ)s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
}
}
}
if(s1.size()!=s2.size()+1)return "Error";
if(s2.empty()){
double beta=s1.pop();
if(beta==(double)((int)beta))return Integer.toString((int)beta);
else return Double.toString(beta);
}
char []TOK=new char[s2.size()];
93b8
double []Num=new double[s1.size()];
int FFT=s2.size();
for(int j=s2.size()-1;j>=0;j--){TOK[j]=s2.pop().charAt(0);}
for(int j=s1.size()-1;j>=0;j--){Num[j]=s1.pop();}
ans=Num[0];for(int j=0;j<FFT;j++){
if(TOK[j]=='+')ans+=Num[j+1];
else ans-=Num[j+1];
}
if(ans==(double)((int)ans))return Integer.toString((int)ans);
else return Double.toString(ans);
}
//主方法
public static void main(String[] args) {
Calculator C=new Calculator();
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Stack;//一开始就把所有的类写在一起,后面就不好拆分了(这不是我的锅,祭天比较好)
public class Calculator extends JFrame{//计算器类
static Object []Option={"确定"};
static boolean Flag=false;
static boolean BABA=false;
static String Nit=new String("");
static JPanel Pa,Pb,Pc;
static JMenuItem Mc1=new JMenuItem("文件"),Mc2=new JMenuItem("退出"),Mc3=new JMenuItem("关于");
static JMenu Mb1=new JMenu("文件"),Mb2=new JMenu("帮助");
static JMenuBar Ma1=new JMenuBar();
static JButton []Lan=new JButton[22];
static String []Name={"1","2","3","4","5","6","7","8","9","0","+","-","*","÷","+/-"
, "1/x","sqrt","%","=",".","Back","C"};
static int []Rank={20,21,6,7,8,13,3,4,5,12,0,1,2,11,9,14,19,10,15,17,16,18};
static int []TLE=new int[22];
static JTextField Wo=new JTextField(Nit);
public Calculator() {
//初始化
super("计算器");
for(int i=0;i<22;i++)TLE[Rank[i]]=i;
for(int i=0;i<22;i++){Lan[i]=new JButton(Name[Rank[i]]);Lan[i].addActionListener(
new Action());}
//构建选项菜单
Mb1.add(Mc1);
Mb1.add(Mc2);
Mb2.add(Mc3);
Ma1.add(Mb1);Ma1.add(Mb2);
this.setJMenuBar(Ma1);
Mc1.addActionListener(new Action2());
Mc2.addActionListener(new Action2());
Mc3.addActionListener(new Action2());
//设置面板布局
Pa=new JPanel();Pa.setLayout(new GridLayout(1,1));
Pb=new JPanel();Pb.setLayout(new GridLayout(1,2));
Pc=new JPanel();Pc.setLayout(new GridLayout(5,4));
Pa.add(Wo);
Pb.add(Lan[0]);Pb.add(Lan[1]);
for(int i=2;i<22;i++)Pc.add(Lan[i]);
this.add(Pa,BorderLayout.NORTH);
this.add(Pb,BorderLayout.CENTER);
this.add(Pc,BorderLayout.SOUTH);
//设置面板大小,位置和状态
this.setSize(350,250);
this.setFont(new Font("System", Font.PLAIN, 14));
this.setLocation(20,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//按钮查找函数
public JButton Find(String HK){
for(int i=0;i<22;i++)
if(HK.equals(Name[i]))return Lan[TLE[i]];
return null;
}
//监听器1
class Action implements ActionListener{
public void actionPerformed(ActionEvent e){
if(BABA)return;
JButton TP=(JButton)e.getSource();
if(Flag){
for(int i=0;i<10;i++)if(TP==Find(Integer.toString(i))){Nit="";Flag=false;}
Flag=false;
}
if(TP==Find("=")){Nit=Count(Nit);Wo.setText(Nit);Flag=true;}
else if(TP==Find("C")){Nit="";Wo.setText(Nit);}
else if(TP==Find("Back")){
if(Nit.length()!=0){
Nit=Nit.substring(0,Nit.length()-1);
Wo.setText(Nit);
}
}
else if(TP==Find("1/x")){
double x=Double.valueOf(Count(Nit));
if(x!=0.0){
String y=Double.toString(1.0/x);
Nit=y;
Wo.setText(y);
Flag=true;
}
}
else if(TP==Find("sqrt")){
double x=Double.valueOf(Count(Nit));
String y=Double.toString(Math.sqrt(x));
Nit=y;
Wo.setText(y);
Flag=true;
}
else if(TP==Find("+/-")){
double x=Double.valueOf(Count(Nit));
String y;
if(x==(double)((int)x))y=Integer.toString((int)(-x));
else y=Double.toString(-x);
Nit=y;
Wo.setText(y);
Flag=true;
}
else for(int i=0;i<22;i++)if(TP==Find(Name[i])){
Nit+=Name[i];Wo.setText(Nit);
}
}
}
//监听器2
class Action2 implements ActionListener{
public void actionPerformed(ActionEvent e){
JMenuItem TP=(JMenuItem)e.getSource();
if(TP==Mc1){Nit="愚蠢的家伙,这是禁忌,你触碰了禁忌,重启吧";Wo.setText(Nit);BABA=true;}
else if(TP==Mc2){System.exit(0);}
else {
JOptionPane.showOptionDialog(null, "请查看帮助文档","帮助",JOptionPane.DEFAULT_OPTION
, JOptionPane.WARNING_MESSAGE, null, Option, Option[0]);
}
}
}
//辅助计算函数
double Cou1(double x,double y,char T){
if(T=='*')return x*y;
else if(T=='÷')if(x!=0)return y/x;else Wo.setText(Nit="Error");
else {
int xx=(int)x;int yy=(int)y;
if(xx!=0)return yy%xx;
else Wo.setText(Nit="Error");
}
return 0.0;
}
//计算函数
String Count(String Init){
Stack<Double>s1=new Stack<Double>();
Stack<String>s2=new Stack<String>();
boolean PP=false;
boolean QQ=false;
double ans=0.0;
for(int i=0;i<Init.length();i++){
if(Nit=="Error")return "Error";
int leng=0;
char T=Init.charAt(i);
if(T=='*'||T=='÷'||T=='%'){
s1.push(ans);ans=0.0;leng=0;PP=false;
if(s1.size()!=s2.size()+1)return "Error";
if(QQ)s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
s2.push(String.valueOf(T));
QQ=true;
}
else if(T=='+'||T=='-'){
s1.push(ans);ans=0.0;leng=0;PP=false;
if(QQ){
if(s1.size()!=s2.size()+1)return "Error";
s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
QQ=false;
}
s2.push(String.valueOf(T));
}
else if(T=='.')PP=true;
else {
double Change=(T-'0')*1.0;
if(PP){
leng++;
for(int j=0;j<leng;j++)Change/=10.0;
ans+=Change;
}
else {
ans=ans*10.0+Change;
}
if(i==Init.length()-1){
s1.push(ans);ans=0.0;
if(QQ)s1.push(Cou1(s1.pop(),s1.pop(),s2.pop().charAt(0)));
}
}
}
if(s1.size()!=s2.size()+1)return "Error";
if(s2.empty()){
double beta=s1.pop();
if(beta==(double)((int)beta))return Integer.toString((int)beta);
else return Double.toString(beta);
}
char []TOK=new char[s2.size()];
93b8
double []Num=new double[s1.size()];
int FFT=s2.size();
for(int j=s2.size()-1;j>=0;j--){TOK[j]=s2.pop().charAt(0);}
for(int j=s1.size()-1;j>=0;j--){Num[j]=s1.pop();}
ans=Num[0];for(int j=0;j<FFT;j++){
if(TOK[j]=='+')ans+=Num[j+1];
else ans-=Num[j+1];
}
if(ans==(double)((int)ans))return Integer.toString((int)ans);
else return Double.toString(ans);
}
//主方法
public static void main(String[] args) {
Calculator C=new Calculator();
}
}
相关文章推荐
- Java 小型学生管理系统心得
- java代码行数计算器
- Java实现Andriod带看括弧的计算器代码
- 计算器 java
- 用Java编写计算器的几种常见的做法
- java课程设计---计算器(201521123020 邱伟达)
- Java中基于Scanner 编写的计算器小程序
- 用java scanner 编写计算器程序
- 用java写的计算器
- java简单实现一个小型的打字测试软件
- java计算器
- 【Java】Java计算器
- java用制作小计算器
- 计算器JAVA中式转逆波兰式算法
- java&nbsp;计算器
- Java按钮控件数组实现计算器界面
- java按钮控件数组实现计算器界面示例分享
- 【练习题】构造方法 编写Java程序,模拟简单的计算器。
- 某小型公司持续集成工具jenkins实践(JAVA WEB、Android、IOS、Html)
- Java编写计算器的常见方法实例总结