给个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计算器程序,有吗的主要内容,如果未能解决你的问题,请参考以下文章

JS中计算金额时怎么使用BigDecimal类进行计算?给个例子看下

计算机中的ASCII 码怎么计算?具体的方法有吗?

可以灵活扩容的分布式文件存储软件有吗?

如何设计java程序能提高大数据量的计算速度?

求简单java写计算器代码加减乘除

openfoam软件自带的算例描述或讲解有吗?在哪里