求教简单计算器问题

ly2wow 2007-11-25 03:24:05
下面是我写的一段简单计算器的代码,可是我不知道“=”的相关代码怎么写,来帮帮忙啊

/******************
**Calculator.java**
******************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator extends WindowAdapter implements ActionListener {
private JFrame frame;
private JPanel panel1,panel2;
private JTextField tf;
private JButton[] bt;
private static String number,judge,sign;
private static Double num,result;

public void work(){
frame = new JFrame("Normal Calculator");
panel1 = new JPanel();
panel2 = new JPanel();
panel2.setLayout(new GridLayout(4,4));
tf = new JTextField("0.0",15);
bt = new JButton[16];
String[] stringarray = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","="};
for(int i = 0;i<=15;i++) {
bt[i] = new JButton(stringarray[i]);
bt[i].setActionCommand(stringarray[i]);
bt[i].addActionListener(this);
}
number = "";
judge = "";
sign = "";
num = 0.0;
result = 0.0;

panel1.add(tf);
int[] orderarray ={7,8,9,10,4,5,6,11,1,2,3,12,0,14,15,13};
for(int i = 0;i <= 15;i++)
panel2.add(bt[orderarray[i]]);
frame.add(panel1,BorderLayout.NORTH);
frame.add(panel2,BorderLayout.CENTER);

frame.addWindowListener(this);
frame.setSize(300,250);
frame.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if("1234567890.".contains(e.getActionCommand())) {
number += e.getActionCommand();
tf.setText(number);
}
else {
if("+-*/".contains(e.getActionCommand())) {
workOut();
sign = e.getActionCommand();
}
else workOut();
}
}

public void getNumber() {
if(number != "") {
if(judge == "") {
result = Double.parseDouble(number);
judge = number;
number = "";
}
else {
num = Double.parseDouble(number);
number = "";
}
}
}

public void workOut() {
getNumber();

if(sign.equals("+"))
result += num;
if(sign.equals("-"))
result -= num;
if(sign.equals("*"))
result *= num;
tf.setText(Double.toString(result));
if(sign.equals("/")) {
if(num != 0) {
result /= num;
tf.setText(Double.toString(result));
}
else tf.setText("error");
}
}

public void windowClosing(WindowEvent e) {
System.exit(0);
}

public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.work();
}
}
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly2wow 2007-11-28
  • 打赏
  • 举报
回复
我的这个实现了WINDOWS自带的计算器的普通型的所有功能,不过我的数字处理全都是用的DOUBLE型的。由于科学型中的很多按钮的功能我不知道,所以没写。想把代码贴出来的,可是超过了限制长度,我把它放到下载里,想看的就看看吧,我已经做了可执行文件,一起放那里了,只要装了JAVA就能直接运行。
ly2wow 2007-11-27
  • 打赏
  • 举报
回复
先在问题已经解决了,而且我增加了很多别的功能。
不过,按照楼上的思路好像是不行的,那样会像网上现有的大多数代码一样,存在一个或两个计算过程中的问题。
不过,仍然谢谢回答。
rypgood 2007-11-27
  • 打赏
  • 举报
回复
晕啊 先把所有功能模块化 然后你想要在哪实现就在哪调用方法咯!~
自己多思考思考,你这样的问题我也不知道该怎么回答,给你个思路好了,不过只是简单思路
定义两个数a和b
定义结果x
定义符号f
定义方法




并实现其功能
监听button,当
+ - * /
键被击时候
{
查看f是否为空,如果不是
{
计算结果
把结果赋给a
把屏幕赋给b
}
把屏幕赋给a
把响应符号赋给f
}
这就是你要 的功能
当= 被点时
看符号是否为空,是则x=0
不是则计算结果
ly2wow 2007-11-26
  • 打赏
  • 举报
回复
我现在的这个基本功能已经都实现了,不过还存在一个问题,那就是当点了等号以后,再点其他运算符号就会多出一步运算来,我的第一个运算符没有实现运算功能,这个问题该怎么解决呢?
我在网上找了4个计算器的代码,可惜那些代码没有一个是完全正确的,都存在一些错误。。。。。。
luzhide 2007-11-25
  • 打赏
  • 举报
回复
我自己也做了个~基本实现了 一些功能~我是通过连表实现的~
建议你用连表~ LinkedList
ly2wow 2007-11-25
  • 打赏
  • 举报
回复
恩,楼上所说的东西,我的代码里已经做了。我没有做的是当点了等号以后,除了计算结果以外的应该做的事,我不知道应该在点了等号后把运算的第二个数字设置成什么才能不影响四种运算。
rypgood 2007-11-25
  • 打赏
  • 举报
回复
你先定义一个变量sig 当点了+ - * /这些符号的时候,把屏幕的数字存储在一个变量a中,并把符号存在变量sig中,当点=号时候首先判断sign是什么,比如是+ 就把a和屏幕上的数据相加

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧