java实验报告作业-----用javaGUI制作计算器实现简单的加减乘除运算

写在前面

(来自喝水吃饭大学的菜鸡,看看有没有校友)
最近写的java作业,感觉还是有所收获的,写个这个程序崩溃了好几次(好菜呀),最后还是找的了bug(一行一行代码审计,因为不是语法错误)

附上源码

package pack1;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.StringTokenizer;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class MyFrame extends JFrame {	
	private static final long serialVersionUID = 1L;		
	JPanel contentPane,buttonPane;
	JTextField display;
	JButton bt1=new JButton("=");
	MyFrame(){
		this.setSize(300,200);
		this.setLocationRelativeTo(null);
		this.setTitle("计算器");
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		contentPane=(JPanel) this.getContentPane();
		display=new JTextField();//单行编辑文本框
		display.setPreferredSize(new Dimension(this.getWidth(),35));
		display.setEditable(false);
		/*为display添加线型边框*/
		display.setBorder(new LineBorder(Color.magenta,2));
		
		contentPane.add(display,BorderLayout.NORTH);
		buttonPane=new JPanel();
		GridLayout layout=new GridLayout(0,5,3,3);
		buttonPane.setLayout(layout);
		/*为buttonPane添加空边框,相当于设置该组件上下左右的边距*/
		buttonPane.setBorder(new EmptyBorder(10,10,10,10));
		buttonPane.setBackground(Color.cyan);
		contentPane.add(buttonPane,BorderLayout.CENTER);		
		addButton();		
		this.setVisible(true);			
	}
	public void addButton(){
		String []s={"7","8","9","CE","AC",
				   "4","5","6","+","-",
				   "1","2","3","*","/",
				   "0",".","+/-","M+","="};
		for(int i=0;i<s.length-1;i++){
			JButton bt=new JButton(s[i]);
			bt.addActionListener(new ActionListener() {

				public void actionPerformed(ActionEvent e) {
						// TODO 自动生成的方法存根
						String str=bt.getText();
						display.setText(display.getText()+str);
					}		
				});
		
			buttonPane.add(bt);
		}
		bt1.addActionListener(new Mylistener(this));
		buttonPane.add(bt1);

		
	}
	public static void main(String[] args) {	
		new MyFrame();
	}

}
class Mylistener implements ActionListener{
	MyFrame mf;
	Mylistener(MyFrame mf){
		this.mf=mf;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		mf.display.setText(mf.display.getText()+mf.bt1.getText());
		
		//做加运算
		if(mf.display.getText().contains("+")) {
			StringTokenizer st1=new StringTokenizer(mf.display.getText(),"+");
			double d1=0,d2=0;
			d1=Double.parseDouble(st1.nextToken());
			while(st1.hasMoreTokens()) {
				StringTokenizer st2=new StringTokenizer(st1.nextToken(),"=");
				d2=Double.parseDouble(st2.nextToken());
			}
			mf.display.setText(mf.display.getText()+""+(d1+d2));
			
		}
		else if(mf.display.getText().contains("-")) {
			
			StringTokenizer st1=new StringTokenizer(mf.display.getText(),"-");
			double d1=0,d2=0;
			d1=Double.parseDouble(st1.nextToken());
			while(st1.hasMoreTokens()) {
				StringTokenizer st2=new StringTokenizer(st1.nextToken(),"=");
				d2=Double.parseDouble(st2.nextToken());
			}
			mf.display.setText(mf.display.getText()+""+(d1-d2));
			
		}
		else if(mf.display.getText().contains("*")) {
			StringTokenizer st1=new StringTokenizer(mf.display.getText(),"*");
			double d1=0,d2=0;
			d1=Double.parseDouble(st1.nextToken());
			while(st1.hasMoreTokens()) {
				StringTokenizer st2=new StringTokenizer(st1.nextToken(),"=");
				d2=Double.parseDouble(st2.nextToken());
			}
			mf.display.setText(mf.display.getText()+""+(d1*d2));
			
		}
		else if(mf.display.getText().contains("/")) {
			StringTokenizer st1=new StringTokenizer(mf.display.getText(),"/");
			double d1=0,d2=0;
			d1=Double.parseDouble(st1.nextToken());
			while(st1.hasMoreTokens()) {
				StringTokenizer st2=new StringTokenizer(st1.nextToken(),"=");
				d2=Double.parseDouble(st2.nextToken());
			}
			mf.display.setText(mf.display.getText()+""+(d1/d2));
				
		}
		
	}
	
	
}

遭遇的bug记录

在用自定义监听类的时候,写成了这样

在这里插入代码片实际上应该
在这里插入图片描述代码不规范,菜鸡两行泪

学到的类库知识

String强制转换为double型

应该调用java.long包中Double类中的parseDouble方法

d1=Double.parseDouble(string);

而不应该用(double)string这种类型转换

自定义分隔符(Java StringTokenizer 类使用方法)

我们知道在java中 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
如果自己把一个string分成几部分需要引用java.util.StringTokenizer
使用方法参考菜鸟教程
在这里插入图片描述

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值