日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java實(shí)現(xiàn)計(jì)算器設(shè)計(jì)

瀏覽:127日期:2022-08-08 18:35:39

本文實(shí)例為大家分享了Java實(shí)現(xiàn)計(jì)算器設(shè)計(jì)的具體代碼,供大家參考,具體內(nèi)容如下

需求分析 目的是實(shí)現(xiàn)一個(gè)基于Java的可以求解帶括號(hào)加減乘除表達(dá)式帶界面的計(jì)算器。 需要知道的Java技術(shù):Java Swing(Java圖形界面設(shè)計(jì))、Java集合(棧)、lambda表達(dá)式、Java基礎(chǔ)等。設(shè)計(jì)思路

1、實(shí)現(xiàn)一個(gè)Java計(jì)算器界面類2、實(shí)現(xiàn)一個(gè)Java計(jì)算帶括號(hào)加減乘除表達(dá)式的類3、實(shí)現(xiàn)主函數(shù)調(diào)用

設(shè)計(jì)實(shí)現(xiàn)

Java計(jì)算器項(xiàng)目結(jié)構(gòu):

Java實(shí)現(xiàn)計(jì)算器設(shè)計(jì)

Calculator類為計(jì)算器界面設(shè)計(jì)、Calculate類為計(jì)算帶括號(hào)加減乘除表達(dá)式的類,Main函數(shù)為項(xiàng)目程序入口。

Java計(jì)算器界面設(shè)計(jì)實(shí)現(xiàn)代碼:

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('計(jì)算器'); init();// this.pack(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void init() {//初始化界面 this.setLayout(new BorderLayout()); //總體布局為邊框式布局 /* * 總體邊框式布局north放置文本框 */ JTextField textField=new JTextField(); textField.disable(); textField.setPreferredSize(new Dimension(this.getWidth(),50)); this.add(textField,BorderLayout.NORTH); /* * 總體邊框式布局center放置@panel(邊框式布局) * @panel邊框式布局north放置@panelN(網(wǎng)格布局) * @panel邊框式布局center放置@panelC(卡片式布局) * @panelC卡片來切換@panel0(標(biāo)準(zhǔn))和@panel1(科學(xué))兩種模式 * @panel0,@panel1均為網(wǎng)格布局 */ 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²','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²')) { 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²','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('標(biāo)準(zhǔn)'); 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('科學(xué)'); science.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub cardLayout.last(panelC); } }); modelMenu.add(science); }/* private class ButtonAction implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } }*/}

Java計(jì)算帶括號(hào)加減乘除表達(dá)式類的實(shí)現(xiàn):

package Calculator;import java.util.*;/**使用此類直接調(diào)用evaluateExpression方法即可,傳入需計(jì)算的表達(dá)式,返回計(jì)算結(jié)果*/public class Calculate { //這個(gè)函數(shù)的作用就是使用空格分割字符串,以便后面使用分割函數(shù)使得將字符串分割成數(shù)組 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) + ' '; elseresult += 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) //如果是空格的話就繼續(xù)循環(huán),什么也不操作continue; //如果是加減的話,因?yàn)榧訙p的優(yōu)先級(jí)最低,因此這里的只要遇到加減號(hào),無論操作符棧中的是什么運(yùn)算符都要運(yùn)算 else if (token.charAt(0) == ’+’ || token.charAt(0) == ’-’) {//當(dāng)棧不是空的,并且棧中最上面的一個(gè)元素是加減乘除的人任意一個(gè)while (!operatorStack.isEmpty()&&(operatorStack.peek() == ’-’ || operatorStack.peek() == ’+’ || operatorStack.peek() == ’/’ || operatorStack.peek() == ’*’)) { processAnOperator(operandStack, operatorStack); //開始運(yùn)算}operatorStack.push(token.charAt(0)); //運(yùn)算完之后將當(dāng)前的運(yùn)算符入棧 } //當(dāng)前運(yùn)算符是乘除的時(shí)候,因?yàn)閮?yōu)先級(jí)高于加減,因此要判斷最上面的是否是乘除,如果是乘除就運(yùn)算,否則的話直接入棧 else if (token.charAt(0) == ’*’ || token.charAt(0) == ’/’) {while (!operatorStack.isEmpty()&&(operatorStack.peek() == ’/’ || operatorStack.peek() == ’*’)) { processAnOperator(operandStack, operatorStack);}operatorStack.push(token.charAt(0)); //將當(dāng)前操作符入棧 } //如果是左括號(hào)的話直接入棧,什么也不用操作,trim()函數(shù)是用來去除空格的,由于上面的分割操作可能會(huì)令操作符帶有空格 else if (token.trim().charAt(0) == ’(’) {operatorStack.push(’(’); } //如果是右括號(hào)的話,清除棧中的運(yùn)算符直至左括號(hào) else if (token.trim().charAt(0) == ’)’) {while (operatorStack.peek() != ’(’) { processAnOperator(operandStack, operatorStack); //開始運(yùn)算}operatorStack.pop(); //這里的是運(yùn)算完之后清除左括號(hào) } //這里如果是數(shù)字的話直接如數(shù)據(jù)的棧 else {operandStack.push(Double.parseDouble(token)); //將數(shù)字字符串轉(zhuǎn)換成數(shù)字然后壓入棧中 }}//最后當(dāng)棧中不是空的時(shí)候繼續(xù)運(yùn)算,知道棧中為空即可while (!operatorStack.isEmpty()) { processAnOperator(operandStack, operatorStack);}return operandStack.pop(); //此時(shí)數(shù)據(jù)棧中的數(shù)據(jù)就是運(yùn)算的結(jié)果 } //這個(gè)函數(shù)的作用就是處理?xiàng)V械膬蓚€(gè)數(shù)據(jù),然后將棧中的兩個(gè)數(shù)據(jù)運(yùn)算之后將結(jié)果存儲(chǔ)在棧中 public void processAnOperator(Stack<Double> operandStack, Stack<Character> operatorStack) {char op = operatorStack.pop(); //彈出一個(gè)操作符Double op1 = operandStack.pop(); //從存儲(chǔ)數(shù)據(jù)的棧中彈出連個(gè)兩個(gè)數(shù)用來和操作符op運(yùn)算Double op2 = operandStack.pop();if (op == ’+’) //如果操作符為+就執(zhí)行加運(yùn)算 operandStack.push(op1 + op2);else if (op == ’-’) operandStack.push(op2 - op1); //因?yàn)檫@個(gè)是棧的結(jié)構(gòu),自然是上面的數(shù)字是后面的,因此用op2-op1else if (op == ’*’) operandStack.push(op1 * op2);else if (op == ’/’) operandStack.push(op2 / op1); }}

主函數(shù):

package Calculator;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Calculator calculator=new Calculator(); }}設(shè)計(jì)實(shí)現(xiàn)展示

Java實(shí)現(xiàn)計(jì)算器設(shè)計(jì)

可以隨意縮小放大界面,界面部件會(huì)跟隨界面大小自適應(yīng)調(diào)整。

其他功能

目前實(shí)現(xiàn)了標(biāo)準(zhǔn)型計(jì)算,科學(xué)型計(jì)算更加復(fù)雜,實(shí)現(xiàn)了界面,沒有計(jì)算功能,后續(xù)可能會(huì)繼續(xù)開發(fā),敬請(qǐng)期待。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品捆绑调教一区二区三区| 日韩三级一区| 久久影视三级福利片| 国产精品玖玖玖在线资源| 欧美日韩一区自拍| 国产精品久久亚洲不卡| 久久女人天堂| 正在播放日韩精品| 日韩三区在线| 欧美日韩国产探花| 天堂va蜜桃一区二区三区| 中文字幕亚洲精品乱码| 日本亚洲视频| 国产日韩欧美一区二区三区| 青草国产精品| 美女国产一区二区三区| 成人在线免费观看网站| 日韩伦理一区| 亚洲免费婷婷| 青青青国产精品| 久久一区亚洲| 99tv成人| 亚洲狼人精品一区二区三区| 久久国产三级精品| 精品三级av| 亚洲www啪成人一区二区| 激情久久五月| 亚洲精品国产精品粉嫩| 美女久久精品| 日韩免费视频| 国产毛片一区| 国产一区 二区| 久久电影tv| 亚洲欧美日韩视频二区| 88久久精品| 午夜久久中文| 丝袜美腿一区二区三区| 国产欧美日韩亚洲一区二区三区| 国产美女高潮在线观看| 午夜在线播放视频欧美| 国产欧美88| 日韩中文在线播放| 日韩在线网址| 电影亚洲精品噜噜在线观看| 狠狠爱www人成狠狠爱综合网| 欧美一级一区| 国产亚洲一区二区手机在线观看| 丝袜美腿亚洲一区二区图片| 麻豆视频一区| 久久最新视频| 国产成人久久精品一区二区三区| 午夜精品婷婷| 老司机精品视频在线播放| 在线成人直播| 精品五月天堂| 免费在线视频一区| 日韩成人精品一区| 亚洲专区视频| 欧美freesex黑人又粗又大| 美日韩精品视频| 国产第一亚洲| 少妇精品久久久一区二区三区| 国产成人久久| 日韩精选在线| 免费成人网www| 你懂的网址国产 欧美| 亚洲欧美日本日韩| 国产自产自拍视频在线观看| 日本亚洲欧美天堂免费| 91精品国产自产在线观看永久∴| 久久国产三级精品| 最新亚洲一区| bbw在线视频| 国产毛片精品| 久久亚洲美女| 欧美不卡高清一区二区三区| 国产精品视频3p| 美国三级日本三级久久99| 麻豆精品蜜桃| 精品72久久久久中文字幕| 日本亚洲不卡| 99视频+国产日韩欧美| 国产理论在线| 国产精品午夜一区二区三区| 丝瓜av网站精品一区二区| 日韩1区2区| 国产欧美在线观看免费| 免费在线观看日韩欧美| 99国产精品一区二区| 久久久精品国产**网站| 最近国产精品视频| 中文一区在线| 亚洲欧美一区在线| 深夜视频一区二区| 精品视频国产| 国产高清精品二区| 日韩av不卡在线观看| 亚洲网址在线观看| 野花国产精品入口| 国产主播一区| 91精品国产调教在线观看 | 神马午夜在线视频| 精品一区二区男人吃奶| 日韩国产在线不卡视频| 日韩中文字幕区一区有砖一区| 婷婷成人在线| 日本精品不卡| 日韩国产一区二区| 岛国av在线网站| 国产中文欧美日韩在线| 麻豆视频一区| 欧美激情日韩| 久久av超碰| 国产精品三级| 国产精品一区二区99| 国产亚洲电影| 国产精品视频3p| 国产欧美日韩免费观看| 日本免费新一区视频| 日韩专区视频网站| 婷婷亚洲成人| 91亚洲精品在看在线观看高清| 日本国产欧美| 国产欧美啪啪| 开心激情综合| 成人影视亚洲图片在线| 首页国产精品| jizzjizz中国精品麻豆| 日本在线高清| 99久精品视频在线观看视频| 久久精品高清| 91久久午夜| 亚洲有吗中文字幕| 人人精品久久| 久久99免费视频| 国产一区二区三区探花| 日韩中文在线电影| 欧美高清不卡| 丝袜美腿高跟呻吟高潮一区| 在线免费观看亚洲| 日韩区欧美区| 老司机精品在线| www.com.cn成人| 免费欧美一区| 中文字幕日韩高清在线| 国产欧美日韩视频在线| 黄色欧美在线| 国产一区欧美| 日韩精品一二三| 日韩欧美中文字幕一区二区三区 | 蜜臀久久99精品久久一区二区| 国产精品日韩久久久| 日本国产一区| 国产精品国产一区| 亚洲精品一区二区在线看| 亚洲精品影视| 九九99久久精品在免费线bt| 四虎884aa成人精品最新| 亚洲国产专区| 日本成人在线网站| 国产精品15p| 韩国三级一区| 一级成人国产| 精品午夜av| 国产精品女主播一区二区三区| 久久国产视频网| 日本不良网站在线观看| 丝袜美腿一区二区三区| 国产劲爆久久| 激情五月综合| 国产精品尤物| 激情久久婷婷| 7777精品| 香蕉久久99| 国产欧美一级| 久久九九精品| 7777精品| 91精品国产乱码久久久久久久| 视频在线观看91| 国产a亚洲精品| 亚洲无线观看| 国产精品蜜芽在线观看| 免费在线观看一区二区三区| 久久精品国产免费| 视频一区二区三区入口| 黄色在线观看www| 中文字幕一区二区av| zzzwww在线看片免费| 亚洲va久久久噜噜噜久久| 日韩不卡视频在线观看| 日韩高清成人在线| 国产91精品对白在线播放| 欧美日韩亚洲一区三区| 欧美a级一区| 国产精品蜜月aⅴ在线| 在线亚洲免费| 福利在线免费视频| 欧美视频久久| 国产精品色网| 日韩网站中文字幕|