eclipse写了个java简单计算器(老师已给界面不可改动),但是运行得不到正确结果,急求大神相助

sarah-forever 2014-12-23 11:47:16
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.SystemColor;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calculator extends JFrame {

JLabel lblNewLabel;
//定义变量,用于计算、判断、存放数字
private boolean numflag=false;//判断是否输入数字
private boolean opflag=false;//判断是否输入运算符
private String result;//存放运算结果
private String op="";//存放运算符
private double num1=0,num2=0;//运算数
private String strnum="";//存放已输入的操作数

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator frame = new Calculator();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Calculator() {
setBackground(Color.LIGHT_GRAY);
setTitle("\u8BA1\u7B97\u5668");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 379, 532);
contentPane = new JPanel();
contentPane.setBackground(Color.LIGHT_GRAY);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JPanel panel = new JPanel();
panel.setBounds(10, 108, 343, 378);
contentPane.add(panel);
panel.setLayout(new GridLayout(5, 4, 2, 2));

lblNewLabel = new JLabel("0");
lblNewLabel.setBorder(new LineBorder(Color.GRAY));
lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
lblNewLabel.setFont(new Font("宋体", Font.BOLD, 18));
lblNewLabel.setBounds(10, 25, 343, 39);
contentPane.add(lblNewLabel);

JButton btnNewButton_backspace = new JButton("C");//退格
btnNewButton_backspace.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
backspace("C");
}
});
panel.add(btnNewButton_backspace);

JButton btnNewButton_blank2 = new JButton("%");
btnNewButton_blank2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
IndisplayOpBtn("%");
}
});
panel.add(btnNewButton_blank2);

JButton btnNewButton_blank3 = new JButton("√");
btnNewButton_blank3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
IndisplayOpBtn("√");
}
});
panel.add(btnNewButton_blank3);

JButton btnNewButton_clear = new JButton("\u6E05\u9664");//清除
btnNewButton_clear.setToolTipText("\u6E05\u9664");
btnNewButton_clear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblNewLabel.setText("");
strnum="";
numflag=opflag=false;
num1=num2=0;
}
});
btnNewButton_clear.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_clear);

JButton btnNewButton_7 = new JButton("7");
btnNewButton_7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("7");
}
});
btnNewButton_7.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_7);

JButton btnNewButton_8 = new JButton("8");
btnNewButton_8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("8");
}
});
btnNewButton_8.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_8);

JButton btnNewButton_9 = new JButton("9");
btnNewButton_9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("9");
}
});
btnNewButton_9.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_9);

JButton btnNewButton_divide = new JButton("/");
btnNewButton_divide.setToolTipText("\u9664");
btnNewButton_divide.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayOpBtn("/");
}
});
btnNewButton_divide.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_divide);

JButton btnNewButton_4 = new JButton("4");
btnNewButton_4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("4");
}
});
btnNewButton_4.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_4);

JButton btnNewButton_5 = new JButton("5");
btnNewButton_5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("5");
}
});
btnNewButton_5.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_5);

JButton btnNewButton_6 = new JButton("6");
btnNewButton_6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("6");
}
});
btnNewButton_6.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_6);

JButton btnNewButton_multiply = new JButton("x");
btnNewButton_multiply.setToolTipText("\u4E58");
btnNewButton_multiply.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayOpBtn("*");
}
});
btnNewButton_multiply.setFont(new Font("Arial", Font.BOLD, 18));
panel.add(btnNewButton_multiply);

JButton btnNewButton_1 = new JButton("1");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("1");
}
});
btnNewButton_1.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_1);

JButton btnNewButton_2 = new JButton("2");
btnNewButton_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("2");
}
});
btnNewButton_2.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_2);

JButton btnNewButton_3 = new JButton("3");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("3");
}
});
btnNewButton_3.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_3);

JButton btnNewButton_subtract = new JButton("-");
btnNewButton_subtract.setToolTipText("\u51CF");
btnNewButton_subtract.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayOpBtn("-");
}
});
btnNewButton_subtract.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_subtract);

JButton btnNewButton_dot = new JButton(".");
btnNewButton_dot.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn(".");
}
});
btnNewButton_dot.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_dot);

JButton btnNewButton_0 = new JButton("0");
btnNewButton_0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayIntBtn("0");
}
});
btnNewButton_0.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_0);

JButton btnNewButton_equal = new JButton("=");
btnNewButton_equal.setToolTipText("\u8FD0\u7B97");
btnNewButton_equal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(opflag==true){
calculator(op);
}
result= new Double(num1).toString();
lblNewLabel.setText(result);
}
});
btnNewButton_equal.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_equal);

JButton btnNewButton_plus = new JButton("+");
btnNewButton_plus.setToolTipText("\u52A0");
btnNewButton_plus.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayOpBtn("+");
}
});
btnNewButton_plus.setFont(new Font("宋体", Font.BOLD, 18));
panel.add(btnNewButton_plus);

}

//数字按钮功能实现
public void displayIntBtn(String num){
if(strnum==""&&opflag==false){
lblNewLabel.setText(null);
strnum="";
}
numflag=true; //表示已经输入数字了
strnum+=num; //输入的数字加到存放数字的字符串中
lblNewLabel.setText(strnum);//将输入的数字显示出来
}

//运算符按钮实现
public void displayOpBtn(String commend){

if(opflag==false&&strnum!=null){ //输入第一个数字(不能输入运算符)
lblNewLabel.setText("");
num1=Double.parseDouble(strnum);
}
if(opflag==true&&strnum!=""){ //已输入运算符,第一个数字不为空,输入第二个数字
num2=Double.parseDouble(strnum);
}
numflag=false; //没有输入数字或已输入运算符
lblNewLabel.setText(commend);
opflag=true;
strnum="";
}
//实现开方、百分号
public void IndisplayOpBtn(String commend){

if(opflag==false&&strnum!=null){
lblNewLabel.setText("");
num1=Double.parseDouble(strnum);
}
numflag=false; //没有输入数字或已输入运算符
lblNewLabel.setText(commend);
opflag=true;
strnum="";
}

//实现运算功能
public void calculator(String op){
if(op.equals("+")){
num1=num1+num2;
num2=0;
opflag=false;
strnum="";
}
else if(op.equals("-")){
num1=num1-num2;
num2=0;
opflag=false;
strnum="";
}
else if(op.equals("*")){
num1=num1*num2;
num2=0;
opflag=false;
strnum="";
}
else if(op.equals("/")){
if(num2!=0){
num1=num1/num2;
num2=0;
opflag=false;
strnum="";
}
else
lblNewLabel.setText("ERROR");
}
else if(op.equals("%")){
num1=num1/100;
num2=0;
opflag=false;
strnum="";
}
else {
num1=Math.sqrt(num1);
num2=0;
opflag=false;
strnum="";
}
}
//实现清除功能
public void backspace(String op){
if(strnum!=""&&strnum.length()>0){
strnum=strnum.substring(0, strnum.length()-1);
}
lblNewLabel.setText("");
lblNewLabel.setText(strnum);
}
}
...全文
300 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
anhy 2014-12-24
  • 打赏
  • 举报
回复
输入“=”后直接运算,没有对num2进行赋值
anhy 2014-12-24
  • 打赏
  • 举报
回复
op没有赋值

58,454

社区成员

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

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