java能处理公式的计算器
设计一个简单的计算器类(类型),要求:
(1) 从键盘读入算式。
(2) 可以进行加、减、乘、除运算。
(3) 运算要有优先级。
(4) 用户可以按任何的运算符出现顺序进行输入。
(5) 不限定用户输入的计算式的长度。
(6) 有排错功能,当用户输入错误的算式时提示用户。
例如,如果用户输入:3 + 4 * 5 – 7,计算结果应为16。
(提示:可以使用本节所定义的栈类来帮助进行处理)
17.2概要设计:
本程设计思路: 计算器的构建用java的话还是挺容易的,用组件将各个需要的按钮放上去,然后监听事件,有按钮按下去的时间就实现相应的事件,或是显示,或是进行计算。对于公式的计算,就是将全部的输入内容放进一个数组,然后一个字符一个字符来匹配。
17.3 详细设计与编码:
见上传程序。
17.4 调试分析:
这题的算法看我是没有想到怎么解决,是看到了别人做的题目,然后研究看的。在调试时的大部分时间我是在弄界面问题。因为想跟图形界面的计算器结合,弄成能点击输入,并且能计算公式的计算器,不过还没有时间弄。
程序执行的结果:
错误检测
17.5 用户使用说明:
在输入文本框中输入公式,点击计算,输出框中就会显示相应的结果。如果有错误会提示。
17.6 设计心得:
Java的很多语法等规则自己还是不很了解,一些东西还不太清楚应该怎么应用,还是应该多花时间来学习学习,争取掌握。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ershisan extends JFrame implements ActionListener{
int m;
int right;
int t=0;
private JTextArea ta1;//输入公式的文本区
private JTextArea ta2;//输出计算结果的文本区
private JButton jb1=new JButton("计算"); //计算按钮
private JButton jb=new JButton("清空");//清空按钮
private JLabel jl1=new JLabel("输入计算公式:");
private JLabel jl2=new JLabel("计算结果:");
char[] c=new char[50];
char exp[]=new char[50];
int result;
public ershisan()//计算器的布局
{
super("公式计算器");
this.setSize(550,200);
this.setLocation(200,150);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(null);
JPanel jp =new JPanel();
JPanel jp1 =new JPanel();
jp.setSize(300, 400);
jp1.setSize(300, 400);
jp.setLocation(0, 0);
jp1.setLocation(300, 0);
jp.setLayout(null);
jp1.setLayout(null);
ta1=new JTextArea(20,30);
ta2=new JTextArea(20,30);
ta2.setEditable(false);
JScrollPane scrol1=new JScrollPane(ta1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane scrol2=new JScrollPane(ta2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrol1.setSize(200, 50);
scrol1.setLocation(10, 20);
scrol2.setSize(200, 50);
scrol2.setLocation(10, 20);
jp.add(scrol1);
jp1.add(scrol2);
jb.setBounds(10, 100, 100, 25);
jb1.setBounds(10, 100, 100, 25);
jl1.setFont(new Font("楷书",Font.BOLD,12));
jl1.setSize(140, 25);
jl1.setLocation(10, 0);
jl2.setFont(new Font("楷书",Font.BOLD,12));
jl2.setSize(140, 25);
jl2.setLocation(10, 0);
jp.add(jb1);
jp.add(jl1);
jp1.add(jb);
jp1.add(jl2);
this.add(jp);
this.add(jp1);
jb.addActionListener(this);//监听按钮事件
jb1.addActionListener(this);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com {
int n=0;
right=1;
m=0;
String jg;
String a=ta1.getText();//a中为输入的文本
char[] b=new char[a.length()];//将a的内容转为数组的形式
for(int i=0;i<a.length();i++)
{
b[i]=a.charAt(i);
c[i]=a.charAt(i);
n=i;
}
for(int d=n+1;d<50;d++)//未到达50个字符的其他空间都设为#
c[d]='#';
while(m<a.length()&&c[m]!='#'&&right==1){
if(Character.isDigit(c[m])||c[m]=='+'||c[m]=='-'||c[m]=='/'||c[m]=='*'||c[m]=='('||c[m]==')'||c[m]=='#')
{
e(c[m]);//如果满足所读的字符为数字或者是计算符号等,就调用e类进行处理
}
else//否则就显示出错
{
ta2.setText("输入不正确,请重新输入!");
return;
}
}
if(c[m]=='#'&&right==1&&result!=-1)//其他的空间则是原样显示1837
{