Java编写一个计算器程序

合集下载

java简单实用小项目实例

java简单实用小项目实例

java简单实用小项目实例Java是一种广泛应用于开发各类软件和项目的编程语言,它具有简洁、高效、可靠等特点。

本文将介绍几个简单实用的Java小项目实例,帮助读者巩固和应用Java语言的知识。

1. 学生成绩管理系统学生成绩管理系统是一个常见的小项目,它可以实现对学生信息和成绩的管理和查询。

通过Java语言的面向对象特性,我们可以定义学生类和成绩类,并编写相应的方法来实现学生信息的录入、成绩的录入和查询等功能。

这个项目可以帮助读者熟悉Java的面向对象编程思想和基本语法。

2. 电话号码归属地查询电话号码归属地查询是一个实用的小项目,它可以根据输入的电话号码查询该号码所属的地区。

通过Java语言的网络编程知识,我们可以编写一个简单的客户端程序,通过访问一个公开的电话号码归属地查询API,实现对电话号码归属地的查询。

这个项目可以帮助读者了解Java的网络编程和API的使用。

3. 简易计算器简易计算器是一个常见的小项目,它可以实现基本的加减乘除等运算功能。

通过Java语言的GUI编程知识,我们可以使用Swing或JavaFX等库来创建一个简单的计算器界面,并编写相应的计算逻辑来实现运算功能。

这个项目可以帮助读者熟悉Java的GUI编程和事件处理的基本原理。

4. 文件备份工具文件备份工具是一个实用的小项目,它可以帮助用户将指定目录下的文件备份到指定位置。

通过Java语言的文件操作知识,我们可以编写一个简单的程序,实现对指定目录下的文件进行遍历和复制等操作。

这个项目可以帮助读者了解Java的文件操作和异常处理的基本方法。

5. 网络聊天室网络聊天室是一个有趣的小项目,它可以实现多人在网络上进行实时聊天的功能。

通过Java语言的Socket编程知识,我们可以编写一个简单的服务器程序和客户端程序,实现用户之间的消息收发和显示。

这个项目可以帮助读者了解Java的Socket编程和多线程编程的基本原理。

以上是几个简单实用的Java小项目实例。

科学计算器代码

科学计算器代码

Calculate.java/*这是一个计算类,用于普通运算中的各种运算,如2,8,10,16进制的符合运算,复合运算其原理用后缀表达式来实现*/import java.util.*;import ng.Math;class Calculate {//两个内部类来实现数据的存储,如同数据结构中的栈class operator{ char data[];int top;operator(){data = new char [50];top = -1;}};class operator1{ double data[];int top;operator1(){data = new double [20];top = -1;}};public static double jiecheng(double number)//阶乘运算{int number1 = (int)number;double j=1;for(int i=1;i<=number1;i++)j=j*i;return j;}String trans (char exp[],char postexp[])//后缀表达式的翻译函数{int i=0,j=0;boolean m=true;//m用来监视表达式是不有非法的运算符连着输入operator op = new operator();while(exp[j]!='\0'){ switch (exp[j]){case '(':op.top++;op.data[op.top]=exp[j];j++;m= false;break;case ')':while (op.data[op.top]!='('){ postexp[i++]=op.data[op.top];op.top--;}op.top--;j++;break;case '+':case '-':if(!m)return "+或者-附近出现多个运算符在一起的现象!";while (op.top!=-1 && op.data[op.top]!='('){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m=false;break;case '*':case '/':if(!m)return "*或/附近出现多个运算符在一起的现象!";while(op.top!=-1 && op.data[op.top]!='('&& op.data[op.top]!='+'&& op.data[op.top]!='-'){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '^':if(!m)return "^(冥运算符号)附近出现多个运算符在一起的现象!";case 's':case 'c':case 't':case 'l':case '$':case '`':op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '!':op.top++;op.data[op.top]=exp[j];j++;break;case ' ':break;default:while (exp[j]>='0' && exp[j]<='9'||exp[j]=='.'){postexp[i++]=exp[j];j++;}postexp[i++]='#';m = true;}}while (op.top!=-1){postexp[i++]=op.data[op.top];op.top--;}postexp[i]='\0';if(exp[j-1]=='+'||exp[j-1]=='-'||exp[j-1]=='*'||exp[j-1]=='/'||exp[j-1]=='^') return "运算式后缀出现非正常运算符!";return "ok";}String compvalue (char postexp[],int flag)//后缀表达式运算,flag为进制{String ex = new String(postexp);StringTokenizer analy = new StringTokenizer(ex,"#+-`*/sclt!^$");operator1 st = new operator1();double d,d1,d2,a,b,c;int j=0;st.top=-1;while (postexp[j]!='\0'){switch (postexp[j]){case '+':a=st.data[st.top];st.top--;b=st.data[st.top];c=a+b;st.data[st.top]=c;break;case '-':a=st.data[st.top];st.top--;b=st.data[st.top];c=b-a;st.data[st.top]=c;break;case '*':a=st.data[st.top];st.top--;b=st.data[st.top];c=a*b;st.data[st.top]=c;break;case '/':a=st.data[st.top];st.top--;b=st.data[st.top];st.top--;if (a!=0){ c=b/a;st.top++;st.data[st.top]=c;}else{ return "输入错误,除数不能是零!请重新输入!";}break;case 's':a=st.data[st.top];c=Math.sin(Math.toRadians(a));st.data[st.top]=c;break;case 'c':a=st.data[st.top];c=Math.cos(Math.toRadians(a));st.data[st.top]=c;break;case 't':a=st.data[st.top];if(a%180 == 90||(-a)%180==90)return "tan函数值有误!";c=Math.tan(Math.toRadians(a));st.data[st.top]=c;break;case '!':a=st.data[st.top];c=jiecheng(a);st.data[st.top]=c;break;case 'l':a=st.data[st.top];if(a<=0)return "log的真数不能小于等于0";c=Math.log(a);st.data[st.top]=c;break;case '^':a=st.data[st.top];st.top--;b=st.data[st.top];c=Math.pow(b,a);st.data[st.top]=c;break;case '$':a=st.data[st.top];if(a<0)return "开方数不能小于0!";c=Math.sqrt(a);st.data[st.top]=c;break;case '`':a=st.data[st.top];c=0-a;st.data[st.top]=c;break;default:String str =analy.nextToken();//获取后缀表达式的数据if(flag == 2)d = btod(str);else if(flag == 8)d = otod(str);else if(flag == 10)d=Double.parseDouble(str);elsed = htod(str);while (postexp[j]>='0' && postexp[j]<='9'||postexp[j]=='.'){j++;}st.top++;st.data[st.top]=d;break;}j++;}return (String.valueOf(st.data[st.top]));}String check(char c[])//检查函数,用来检查运算式中的低级错误{int k=0,i=0;if(c[0]=='+'||c[0]=='-'||c[0]=='^'||c[0]=='*'||c[0]=='/')return "表达式开始位置不对";while(c[k]!='\0'){if((c[k]>=39 && c[k]<='9'&&c[k]!=',') ||c[k]=='$'||c[k]=='!'||c[k]==' '||c[k]=='c'||c[k]=='s'||c[k]=='t'||c[k]=='^'||c[k]=='l'||c[k]=='`') {}else{return "输入含有非法的字符,请重新输入正确的数学表达式!";}if(c[k]=='(')i++;else if(c[k]==')')i--;k++ ;}if(i!=0){return "输入错误,没有相匹配的括弧!请重新输入!";}return "ok";}double btod(String str)//二进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m--;}return p;}double otod(String str)//八进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m--;}return p;}double htod(String str)//十六进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m--;}return p;}}Main.java//主类public class Main {public static void main(String[] args) {new WinFrame("计算器");}}MyDialog.javaimport java.awt.event.*;import java.awt.*;//帮助文档的对话框类class MyDialog extends Dialog implements ActionListener //建立对话框类{ static final int YES=1,NO=0;int message=-1; Button yes,no;TextArea area;String help;MyDialog(Frame f,String s,boolean b) //构造方法{ super(f,s,b);yes=new Button("确定"); yes.addActionListener(this);no=new Button("取消"); no.addActionListener(this);setLayout(new FlowLayout());help = "使用帮助:\n";help +="本计算器运算方式采用输入整个运算式后进行运算的方式.\n";help +="但由于作者能力有限,对有些运算符进行了重定义,现列出以下运算符:\n";help +="s代表sin,c代表cos,t代表tan,!代表阶乘,l代表log\n";help +="`代表负号,如果要用键盘输入的时候,请正确输入\n";help +="本计算器有4大主要功能:\n";help +="1.进行符合运算,可以用键盘进行输入,执行结果可以按回车获得\n";help +="2.进行2,8,10,16进制的各种运算以及相互转换,16进制没有实现a,b,c,d,e,f的输入\n";help +="3.进行大整数运算\n4.进行批量运算";area = new TextArea(help,10,50,3);//area.setEnabled(false);area.setForeground(Color.BLUE);area.setFont(new Font("宋体",Font.BOLD,16));add(area);add(yes); add(no);yes.setPreferredSize(new Dimension(100,25));no.setPreferredSize(new Dimension(100,25));setBounds(300,300,500,300);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ message=-1;setVisible(false);}});}public void actionPerformed(ActionEvent e){ if(e.getSource()==yes){ message=YES;setVisible(false);}else if(e.getSource()==no){ message=NO;setVisible(false);}}public int getMessage(){ return message;}}Mypanel.javaimport java.util.*;import java.awt.*;import javax.swing.*;class mypanel extends Panel//派生一个面板,用来实现不同面板的布局{GridLayout grid;JButton btu[];mypanel(String []btuName,int row,int col,Color c){btu = new JButton [btuName.length];grid = new GridLayout(row,col,1,1);setLayout(grid);for(int i=0;i<row;i++)for(int j=0;j<col;j++){if(i*col+j<btuName.length){btu[i*col+j] = new JButton(btuName[i*col+j]);btu[i*col+j].setForeground(c);add(btu[i*col+j]);btu[i*col+j].setPreferredSize(new Dimension(60,25));}elsebreak;}}}WinFrame.javaimport java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import ng.Math;import java.math.*;class WinFrame extends Frame implements ActionListener,KeyListener,ItemListener {mypanel pane1,pane2,pane3,pane4,pane5;Label label1,label2;short j_flag=10;//进制运算的标示,初始化为十进制String strAsk="",strAnswer="";boolean b_flag = true;boolean p_flag = true;//批处理开关TextArea text1;//大整数输出专用域MenuBar menubar;Menu menu1,menu2,menu3;MenuItem item1,item2;MyDialog dialog;//帮助文档对话框CheckboxMenuItem menuitem1,menuitem2,menuitem3;String a[] = {"1","2","3",//用数组进行按钮的命名和消息内容的获取"4","5","6","7","8","9","0",".","+/-"};String a1[] = {"1","2","3","4","5","6","7","8","9","0",".","`"};String b[] ={"/","C","*","→","+","=","-","CE"};String c[] ={"sin","cos","tan","!","pow","sprt","log","pi"};String c1[] ={"s","c","t","!","^","$","l","p"};String d[] ={"( ",")"};String d1[] ={"(",")"};String e[] = {" A"," B"," C"," D"," E","F"};JTextField ask ,answer;char exp[];char postexp[];Checkbox box1,box2,box3,box4,box5;CheckboxGroup jin;String data = "0";//大整数储存数据TextArea text2,text3;int opear;CardLayout mycard;String answer1 = "";// 进制转换时的十进制答案储存Long answer2 = (long)0;//其他进制答案储存Panel pCenter;//添加一个容器装专用数据域void area()//初始化布局,只是不想在构造方法中的东西太多,看起来不方便{mycard = new CardLayout();pCenter = new Panel();pCenter.setLayout(mycard);setLayout(new FlowLayout());setBounds(60,60,450,290);menu1 = new Menu("查看");menu2 = new Menu("系统");menu3 = new Menu("帮助");menuitem1 = new CheckboxMenuItem("普通",true);menuitem2 = new CheckboxMenuItem("批处理",false);menuitem3 = new CheckboxMenuItem("大整数",false);item1 = new MenuItem("退出");item2 = new MenuItem("帮助");menuitem1.addItemListener(this);menuitem2.addItemListener(this);menuitem3.addItemListener(this);item1.addActionListener(this);item2.addActionListener(this);menubar = new MenuBar();menu1.add(menuitem1);menu1.add(menuitem2);menu1.addSeparator();//分隔符menu1.add(menuitem3);menu2.add(item1);menu3.add(item2);menuitem1.setShortcut(new MenuShortcut(KeyEvent.VK_P));menuitem2.setShortcut(new MenuShortcut(KeyEvent.VK_D)); menuitem3.setShortcut(new MenuShortcut(KeyEvent.VK_B)); item1.setShortcut(new MenuShortcut(KeyEvent.VK_Q)); item2.setShortcut(new MenuShortcut(KeyEvent.VK_F1));menubar.add(menu2);menubar.add(menu1);menubar.add(menu3);setMenuBar(menubar);dialog = new MyDialog(this,"帮助文档",true);pane1 = new mypanel(a,4,3,Color.red);pane3 = new mypanel(c,4,2,Color.black);pane2 = new mypanel(d,1,2,Color.black);pane4 = new mypanel(b,4,2,Color.BLUE);pane5 = new mypanel(e,1,6,Color.red);jin = new CheckboxGroup();box1 = new Checkbox("二进制",false,jin);box2 = new Checkbox("八进制",false,jin);box3 = new Checkbox("十进制",true,jin);box4 = new Checkbox("十六进制",false,jin);box5 = new Checkbox("大整数运算");pane3 = new mypanel(c,4,2,Color.black);for(int i=0;i<8;i++)pane3.btu[i].addActionListener(this);box1.addItemListener(this);box2.addItemListener(this);box3.addItemListener(this);box4.addItemListener(this);box5.addItemListener(this);for(int i=0;i<12;i++)pane1.btu[i].addActionListener(this);for(int i=0;i<2;i++)pane2.btu[i].addActionListener(this);for(int i=0;i<8;i++)pane4.btu[i].addActionListener(this);ask = new JTextField(38);ask.setHorizontalAlignment(JTextField.RIGHT);answer = new JTextField(38);ask.addKeyListener(this);answer.setHorizontalAlignment(JTextField.RIGHT); answer.setEditable(false);add(ask);add(answer);add(box5);add(box1);add(box2);add(box3);add(box4);text1= new TextArea("",6,10,3);text1.setForeground(Color.BLUE);pCenter.add("1",pane3);pCenter.add("2",text1);add(pCenter);add(pane1);add(pane4);add(pane2);add(pane5);label1 = new Label("请按格式输入批处理的数据,按空格输入下一个,回车输出答案。

java期末考试试题及答案

java期末考试试题及答案

java期末考试试题及答案Java期末考试试题一、选择题(每题2分,共20分)1. 下列哪个关键字用于定义Java接口?A. classB. interfaceC. packageD. abstract2. Java中,哪个类是所有Java类的根类?A. ObjectB. StringC. SystemD. Integer3. 在Java中,下列哪个方法用于获取对象的内存地址?A. hashCode()B. equals()C. clone()D. toString()4. 下列哪个是Java的访问修饰符?A. publicB. staticC. finalD. synchronized5. Java中,哪个关键字用于定义异常类?A. classB. interfaceC. exceptionD. error6. 下列哪个是Java集合框架中的接口?A. ArrayListB. LinkedListC. HashMapD. List7. Java中,哪个关键字用于定义泛型?A. newB. extendsC. implementsD. < >8. 下列哪个是Java的事件监听器接口?A. ActionListenerB. MouseListenerC. KeyEventD. Event9. Java中,哪个关键字用于实现多态?A. newB. overrideC. extendsD. implements10. 下列哪个是Java的异常处理关键字?A. tryB. catchC. finallyD. All of the above二、简答题(每题10分,共20分)1. 解释Java中的封装、继承和多态的概念,并给出一个简单的代码示例。

2. 描述Java集合框架中的List和Set接口的区别。

三、编程题(每题15分,共30分)1. 编写一个Java程序,实现一个简单的计算器,能够执行加、减、乘、除四种基本运算。

5800计算器程序1

5800计算器程序1

5800计算器程序15800计算器程序1计算器程序通常是用来进行基本的数学运算的工具,能够帮助用户进行加减乘除等运算。

下面是一个简单的5800计算器程序的实现,代码行数大约1200字以上。

```python# -*- coding: utf-8 -*-#定义一个函数,用于检查输入是否为有效的数值def is_valid_number(num_str):try:float(num_str)return Trueexcept ValueError:return Falseclass Calculator:def __init__(self):self.result = 0#加法运算def add(self, a, b):if is_valid_number(a) and is_valid_number(b): self.result = float(a) + float(b)return self.resultelse:return "请输入有效的数字!"#减法运算def subtract(self, a, b):if is_valid_number(a) and is_valid_number(b): self.result = float(a) - float(b)return self.resultelse:return "请输入有效的数字!"#乘法运算def multiply(self, a, b):if is_valid_number(a) and is_valid_number(b): self.result = float(a) * float(b)return self.resultelse:return "请输入有效的数字!"#除法运算def divide(self, a, b):if is_valid_number(a) and is_valid_number(b): if float(b) != 0:self.result = float(a) / float(b)return self.resultelse:return "除数不能为0!"else:return "请输入有效的数字!"#主程序if __name__ == '__main__':calculator = Calculatorprint("欢迎使用5800计算器程序!")while True:print("请输入要进行的操作:")print("1. 加法")print("2. 减法")print("3. 乘法")print("4. 除法")print("5. 退出程序")choice = input("请选择操作(输入序号):")if choice == "1":num1 = input("请输入第一个数:")num2 = input("请输入第二个数:")print(f"结果为:{calculator.add(num1, num2)}")elif choice == "2":num1 = input("请输入第一个数:")num2 = input("请输入第二个数:")print(f"结果为:{calculator.subtract(num1, num2)}") elif choice == "3":num1 = input("请输入第一个数:")num2 = input("请输入第二个数:")print(f"结果为:{calculator.multiply(num1, num2)}") elif choice == "4":num1 = input("请输入第一个数:")num2 = input("请输入第二个数:")print(f"结果为:{calculator.divide(num1, num2)}")elif choice == "5":print("感谢使用5800计算器程序,再见!")breakelse:print("无效的操作!请重新输入。

java动态计算公式(二)

java动态计算公式(二)

java动态计算公式(二)Java动态计算公式1. 简介Java是一种面向对象的编程语言,拥有强大的数学计算能力和灵活的表达式计算功能。

在Java中,可以通过动态计算公式来实现对数学公式的求解和表达式的计算。

本文将介绍一些常见的Java动态计算公式,并提供相应的示例代码。

2. Java动态计算公式的实现方式使用Java内置的JavaScript引擎Java提供了内置的JavaScript引擎,可以通过该引擎解析和执行JavaScript代码,实现动态计算公式的功能。

以下是使用内置JavaScript引擎实现动态计算公式的示例代码:import ;import ;import ;public class DynamicFormulaExample {public static void main(String[] args) {ScriptEngineManager manager = new ScriptEngineMa nager();ScriptEngine engine = ("javascript");String formula = "2 + 3 * 4";try {Object result = (formula);("计算结果:" + result);} catch (ScriptException e) {();}}}上述示例代码中,我们使用了ScriptEngineManager类获取了一个JavaScript引擎,然后调用eval方法传入需要计算的公式,并将计算结果输出到控制台。

在这个示例中,我们计算了2 + 3 * 4的结果,输出结果为14。

使用第三方数学表达式引擎除了使用Java内置的JavaScript引擎外,还可以使用第三方的数学表达式引擎来实现动态计算公式的功能。

这些引擎通常提供了更多的数学函数和操作符,使得计算公式更加灵活和强大。

编写一个简单的计算器程序

编写一个简单的计算器程序

编写一个简单的计算器程序计算器程序是一种非常实用的工具,它可以帮助我们进行数学计算,并简化复杂的运算过程。

本文将介绍如何编写一个简单的计算器程序,实现基本的加减乘除运算。

首先,我们需要确定计算器程序的功能和界面设计。

在本文中,我们将使用Python编程语言来编写计算器程序,并使用命令行界面(CLI)进行交互。

这意味着我们将在终端窗口中输入表达式,并显示结果。

接下来,我们需要考虑计算器程序的基本运算功能。

一个简单的计算器需要实现四个基本的运算:加法、减法、乘法和除法。

我们将使用函数来实现每个运算功能。

以下是一个示例代码:```pythondef add(x, y):return x + ydef subtract(x, y):return x - ydef multiply(x, y):return x * ydef divide(x, y):return x / y```在这个示例代码中,我们定义了四个函数,每个函数接受两个参数,并返回计算结果。

接下来,我们需要处理输入表达式并调用相应的运算函数。

我们将使用一个循环来持续接收用户输入,并在用户输入“exit”时退出程序。

以下是一个示例代码:```pythonwhile True:expression = input("请输入一个表达式:")if expression == "exit":break#解析表达式,提取运算符和操作数operator = Nonefor op in ["+", "-", "*", "/"]:if op in expression:operator = opbreakif not operator:print("表达式错误,请重新输入!") continueoperands = expression.split(operator) x = float(operands[0])y = float(operands[1])if operator == "+":result = add(x, y)elif operator == "-":result = subtract(x, y)elif operator == "*":result = multiply(x, y)elif operator == "/":result = divide(x, y)print("运算结果:", result)print("谢谢使用,再见!")```在这个示例代码中,我们使用了一个无限循环来持续接收用户输入。

《Java课程设计》说明书

《Java课程设计》说明书

《Java课程设计》说明书
课程设计报告书目录
一、设计课题
二、设计目的
三、操作环境
四、设计场所(机房号、机器号或自己机器)
五、设计过程(设计内容及及各源代码板块)
六、本次设计中用到的课程知识点(列出主要知识点)
七、设计过程中遇到的问题及解决办法
八、设计心得总结
2.总体设计
本程序是为了实现计算器的基本功能的运行。

利用监听器去实现计算器的基本功能。

3.科学计算器界面截图:
1)功能描述
1、打开计算器。

首先是标准型的计算器,具有基本的加减乘除,开方等
基本功能。

同时,在标准型的计算器中还可以存储文本框中的内容。

如图1所示:
图1标准型计算器界面
2、在标准型的计算器界面中,进行的运算--加法运算。

如计算
2+3=5.0。

如图2
图2加法功能
3、实现减法运算.如计算:4-2=2.0 如图3
图3 减法运算
4、实现取余运算.如计算 12%20=12.0 如图4
图4取余计算
4.程序整体设计说明
【1】程序中所用到的变量
count、line1、line2、leng、input、input1 【2】代码列表:
import java.awt.FlowLayout;。

java公式计算框架

java公式计算框架

java公式计算框架
Java公式计算框架有很多,以下列举几个常用的:
1. Apache Commons Math:Apache Commons Math是一个Java数学库,提供了计算基本数学、线性代数、随机数、统计方法等的工具类和算法。

其中包含了对复杂数学函数的支持,可以用于处理线性方程组、矩阵、向量等计算。

2. JEP :JEP(Java Expression Parser)是Java中一种功能强大、简单易用的数学表达式计算器,可支持从简单的数学表达式到复杂的函数、变量和条件表达式的计算和应用。

3. Expr4j:Expr4j是一个简单的数学表达式计算器,适用于处理基
本数学函数的计算和应用。

它可以对公式进行解析并直接对表达式进行计算。

4. JEval:JEval是一款轻量级的Java表达式计算器,可以支持数
学表达式计算、变量赋值、函数调用等复杂操作。

它提供了自定义函数和
操作符,可以按需扩展。

这些框架都能够实现公式的解析和计算,具体使用可根据需求进行选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息科学与技术学院 《Java语言课程设计》报告

题 目: 编写一个计算器程序 专 业: 计算机科学与技术 班 级: 学 号: 姓 名: 目录 一、概述 ................................................ 3 1.1设计目的及思路 ...................................... 3 1.2功能模块设计 ........................................ 3 1.3程序结构(流程图) .................................. 4 二、计算器的设计与实现 ................................... 4 2.1程序界面 ............................................ 4 2.2程序源代码 .......................................... 5 三、参考文献 ............................ 错误!未定义书签。 一、概述 1.1设计目的及思路 通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。 给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。 除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。 至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。 当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!

1.2功能模块设计

(1)加法:两个数据进行加操作,可以为小数。 (2)减法:两个数据进行减操作,可以为负数相减。 (3)乘法:两个数相乘操作。 (4)除法:两个数相除操作。 (5)阶乘:对任意一个数进行阶乘运算。 (6)指数:对任意一个数进行指数运算。 (7)倒数:对任意一个数进行倒数运算。 1.3程序结构(流程图) 计算器

四则运算其他运算清零

加减乘除阶乘指数

撤消

二、计算器的设计与实现 2.1程序界面

2.2程序源代码 package mine; import java.awt.*; import java.awt.event.*;

public class Calculator implements ActionListener{ private double data1=0.0,data2=0.0; private String t_content; boolean number=false; //key用标示用户所按按钮即加减乘除 //key0标示+1表示-2表示*3表示/ short key=-1;

//pkey取值-1~5 //pkey-1表示第按=按钮5说明第按=按钮 //pkey其值0,1,2,3别代表+-,*/ short pkey=-1;

Frame frame=new Frame("计算器");//定义标题Calculator窗体 TextField textfield=new TextField(30);//定义计算机

//定义backspace,ce,c0按钮 Button backspace=new Button("退格"); Button ce=new Button("撤消"); Button c0=new Button("清空");

//定义面板其backspace,ce,c0按钮计算机栏textfeild放面板p1 //其余按钮放面板p2 Panel p1=new Panel(); Panel p2=new Panel();

//定义界面按钮数组即除backspace,ce,c0按钮所按钮 String names[]={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="}; Button bb[]=new Button[names.length];

public static void main(String[] args){ Calculator cal=new Calculator(); cal.go(); }

public void go(){ frame.setSize(300,200); frame.setLayout(new BorderLayout()); Font fonts=new Font("楷体_GB2312",Font.PLAIN,12);

//设置面板p1字体布局管理类型textfeild象添加面板 p1.setFont(fonts); p1.setLayout(new GridLayout(2,1,5,10)); textfield.setFont(fonts); p1.add(textfield,null); //backspace,ce,c0按钮注册addActionListener backspace.addActionListener(this); ce.addActionListener(this); c0.addActionListener(this);

//backspace,ce,c0按钮添加p1面板 p1.add(backspace,null); p1.add(ce,null); p1.add(c0,null);

//设置面板p2布局管理器类型GridLayout p2.setLayout(new GridLayout(4,5,5,5));

//按钮组按钮注册addActionListener for(int i=0;ibb[i]=new Button(names[i]); p2.add(bb[i]); bb[i].addActionListener(this); }

//设置面板p1面板p2窗体位置 //面板p1窗体North向面板p2窗体South向 frame.add(p1,BorderLayout.NORTH); frame.add(p2,BorderLayout.SOUTH); frame.setVisible(true);

//单击关闭按钮退系统 frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void actionPerformed(ActionEvent ae){ String s; //通ActionEvent类getActionCommand()作由哪按钮触发 s=ae.getActionCommand();

//用户单击计算栏便掉字符 //先计算栏字符清空再添加除字符字符串 if(s.equals("退格")&&number){ t_content=textfield.getText(); textfield.setText(""); for(int i=0;i char c=t_content.charAt(i); textfield.setText(textfield.getText()+c); } }

//用户单击撤消按钮 if(s.equals("撤消")){ textfield.setText(""); number=false; }

//用户单击清空按钮 if(s.equals("清空")){ textfield.setText(""); data1=data2=0.0; number=false; }

//用户单击sqrt按钮其负数能 if(s.equals("sqrt")&&number){ t_content=textfield.getText(); if(t_content.charAt(0)=='-'){ textfield.setText("负数能"); number=false; }else{

textfield.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(t_content)))); } }

//用户单击1/x求倒数按钮求倒数母能0 if(s.equals("1/x") && number){ t_content=textfield.getText(); if(t_content.equals("0")){ textfield.setText("零能求倒数"); number=false; }else{

textfield.setText(Double.toString(1/Double.parseDouble(t_content))); }

相关文档
最新文档