首页 > 编程语言 >java 简单计算器

java 简单计算器

时间:2023-02-14 09:55:05浏览次数:42  
标签:comput String java 计算器 new 简单 input textField stack

package mdthob;//package com.cal;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.*;

class MyException extends Exception{
public MyException(String message) {
super(message);
}
}

class SwingConsole{
public static void run(final JFrame f,final int width,final int height){
SwingUtilities.invokeLater(() -> {
f.setTitle(f.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(width,height);
f.setVisible(true);
});
}
}

public class MyCalculator extends JFrame{
/*
*
*/

private final JTextField textField; //输入文本框
private String input; //结果

public MyCalculator() {
input = "";
//操作符

Container container = this.getContentPane();
JPanel panel = new JPanel();
textField = new JTextField(30);
textField.setEditable(false); //文本框禁止编辑
textField.setHorizontalAlignment(JTextField.LEFT);
//textField.setBounds(100, 100, 20, 20); //在容器布局为空情况下生效
textField.setPreferredSize(new Dimension(200,30));
container.add(textField, BorderLayout.NORTH);

String[] name= {"7","8","9","+","4","5","6","-","1","2","3","*","0","C","=","/"};

panel.setLayout(new GridLayout(4,4,1,1));

for (String s : name) {
JButton button = new JButton(s);
button.addActionListener(new MyActionListener());
panel.add(button);
}
container.add(panel,BorderLayout.CENTER);
}

class MyActionListener implements ActionListener{ //内部类实现按钮响应

@Override
public void actionPerformed(ActionEvent e) {
int cnt=0;
String actionCommand = e.getActionCommand(); //获取按钮上的字符串
switch (actionCommand) {
case "+":
case "-":
case "*":
case "/":
input += " " + actionCommand + " ";
break;
case "C": //清除输入
input = "";
break;
case "=": //按下等号
try {
input += "=" + calculate(input);
} catch (MyException e1) {
if (e1.getMessage().equals("Infinity"))
input += "=" + e1.getMessage();
else
input = e1.getMessage();
}
textField.setText(input);
input = "";
cnt = 1;
break;
default:
input += actionCommand; //按下数字
break;
}

if(cnt == 0)
textField.setText(input);
}
}

private String calculate(String input) throws MyException{ //计算函数
String[] comput = input.split(" ");
Stack<Double> stack = new Stack<>();
Double m = Double.parseDouble(comput[0]);
stack.push(m); //第一个操作数入栈

for(int i = 1; i < comput.length; i++) {
if(i%2==1) {
if(comput[i].equals("+"))
stack.push(Double.parseDouble(comput[i+1]));
if(comput[i].equals("-"))
stack.push(-Double.parseDouble(comput[i+1]));
if(comput[i].equals("*")) { //将前一个数出栈做乘法再入栈
Double d = stack.peek(); //取栈顶元素
stack.pop();
stack.push(d*Double.parseDouble(comput[i+1]));
}
if(comput[i].equals("/")) { //将前一个数出栈做乘法再入栈
double help = Double.parseDouble(comput[i+1]);
if(help == 0)
throw new MyException("Infinity"); //不会继续执行该函数
double d = stack.peek();
stack.pop();
stack.push(d/help);
}
}
}

double d = 0d;

while(!stack.isEmpty()) { //求和
d += stack.peek();
stack.pop();
}

return String.valueOf(d);
}

public static void main(String[] args) {
SwingConsole.run(new MyCalculator(), 250, 300);
}
}

标签:comput,String,java,计算器,new,简单,input,textField,stack
From: https://www.cnblogs.com/xiaoxiaodeyan/p/17118656.html

相关文章

  • 读Java实战(第二版)笔记09_函数式的思考
    1. 规则1.1. 传递参数,返回结果1.1.1. 异常和中断都不算返回结果1.2. 减少共享的可变数据结构能帮助你降低维护和调试程序的代价2. 耦合性2.1. 软件系统中各组......
  • Javascript Internationalization Object All In One
    JavascriptInternationalizationObjectAllInOneIntlAPIi18n(......
  • java方法
    方法定义方法修饰符(类)返回值类型方法名(参数类型参数名){方法内容return返回内容;}//修饰符如public//返回值类型字符char,String数值byte、sh......
  • day08-SpringMVC底层机制简单实现-04
    SpringMVC底层机制简单实现-04https://github.com/liyuelian/springmvc-demo.git8.任务7-完成简单视图解析功能说明:通过目标方法返回的String,转发或重定向到指定页面......
  • java开学测试心得体会
    本次开学测试完成了数据库的连接和和一些基本页面的制作,自己的水平非常需要提高,通过之前一段时间的经历,也认识到今后无论如何也要做出改变。造成我成绩不好的原因,客观上来......
  • JAVA-studyDay01
    JAVAjava-day01一.java简介1991年Sun公司的JamesGosling等人开始开发名称为Oak的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为J......
  • 利用反射和代理简单模拟mybatis实现简单的CRUD
    利用反射接口做java数据库操作今天突发奇想,好像一些基本的CRUD操作路数都是一样的,又想到mybatis中的操作,便想着简单的模拟一下。随便写写,就当练习反射了。Dao接口类:这......
  • js 0.1+0.2 !== 0.3 简单解决方案
    exportconstround=number=>{constgetFloat=number.toString().split(".");if(getFloat.length===1){returnnumber;}constfloatLength=getFloa......
  • java的知识点
    java知识点1、包装类自带有parse方法Integeri=315;inti1=Integer.parseInt("315");System.out.println(i==i1);Longl1=45......
  • Java开学考试总结
    2021级《软件工程》课前测试试卷(180分钟) 河北省环保监测中心网络新闻发布系统(卷面成绩40分,占课程过程考核20分) 1、项目需求:河北省环保监测中心网络新闻为搭建公众......