标题:求助,一个计算器的括号功能怎么写啊。
只看楼主
xiang092106
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-16
 问题点数:0 回复次数:16 
求助,一个计算器的括号功能怎么写啊。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class computer1 extends JFrame implements ActionListener{
Double r1,r2,total,c1,c2;
int i,j,j1=10,j2=7,c;
JButton[] Button1,Button2;
String str1=new String();
String str2=new String();
String str=new String();
String strr=new String();

boolean flag=true;
Container cp;

JLabel output=new JLabel("输出");
JTextField outarea=new JTextField(10);
JButton Button3=new JButton("=");
JButton clear=new JButton("清除");
JButton exit=new JButton("退出");
JMenuBar menubar=new JMenuBar();
JMenu now =new JMenu("文件(F)");
JMenu edit=new JMenu("编辑(E)");
JMenu help=new JMenu("帮助(H)");
JMenu format=new JMenu("格式(O)");

JMenuItem properties=new JMenuItem("属性",'P');
JMenuItem editer=new JMenuItem("退出",'X');
JMenuItem naw =new JMenuItem("新建",'N');
JMenuItem open=new JMenuItem("打开",'O');
JMenuItem paste=new JMenuItem("复制",'C');
JMenuItem cut=new JMenuItem("剪切",'X');
JMenuItem delet=new JMenuItem("删除",'D');
JMenuItem Auok=new JMenuItem("自动换行",'W');
JMenuItem font=new JMenuItem("字体",'F');
JMenuItem about=new JMenuItem("关于..",'A');

public computer1(){
super("祥祥的简单的计算器");
super.setJMenuBar(menubar);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
now .add(naw);naw.setEnabled(false);
now.add(open);open.setEnabled(false);
now.add(properties); properties.setEnabled(false);
now.add(editer); editer.addActionListener(new exit());

edit.add(paste); paste.setEnabled(false);
edit.add(cut);cut.setEnabled(false);
edit.add(delet);delet.setEnabled(false);

format.add(Auok);Auok.setEnabled(false);
format.add(font);font.setEnabled(false);

help.add(about);about.addActionListener(new message());

now.setMnemonic('F');
edit.setMnemonic('E');
format.setMnemonic('F');
help.setMnemonic('H');
menubar.add(now);
menubar.add(edit);
menubar.add(format);
menubar.add(help);

BorderLayout layout1=new BorderLayout();
GridLayout layout2=new GridLayout(4,4,6,6);
cp=getContentPane();

JPanel panel1=new JPanel(new GridLayout(2,1));
panel1.add(output);
panel1.add(outarea);
cp.add("North",panel1);
JPanel panel2=new JPanel(layout2);
Button1=new JButton[j1];
Button2=new JButton[j2];
Button2[2]=new JButton("*");
Button2[3]=new JButton("%");
Button2[4]=new JButton("(");
Button2[5]=new JButton(")");
Button1[1]=new JButton("1");
Button1[2]=new JButton("2");
Button1[3]=new JButton("3");
Button2[0]=new JButton("+");
Button1[4]=new JButton("4");
Button1[5]=new JButton("5");
Button1[6]=new JButton("6");
Button2[1]=new JButton("-");
Button1[7]=new JButton("7");
Button1[8]=new JButton("8");
Button1[9]=new JButton("9");
Button1[0]= new JButton("0");
for (i=0 ;i<10;i++) {
panel2.add(Button1[i]);
Button1[i].addActionListener(this);
};
for (j=0 ;j<6;j++) {
panel2.add(Button2[j]);
Button2[j].addActionListener(new operation());
};
Button3=new JButton("=");
JPanel panel3=new JPanel(new GridLayout());
panel3.add(Button3);
panel3.add(clear);
panel3.add(exit);
cp.add("Center",panel2);
cp.add("South",panel3);
Button3.addActionListener(this);
clear.addActionListener(this);
exit.addActionListener(new exit());
}

public void clear(){
this.total=0.0 ;
this.str=this.str1=" ";
this.str1=" ";
this.str2=" ";
outarea.setText(" ");
flag=true;
}

class exit implements ActionListener{
public void actionPerformed(ActionEvent e)
{System.exit(0);}
}
public void actionPerformed(ActionEvent e){
for(i=0;i<10;i++){
if(e.getSource()==Button1[i]){
if(flag){
str=str.valueOf(i);
str1+=str;
outarea.setText(str1);
r1=Double.parseDouble(str1);
}
else{
str=str.valueOf(i);
str2+=str;
outarea.setText(str2);
r2=Double.parseDouble(str2);
}
}
}
if(e.getSource()==clear) clear();
if(e.getSource()==Button3){
total=0.00;
switch(c){
case 0:total=r1+r2;outarea.setText(strr.valueOf(total));strr=strr.valueOf(total);break;
case 1:total=r1-r2;outarea.setText(strr.valueOf(total));strr=strr.valueOf(total);break;
case 2:total=r1*r2;outarea.setText(strr.valueOf(total));strr=strr.valueOf(total);break;
case 3:total=r1/r2;outarea.setText(strr.valueOf(total));strr=strr.valueOf(total);break;
}
}
}
class operation implements ActionListener{
public void actionPerformed(ActionEvent a){
for(j=0;j<4;j++)
if(a.getSource()==Button2[j]){
c=j;
char aa[ ]=new char[4];
aa[0]='+';aa[1]='-';aa[2]='*';aa[3]='/';
str=str.valueOf(aa[j]);
outarea.setText(str);
flag=false;
}
}
}
class message extends JFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
JFrame frame=new JFrame("信息...");
frame.setSize(60,250);
frame.getContentPane().setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JLabel label1=new JLabel("关于作者信息:" );
JLabel label2=new JLabel("祥。");
frame.getContentPane().add(label1);
frame.getContentPane().add(label2);
}
}
public static void main(String[] args){
computer1 fr= new computer1();
fr.setVisible(true);
fr.pack();
}
}






我就是实现不了括号功能,请同道友人指点一下,谢谢。
还有我觉得我的计算器还有一些不好的地方,请大家指点一下。修正一下。
搜索更多相关主题的帖子: 计算器 String 括号 import new 
2007-10-08 21:42
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 

你可以去看一下 表达式求值方面的知识.
严蔚敏 的<数据结构>一书关于栈的那一段就有.


My BlogClick Me
2007-10-08 22:09
xiang092106
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-16
得分:0 

我没有那本书啊。你能不能帮我改一下啊。明天就要交呢。

谢谢你啦

2007-10-08 22:32
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
得分:0 
呵呵,麻烦了,以前看过一个c++写的表达式计算的体系结构,非常的有意识
输入一个表达式只要他支持的就可以给你计算出来,还支持变量,类似于matlab的东西了,
纯真的oop思想写出来的,当时没看到,好像是一本叫做数值分析的数学书里面的,如果有找到的朋友或者有类似代码的
帮忙发给我一个消息或者email:coolflytow@gmail.com
Thanks for your help!
呵呵 非常感谢

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2007-10-09 02:30
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
以前我用C++写过一个计算器: 支持表达式计算,表达式支持变量,函数,支持自定义变量,自持自定义函数,支持嵌套定义(不支持递归定义).
后来在移植到文曲星上,这是当年发的贴:http://emsky.net/bbs/viewthread.php?tid=9104&extra=page%3D2%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D7

My BlogClick Me
2007-10-09 08:47
xiang092106
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-16
得分:0 

版主,难道我的源代码就改不了。
晕晕。。。。。。。。。。。







2007-10-09 12:35
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 

用双栈,遇到"("压入,遇到")"所有到前面最后一个"("的算符出栈,进入后缀表达式


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-10-09 12:38
xiang092106
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-16
得分:0 
我对栈不熟悉。你帮我改一下吧。
2007-10-09 13:16
xiang092106
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-5-16
得分:0 
我也没学过栈。
2007-10-09 13:22
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
以下是引用xiang092106在2007-10-9 12:35:48的发言:

版主,难道我的源代码就改不了。
晕晕。。。。。。。。。。。







作业还是自己做吧.
都告诉你原理了,自己用baidu搜相关资料.


My BlogClick Me
2007-10-09 13:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-175948-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.222413 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved