求大神帮帮忙看看这个程序到底什么问题

執銳F 2013-08-28 09:43:11
package com.jisuanqi;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Jisuanqi implements ActionListener {

// 定义成员变量
private JFrame jf;
private JPanel jp1;
private JPanel jp2;
private JPanel jp3;
private JButton[] jb;
private JTextField jt;

public Jisuanqi() {
jf = new JFrame();
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jt = new JTextField(15);
jb = new JButton[17];

jb[0] = new JButton("7");
jb[1] = new JButton("8");
jb[2] = new JButton("9");
jb[3] = new JButton("+");
jb[3].setForeground(Color.red); // 设置按钮上字的颜色

jb[4] = new JButton("4");
jb[5] = new JButton("5");
jb[6] = new JButton("6");
jb[7] = new JButton("-");
jb[7].setForeground(Color.red);

jb[8] = new JButton("1");
jb[9] = new JButton("2");
jb[10] = new JButton("3");
jb[11] = new JButton("*");
jb[11].setForeground(Color.red);

jb[12] = new JButton("0");
jb[13] = new JButton(".");
jb[14] = new JButton("=");
jb[15] = new JButton("/");
jb[15].setForeground(Color.red);
jb[16] = new JButton("C");
jb[16].setForeground(Color.red);

jp2.setLayout(new GridLayout(5, 4));

// 添加组件
for (int i = 0; i < jb.length; i++) {
jp2.add(jb[i]);
jb[i].addActionListener(this);
}
jp1.add(jt);
jp3.add(jp1, BorderLayout.SOUTH);
jp3.add(jp2, BorderLayout.NORTH);

// 设置窗口的属性
jf.add(jp3);
jf.setTitle("计算器");
jf.setLocation(520, 300);
jf.setSize(173, 200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setResizable(false);
jf.setVisible(true);

}

public static void main(String[] args) {
Jisuanqi j = new Jisuanqi();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
JButton jb = (JButton) (obj);
String s = jb.getText();

double f = 0;

String[] a;
String b;
if (e.getSource() != null) {

if(!e.getSource().equals("=")){
jt.setText(jt.getText() + s);
}else{

if (jt.getText().indexOf("+") > 0) {
a = jt.getText().split("+");
f = Double.parseDouble(a[0]) + Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("-") > 0) {
a = jt.getText().split("-");
f = Double.parseDouble(a[0]) - Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("*") > 0) {
a = jt.getText().split("*");
f = Double.parseDouble(a[0]) * Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("/") > 0) {
try {
a = jt.getText().split("/");
f = Double.parseDouble(a[0])
/ Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

} catch (Exception e2) {
// TODO: handle exception
jt.setText("除数不能为0");
jt.getText();
}
}
if (e.getSource().equals("C")) {
jt.setText(" ");
jt.getText();
}

}


} //else if (e.getSource() != null && e.getSource().equals("=")) {
// if (e.getSource().equals("=")) {
//
// }
//
// } else
}
}


弄了好半天就是只能在输入框打出你按的按钮的值,老是不能计算,求大神帮看下,谢谢了
...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 2013-08-28
  • 打赏
  • 举报
回复
补充一下, *和/也是需要转义的。。。
失落夏天 2013-08-28
  • 打赏
  • 举报
回复
首先,楼上那不是废话, 第二,我不建议使用Double来计划,Double存在精度的问题,比如你做个试验 System.out.println(2.00-1.90);看看结果为多少, 第三,楼主对对象的概念还是不清晰,e.getSource().equals("="),这两者怎么可能比较呢。。改了这一点就可以运行了计算了, 第四,即使运行还是有可能会报错,原因是+需要转义, 大体上调了一下,加减乘除没问题了,但是BUG还是很多,望楼主继续修改,楼主的界面还是做得蛮不错的。

public class Test2 implements ActionListener { // 定义成员变量
	private JFrame jf;
	private JPanel jp1;
	private JPanel jp2;
	private JPanel jp3;
	private JButton[] jb;
	private JTextField jt;

	public Test2() {
		jf = new JFrame();
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		jt = new JTextField(15);
		jb = new JButton[17];
		jb[0] = new JButton("7");
		jb[1] = new JButton("8");
		jb[2] = new JButton("9");
		jb[3] = new JButton("+");
		jb[3].setForeground(Color.red);
		// 设置按钮上字的颜色
		jb[4] = new JButton("4");
		jb[5] = new JButton("5");
		jb[6] = new JButton("6");
		jb[7] = new JButton("-");
		jb[7].setForeground(Color.red);
		jb[8] = new JButton("1");
		jb[9] = new JButton("2");
		jb[10] = new JButton("3");
		jb[11] = new JButton("*");
		jb[11].setForeground(Color.red);
		jb[12] = new JButton("0");
		jb[13] = new JButton(".");
		jb[14] = new JButton("=");
		jb[15] = new JButton("/");
		jb[15].setForeground(Color.red);
		jb[16] = new JButton("C");
		jb[16].setForeground(Color.red);
		jp2.setLayout(new GridLayout(5, 4));
		// 添加组件
		for (int i = 0; i < jb.length; i++) {
			jp2.add(jb[i]);
			jb[i].addActionListener(this);
		}
		jp1.add(jt);
		jp3.add(jp1, BorderLayout.SOUTH);
		jp3.add(jp2, BorderLayout.NORTH);
		// 设置窗口的属性
		jf.add(jp3);
		jf.setTitle("计算器");
		jf.setLocation(520, 300);
		jf.setSize(173, 200);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setResizable(false);
		jf.setVisible(true);
	}

	public static void main(String[] args) {
		Test2 j = new Test2();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object obj = e.getSource();
		JButton jb = (JButton) (obj);
		String  s= jb.getText();
		System.out.println(s);
		double f = 0;
		String[] a;
		String b;
		if (s != null) {
			if (!s.equals("=")) {
				jt.setText(jt.getText() + s);
			} else {
				if (jt.getText().indexOf("+") > 0) {
					System.out.println(jt.getText());
					a = jt.getText().split("\\+");
					f = Double.parseDouble(a[0]) + Double.parseDouble(a[1]);
					b = "" + f;
					jt.setText(b);
					jt.getText();
				}
				if (jt.getText().indexOf("-") > 0) {
					a = jt.getText().split("-");
					f = Double.parseDouble(a[0]) - Double.parseDouble(a[1]);
					b = "" + f;
					jt.setText(b);
					jt.getText();
				}
				if (jt.getText().indexOf("*") > 0) {
					a = jt.getText().split("*");
					f = Double.parseDouble(a[0]) * Double.parseDouble(a[1]);
					b = "" + f;
					jt.setText(b);
					jt.getText();
				}
				if (jt.getText().indexOf("/") > 0) {
					try {
						a = jt.getText().split("/");
						f = Double.parseDouble(a[0]) / Double.parseDouble(a[1]);
						b = "" + f;
						jt.setText(b);
						jt.getText();
					} catch (Exception e2) {
						// TODO: handle exception
						jt.setText("除数不能为0");
						jt.getText();
					}
				}
				if (e.getSource().equals("C")) {
					jt.setText(" ");
					jt.getText();
				}
			}
		}
	}
}
末日哥 2013-08-28
  • 打赏
  • 举报
回复
actionPerformed里面逻辑处理不对。。

62,614

社区成员

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

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