给个java计算器程序,有吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给个java计算器程序,有吗相关的知识,希望对你有一定的参考价值。
//这个计算器是可以输入并计数算式,但其计算的是的算式。//标准的如:12*(34/(45-32))+98
//不标准的:12(34+98) (这里,乘号不能少)
//对了,界面有点不大雅观,嘿嘿
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Stack
String s[]=new String[100];
int n=0;
public void InQuece(String str)
s[n]=str;
n++;
public String DeQuece()
return s[--n];
public String Front()
return s[n-1];
public void Sprint()
for(int i=n-1;i>=0;i--)
System.out.print(s[i]+" ");
System.out.println();
public class Calculator
static Frame frm=new Frame("Calculator");
//static TextField tff=new TextField(20);
static Label lab=new Label("0.");
static Panel pan=new Panel();
static String labelstr="";
static String ltemp="";
static int flag=1;
static Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19;
public void setFrame()
frm.setBounds(300,150,400,350);
frm.setLayout(null);
frm.addWindowListener(new window());
frm.setVisible(true);
b0=new Button("0");b1=new Button("1");b2=new Button("2");b3=new Button("3");b4=new Button("4");b5=new Button("5");b6=new Button("6");
b7=new Button("7");b8=new Button("8");b9=new Button("9");
b10=new Button("+");b11=new Button("-");b12=new Button("*");b13=new Button("/");b14=new Button("AC");b15=new Button("C");b16=new Button("=");
b17=new Button("(");b18=new Button(")");b19=new Button("RE");
lab.setBounds(0, 30, 400, 40);
lab.setFont(new Font("宋体",Font.PLAIN,30));
lab.setAlignment(Label.RIGHT);
pan.setBounds(0,60, 400, 300);
pan.setLayout(new GridLayout(5,4));
b0.addActionListener(new action());b1.addActionListener(new action());b2.addActionListener(new action());b3.addActionListener(new action());b4.addActionListener(new action());
b5.addActionListener(new action());b6.addActionListener(new action());b7.addActionListener(new action());b8.addActionListener(new action());b9.addActionListener(new action());
b10.addActionListener(new action());b11.addActionListener(new action());b12.addActionListener(new action());b13.addActionListener(new action());b14.addActionListener(new action());
b15.addActionListener(new action());b16.addActionListener(new action());b17.addActionListener(new action());b18.addActionListener(new action());b19.addActionListener(new action());
pan.add(b1);pan.add(b2);pan.add(b3);pan.add(b10);pan.add(b4);pan.add(b5);pan.add(b6);pan.add(b11);pan.add(b7);pan.add(b8);pan.add(b9);pan.add(b12);
pan.add(b0);pan.add(b14);pan.add(b15);pan.add(b13);pan.add(b16);pan.add(b17);pan.add(b18);pan.add(b19);
frm.add(lab);
frm.add(pan);
frm.setVisible(true);
public double cal(String str)
str=str.trim();
StringTokenizer st=new StringTokenizer(str,"+-*/ ",true);
Stack sta=new Stack();
String s,s1,s2;
while(st.hasMoreTokens())
s=st.nextToken();
if(s.equals("#"))
break;
if(s.equals(" "))
continue;
if(!(s.equals("+")||s.equals("-")||s.equals("/")||s.equals("*")))
sta.InQuece(s);
else if(s.equals("+"))
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1+d2;
sta.InQuece(""+d1);
else if(s.equals("-"))
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1-d2;
sta.InQuece(""+d1);
else if(s.equals("/"))
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1/d2;
sta.InQuece(""+d1);
else if(s.equals("*"))
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1*d2;
sta.InQuece(""+d1);
s=sta.DeQuece();
return Double.parseDouble(s);
public String InfixToPostfix(String s)
String restr="";
String temp="";
StringTokenizer st=new StringTokenizer(s,"+-/*#() ",true);
Stack sta=new Stack();
sta.InQuece("#");
while(st.hasMoreTokens())
temp=st.nextToken();
if(temp.equals("#"))
while(true)
String t=sta.DeQuece();
if(t.equals("#"))
break;
restr=restr+t+" ";
break;
else if(temp.equals(" "))
continue;
else if(!(temp.equals("(")||temp.equals(")")||temp.equals("+")||temp.equals("-")||temp.equals("*")||temp.equals("/")))
restr=restr+temp+" ";
else if(temp.equals(")"))
while(true)
String t=sta.DeQuece();
if(t.equals("("))
break;
else
restr=restr+t+" ";
else if(temp.equals("(")||temp.equals("+")||temp.equals("-")||temp.equals("*")||temp.equals("/"))
while(icp(temp)<=isp(sta.Front()))
String t=sta.DeQuece();
restr=restr+t+" ";
sta.InQuece(temp);
//sta.Sprint();
return restr;
public int icp(String s)
if(s.equals("#"))
return 0;
else if(s.equals("("))
return 7;
else if(s.equals("*")||s.equals("/"))
return 4;
else if(s.equals("+")||s.equals("-"))
return 2;
else if(s.equals(")"))
return 1;
else
return -1;
public int isp(String s)
if(s.equals("#"))
return 0;
else if(s.equals("("))
return 1;
else if(s.equals("*")||s.equals("/"))
return 5;
else if(s.equals("+")||s.equals("-"))
return 3;
else if(s.equals(")"))
return 7;
else
return -1;
public static void main(String args[])
Calculator c=new Calculator();
c.setFrame();
System.out.println(c.cal(c.InfixToPostfix("1*(2+3/4)*10#")));
static class action implements ActionListener
public void actionPerformed(ActionEvent e)
Button bu=(Button)e.getSource();
//ltemp=labelstr;
if(flag==1)
labelstr="";
flag=0;
if(bu==b0)
labelstr=labelstr+"0";
else if(bu==b1)
labelstr=labelstr+"1";
else if(bu==b2)
labelstr=labelstr+"2";
else if(bu==b3)
labelstr=labelstr+"3";
else if(bu==b4)
labelstr=labelstr+"4";
else if(bu==b5)
labelstr=labelstr+"5";
else if(bu==b6)
labelstr=labelstr+"6";
else if(bu==b7)
labelstr=labelstr+"7";
else if(bu==b8)
labelstr=labelstr+"8";
else if(bu==b9)
labelstr=labelstr+"9";
else if(bu==b10)
labelstr=labelstr+"+";
else if(bu==b11)
labelstr=labelstr+"-";
else if(bu==b12)
labelstr=labelstr+"*";
else if(bu==b13)
labelstr=labelstr+"/";
else if(bu==b14)//AC
ltemp=labelstr;
labelstr="0.";
flag=1;
else if(bu==b15)//C
labelstr=labelstr.substring(0, labelstr.length()-1);
if(labelstr.length()==0)
labelstr="0.";
flag=1;
else if(bu==b16)//=
ltemp=labelstr;
double b=new Calculator().cal(new Calculator().InfixToPostfix(labelstr+"#"));
labelstr=""+b;
lab.setText(labelstr);
flag=1;
return;
else if(bu==b17)
labelstr=labelstr+"(";
else if(bu==b18)
labelstr=labelstr+")";
else if(bu==b19)
labelstr=ltemp;
lab.setText(labelstr);
static class window extends WindowAdapter
public void windowClosing(WindowEvent e)
frm.dispose();
System.exit(0);
来自:求助得到的回答 参考技术A import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField;//计算结果显示区
private String lastCommand;//保存+,-,*,/,=命令
private double result;//保存计算结果
private boolean start;//判断是否为数字的开始
public Calculator()
super("Calculator");
container=getContentPane();
layout=new GridBagLayout();
container.setLayout(layout);
constraints=new GridBagConstraints();
start=true;
result=0;
lastCommand = "=";
displayField=new JTextField(20);
displayField.setHorizontalAlignment(JTextField.RIGHT);
constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=4;
constraints.gridheight=1;
constraints.fill=GridBagConstraints.BOTH;
constraints.weightx=100;
constraints.weighty=100;
layout.setConstraints(displayField,constraints);
container.add(displayField);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
addButton("Backspace",0,1,2,1,insert);
addButton("CE",2,1,1,1,insert);
addButton("C",3,1,1,1,insert);
addButton("7",0,2,1,1,insert);
addButton("8",1,2,1,1,insert);
addButton("9",2,2,1,1,insert);
addButton("/",3,2,1,1,command);
addButton("4",0,3,1,1,insert);
addButton("5",1,3,1,1,insert);
addButton("6",2,3,1,1,insert);
addButton("*",3,3,1,1,command);
addButton("1",0,4,1,1,insert);
addButton("2",1,4,1,1,insert);
addButton("3",2,4,1,1,insert);
addButton("-",3,4,1,1,command);
addButton("0",0,5,1,1,insert);
addButton("+/-",1,5,1,1,insert);//只显示"-"号,"+"没有实用价值
addButton(".",2,5,1,1,insert);
addButton("+",3,5,1,1,command);
addButton("=",0,6,4,1,command);
setSize(300,300);
setVisible(true);
private void addButton(String label,int row,int column,int with,int height,ActionListener listener)
JButton button=new JButton(label);
constraints.gridx=row;
constraints.gridy=column;
constraints.gridwidth=with;
constraints.gridheight=height;
constraints.fill=GridBagConstraints.BOTH;
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);
private class InsertAction implements ActionListener
public void actionPerformed(ActionEvent event)
String input=event.getActionCommand();
if (start)
displayField.setText("");
start=false;
if(input.equals("+/-"))
displayField.setText(displayField.getText()+"-");
if(!input.equals("+/-"))
if(input.equals("Backspace"))
String str=displayField.getText();
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1));
else if(input.equals("CE")||input.equals("C"))
displayField.setText("0");
start=true;
else
displayField.setText(displayField.getText()+input);
private class CommandAction implements ActionListener
public void actionPerformed(ActionEvent evt)
String command=evt.getActionCommand();
if(start)
lastCommand=command;
else
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true;
public void calculate(double x)
if (lastCommand.equals("+")) result+= x;
else if (lastCommand.equals("-")) result-=x;
else if (lastCommand.equals("*")) result*=x;
else if (lastCommand.equals("/")) result/=x;
else if (lastCommand.equals("=")) result=x;
displayField.setText(""+ result);
public static void main(String []args)
Calculator calculator=new Calculator();
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
本回答被提问者采纳 参考技术B 有邮箱吗?发给你,QQ815694960
为啥没有类似 C++ 的 Windows.Forms 程序(有吗?)
【中文标题】为啥没有类似 C++ 的 Windows.Forms 程序(有吗?)【英文标题】:Why isn't there a Windows.Forms like program for C++ (is there?)为什么没有类似 C++ 的 Windows.Forms 程序(有吗?) 【发布时间】:2009-10-11 17:43:20 【问题描述】:我认为没有像 VS Windows.Forms 这样的 C++ 程序。现在我知道“Windows.Forms”本身就是一个 C#“东西”,但我不明白为什么没有人为 C++ Windows GUI 构建类似的图形构造界面。我只是不知道它/他们吗?
我是否应该尝试制作一个(无论如何对我来说这将是一个挑战,但有什么好玩的!)?有人想和我谈谈和我一起做一个吗?
【问题讨论】:
为什么不在 .NET 平台上使用 C++?然后你就可以访问所有的 Windows.Forms 正如我对 jon 所说(尽管 10 秒前),我不是在寻找框架,而是在为我的窗口寻找 WYSIWYG 编辑器。 那么 qt 设计师是要走的路。 【参考方案1】:是的,你只是不知道。我最熟悉的是用于 Qt Toolkit:QtDesigner。我敢肯定还有其他人......
【讨论】:
【参考方案2】:我不完全确定你在追求什么 - 设计师?框架?
最接近 Windows 窗体的可能是 MFC,尽管也存在各种其他 GUI 框架......其中一些是可移植的,例如 Qt 和 GTK+。
编辑:对于设计师方面,来自Wikipedia Visual Studio page:
对于MFC开发,它提供了一套 用于创建和 自定义 MFC 样板代码,以及 使用 MFC 创建 GUI 应用程序。 Visual C++ 也可以使用 Visual 工作室表单设计师设计 UI 图形化的。
【讨论】:
好吧,你不可能有一个没有框架的设计师 - 但肯定有 曾经 是作为 Visual Studio 一部分的 GUI MFC 设计师。 Visual Studio 仍然包含一个用于 MFC 的 GUI 设计器。 Qt 还带有一个设计器。【参考方案3】:小修正:Windows.Forms 工具包不是特定于 C# 的工具包,而是一个 .Net 工具包。因此,它适用于支持托管代码的 C++ 版本。即具有托管扩展的 C++/CLI 和 C++。它甚至可以通过 COM 互操作和许多时髦的编组用于本机 C++。但是对于盒子里没有托管组件的原始原生 C++,是的,它不可用。
为什么?可能是因为已经有几个适用于 C++ 的 Windowing 工具包,它们具有与 Windows.Forms 类似的功能集。这是我认识的一对
QT MFC WTL【讨论】:
MFC(这是我个人所知道的唯一一个)只是一个框架,可以更轻松地与 win api 交互,除非我不正确 - 不是所见即所得的编辑器。无论如何,我不想要一个框架,我想要一个用于 win api 代码的 gui 编辑器。 你错了 - Visual Studio 带有 MFC 设计器。 第三个原因是 VS 有一个用于 MFC 的 WYSIWYG 编辑器。现在有点尘土飞扬,但是多年来一直是windows GUI开发的中流砥柱。【参考方案4】:它存在于 Visual Studio 中,并且自 .NET 之前就存在,假设您正在谈论用于在窗口上布置控件的图形编辑器。 http://msdn.microsoft.com/en-us/library/6zd672xs.aspx
【讨论】:
以上是关于给个java计算器程序,有吗的主要内容,如果未能解决你的问题,请参考以下文章