返回顶部
首页 > 资讯 > 精选 >怎么用Java实现计算器
  • 142
分享到

怎么用Java实现计算器

2023-06-20 17:06:21 142人浏览 薄情痞子
摘要

这篇文章主要介绍“怎么用Java实现计算器”,在日常操作中,相信很多人在怎么用Java实现计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Java实现计算器”的疑惑有所帮助!接下来,请跟着小编一起来

这篇文章主要介绍“怎么用Java实现计算器”,在日常操作中,相信很多人在怎么用Java实现计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Java实现计算器”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本文实例为大家分享了Java实现计算器设计的具体代码,供大家参考,具体内容如下

需求分析

  • 目的是实现一个基于Java的可以求解带括号加减乘除表达式带界面的计算器。

  • 需要知道的Java技术:Java Swing(Java图形界面设计)、Java集合(栈)、lambda表达式、Java基础等。

设计思路

实现一个Java计算器界面类
2、实现一个Java计算带括号加减乘除表达式的类
3、实现主函数调用

设计实现

Java计算器项目结构:

怎么用Java实现计算器

Calculator类为计算器界面设计、Calculate类为计算带括号加减乘除表达式的类,Main函数为项目程序入口。

Java计算器界面设计实现代码:

package Calculator;import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextField;public class Calculator extends JFrame{   private double result=0; private int count=0;  public Calculator() {  this.setSize(330,399);    this.setTitle("计算器");    init();//  this.pack();  this.setVisible(true);  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   }  public void init() {//初始化界面    this.setLayout(new BorderLayout()); //总体布局为边框式布局        JTextField textField=new JTextField();  textField.disable();  textField.setPreferredSize(new Dimension(this.getWidth(),50));  this.add(textField,BorderLayout.NORTH);         JPanel panel=new JPanel();  panel.setLayout(new BorderLayout());  this.add(panel, BorderLayout.CENTER);    JPanel panelN=new JPanel();  panelN.setLayout(new GridLayout(1,6));  JButton MC=new JButton("MC");  JButton MR=new JButton("MR");  JButton M0=new JButton("M+");  JButton M1=new JButton("M-");  JButton MS=new JButton("MS");  JButton M=new JButton("M");  panelN.add(MC);panelN.add(MR);panelN.add(M0);  panelN.add(M1);panelN.add(MS);panelN.add(M);  panel.add(panelN,BorderLayout.NORTH);    CardLayout cardLayout=new CardLayout();  JPanel panelC=new JPanel();  panelC.setLayout(cardLayout);    JPanel panel0=new JPanel();  panel0.setLayout(new GridLayout(6,4));  JButton[] standredButton=new JButton[24];  String str[]={"%","√","x&sup2;","1/x",    "CE","C","×","/",    "7","8","9","*",    "4","5","6","-",    "1","2","3","+",    "±","0",".","="   };  for(int i=0;i<standredButton.length;i++) {   standredButton[i]=new JButton(str[i]);   String text=standredButton[i].getText();   standredButton[i].addActionListener(new ActionListener() {        @Override    public void actionPerfORMed(ActionEvent e) {     // TODO Auto-generated method stub     if(text.equals("CE")||text.equals("C")) {      textField.setText("");     }     else if(text.equals("=")) {      String expression=textField.getText();      Calculate cal=new Calculate();      textField.setText(cal.evaluateExpression(expression)+"");     }     else if(text.equals("%")) {           }     else if(text.equals("√")) {      result=Double.parseDouble(textField.getText());      result=Math.sqrt(result);      textField.setText(result+"");     }     else if(text.equals("x&sup2;")) {      result=Double.parseDouble(textField.getText());      result*=result;      textField.setText(result+"");     }     else if(text.equals("1/x")) {      result=Double.parseDouble(textField.getText());      result=1/result;      textField.setText(result+"");     }     else if(text.equals("±")) {      if(count==0) {       textField.setText(textField.getText()+"-");       count=1;      }      else {       textField.setText(textField.getText()+"+");       count=0;      }     }     else if(text.equals("×")) {      textField.setText(textField.getText().substring(0, textField.getText().length()-1));     }     else {      textField.setText(textField.getText()+text);     }             }       }      );   panel0.add(standredButton[i]);  }  panelC.add(panel0);    JPanel panel1=new JPanel();  panel1.setLayout(new GridLayout(7,5));  JButton scienceButton[]=new JButton[35];  String str1[]= {  "x&sup2;","x^y","sin","cos","tan",  "√","10^x","log","Exp","Mod",  "↑","CE","C","×","/",  "π","7","8","9","*",  "n!","4","5","6","-",  "±","1","2","3","+",  "(",")","0",".","="      };  for(int i=0;i<str1.length;i++) {   scienceButton[i]=new JButton(str1[i]);   //scienceButton[i].addActionListener();   panel1.add(scienceButton[i]);  }  panelC.add(panel1);     panel.add(panelC,BorderLayout.CENTER);      JMenuBar menuBar=new JMenuBar();  this.setJMenuBar(menuBar);  JMenu modelMenu=new JMenu("模式");  menuBar.add(modelMenu);  JMenuItem standred=new JMenuItem("标准");    standred.addActionListener(new ActionListener() {   @Override   public void actionPerformed(ActionEvent e) {    // TODO Auto-generated method stub    cardLayout.first(panelC);   }    });  modelMenu.add(standred);  JMenuItem science=new JMenuItem("科学");  science.addActionListener(new ActionListener() {   @Override   public void actionPerformed(ActionEvent e) {    // TODO Auto-generated method stub    cardLayout.last(panelC);   }     });  modelMenu.add(science);   }}

Java计算带括号加减乘除表达式类的实现:

package Calculator;import java.util.*;public class Calculate {    //这个函数的作用就是使用空格分割字符串,以便后面使用分割函数使得将字符串分割成数组    public String insetBlanks(String s) {        String result = "";        for (int i = 0; i < s.length(); i++) {            if (s.charAt(i) == '(' || s.charAt(i) == ')' ||                    s.charAt(i) == '+' || s.charAt(i) == '-'                    || s.charAt(i) == '*' || s.charAt(i) == '/')                result += " " + s.charAt(i) + " ";            else                result += s.charAt(i);        }        return result;    }    public double evaluateExpression(String expression) {        Stack<Double> operandStack = new Stack<>();        Stack<Character> operatorStack = new Stack<>();        expression = insetBlanks(expression);        String[] tokens = expression.split(" ");        for (String token : tokens) {            if (token.length() == 0)   //如果是空格的话就继续循环,什么也不操作                continue;            //如果是加减的话,因为加减的优先级最低,因此这里的只要遇到加减号,无论操作符栈中的是什么运算符都要运算            else if (token.charAt(0) == '+' || token.charAt(0) == '-') {                //当栈不是空的,并且栈中最上面的一个元素是加减乘除的人任意一个                while (!operatorStack.isEmpty()&&(operatorStack.peek() == '-' || operatorStack.peek() == '+' || operatorStack.peek() == '/' || operatorStack.peek() == '*')) {                    processAnOperator(operandStack, operatorStack);   //开始运算                }                operatorStack.push(token.charAt(0));   //运算完之后将当前的运算符入栈            }            //当前运算符是乘除的时候,因为优先级高于加减,因此要判断最上面的是否是乘除,如果是乘除就运算,否则的话直接入栈            else if (token.charAt(0) == '*' || token.charAt(0) == '/') {                while (!operatorStack.isEmpty()&&(operatorStack.peek() == '/' || operatorStack.peek() == '*')) {                    processAnOperator(operandStack, operatorStack);                }                operatorStack.push(token.charAt(0));   //将当前操作符入栈            }            //如果是左括号的话直接入栈,什么也不用操作,trim()函数是用来去除空格的,由于上面的分割操作可能会令操作符带有空格            else if (token.trim().charAt(0) == '(') {                operatorStack.push('(');            }            //如果是右括号的话,清除栈中的运算符直至左括号            else if (token.trim().charAt(0) == ')') {                while (operatorStack.peek() != '(') {                    processAnOperator(operandStack, operatorStack);    //开始运算                }                operatorStack.pop();   //这里的是运算完之后清除左括号            }            //这里如果是数字的话直接如数据的栈            else {                operandStack.push(Double.parseDouble(token));   //将数字字符串转换成数字然后压入栈中            }        }        //最后当栈中不是空的时候继续运算,知道栈中为空即可        while (!operatorStack.isEmpty()) {            processAnOperator(operandStack, operatorStack);        }        return operandStack.pop();    //此时数据栈中的数据就是运算的结果    }    //这个函数的作用就是处理栈中的两个数据,然后将栈中的两个数据运算之后将结果存储在栈中    public void processAnOperator(Stack<Double> operandStack, Stack<Character> operatorStack) {        char op = operatorStack.pop();  //弹出一个操作符        Double op1 = operandStack.pop();  //从存储数据的栈中弹出连个两个数用来和操作符op运算        Double op2 = operandStack.pop();        if (op == '+')  //如果操作符为+就执行加运算            operandStack.push(op1 + op2);        else if (op == '-')            operandStack.push(op2 - op1);   //因为这个是栈的结构,自然是上面的数字是后面的,因此用op2-op1        else if (op == '*')            operandStack.push(op1 * op2);        else if (op == '/')            operandStack.push(op2 / op1);    }}

主函数:

package Calculator;public class Main { public static void main(String[] args) {  // TODO Auto-generated method stub  Calculator calculator=new Calculator(); }}

可以随意缩小放大界面,界面部件会跟随界面大小自适应调整。

其他功能

目前实现了标准型计算,科学型计算更加复杂,实现了界面,没有计算功能,后续可能会继续开发,敬请期待。

到此,关于“怎么用Java实现计算器”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Java实现计算器

本文链接: https://lsjlt.com/news/298528.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Java实现计算器
    这篇文章主要介绍“怎么用Java实现计算器”,在日常操作中,相信很多人在怎么用Java实现计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Java实现计算器”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • Java怎么用栈实现综合计算器
    本篇内容介绍了“Java怎么用栈实现综合计算器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!栈栈(stack)又名堆栈,它是一种运算受限的线...
    99+
    2023-07-02
  • Java实现计算器设计
    本文实例为大家分享了Java实现计算器设计的具体代码,供大家参考,具体内容如下 需求分析 目的是实现一个基于Java的可以求解带括号加减乘除表达式的带界面的计算器。 ...
    99+
    2024-04-02
  • 怎么用Java实现简单计算器功能
    这篇文章主要讲解了“怎么用Java实现简单计算器功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java实现简单计算器功能”吧!一 项目说明实训目的:掌握 Java GUI 开发中的...
    99+
    2023-06-20
  • Java怎么实现图形界面计算器
    这篇文章主要介绍“Java怎么实现图形界面计算器”,在日常操作中,相信很多人在Java怎么实现图形界面计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现图形界面计算器”的疑惑有所帮助!接下来...
    99+
    2023-06-25
  • java实现计算器的代码怎么写
    以下是一个简单的Java代码实现计算器的示例:```javaimport java.util.Scanner;public class Calculator {public static void main(String[] args)...
    99+
    2023-08-11
    java
  • Java用栈实现综合计算器
    目录栈Java实现栈栈实现综合计算器1.中缀表达式直接计算2.后缀表达式计算中缀表达式转后缀表达式栈 栈(stack)又名堆栈,它是一种运算受限的线性表 。限定仅在表尾进行插入和删除...
    99+
    2024-04-02
  • Java怎么利用栈实现简易计算器功能
    这篇文章主要介绍了Java怎么利用栈实现简易计算器功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用栈实现简易计算器功能文章都会有所收获,下面我们一起来看看吧。一、思路分析当我们输入一个类似于“...
    99+
    2023-06-30
  • JS怎么实现计算器
    这篇文章主要为大家展示了“JS怎么实现计算器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS怎么实现计算器”这篇文章吧。<!DOCTYPE h...
    99+
    2024-04-02
  • java swing怎么实现简单计算器界面
    这篇文章主要介绍“java swing怎么实现简单计算器界面”,在日常操作中,相信很多人在java swing怎么实现简单计算器界面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java&...
    99+
    2023-06-30
  • 用Java实现简单计算器功能
    本项目为大家分享了Java实现简单计算器功能的具体代码,供大家参考,具体内容如下 一 项目说明 实训目的:掌握 Java GUI 开发中的布局管理和事件处理机制。 实训要求: (1...
    99+
    2024-04-02
  • 怎么用javascript实现计算器功能
    这篇文章将为大家详细讲解有关怎么用javascript实现计算器功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 用javascript实现...
    99+
    2024-04-02
  • Java中怎么实现分布式计算
    Java中怎么实现分布式计算,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。远程过程调用的设计要创建出4种东西:服务器、客户端、服务器辅助设施和客户端辅助设施.创...
    99+
    2023-06-17
  • java GUI实现加法计算器
    本文实例为大家分享了java GUI实现加法计算器的具体代码,供大家参考,具体内容如下 1.写出一个简易计算器需要的组件 2.先出监听事件类 public class TextC...
    99+
    2024-04-02
  • Java实现Windows计算器界面
    前一段时间在学校简单的学习了Java,对Java这门我第一次接触的面向对象语言有了一定的了解。 一直没时间整理写的东西,今天打算整理下上传下。 Java相对于C来说比较方便的就是用来...
    99+
    2024-04-02
  • Java中怎么实现一个计算器小程序
    Java中怎么实现一个计算器小程序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下:package tst.jframe; impor...
    99+
    2023-06-20
  • 如何使用java代码实现计算器
    这篇“如何使用java代码实现计算器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用java代码实现计算器”文章吧。运...
    99+
    2023-06-30
  • 怎么在java中利用GUI实现一个加法计算器
    怎么在java中利用GUI实现一个加法计算器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据...
    99+
    2023-06-14
  • java中怎么利用gui实现一个计算器小程序
    java中怎么利用gui实现一个计算器小程序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码:package gui;  imp...
    99+
    2023-06-20
  • 使用JavaScript怎么实现一个计算器
    这期内容当中小编将会给大家带来有关使用JavaScript怎么实现一个计算器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体内容如下<!DOCTYPE html><html&...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作