今天给各位分享java表达式计算器的知识,其中也会对java计算数学表达式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、java描述表达式计算器 已有程序只能进行一位数字的运算,怎么改一下使之能进行多位数的运算?2、java swing 计算器 键盘 表达式求值3、计算器制作JAVA版(第三步,表达式求值(+4、java如何设计四则计算器?
java描述表达式计算器 已有程序只能进行一位数字的运算,怎么改一下使之能进行多位数的运算?
这个输入进去的只是一串字符,你要有语法分析的,可以采用这个思路(我用这个思路做了c++版的),表达式一般以数字开头,然后使用一个下标,向后读这个字符串,当遇到不是数字的字符时(可以用ASCII码这些来判别0到9),把前面的一串(也就是一个数字)转换成int或者float型的,至于计算,那就采用堆栈就行了。一般都是使用逆波兰。
java swing 计算器 键盘 表达式求值
目标:初始化窗体
代码:如下
—————-
public class View extends JFrame{
public View(){
this.setTitle(“计算器”);//设置标题
this.setResizable(false);//不可改变大小
this.setLocationRelativeTo(null);//居中显示
this.setSize(228, 324);//窗体大小,可以使用FastStone Capture的屏幕尺量一下win计算器的大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作
}
public static void main(String[] args) {
new View().setVisible(true);
}
}
目标:设置菜单
代码:如下
—————-
/**
* 创建初始化菜单方法(别忘记在构造函数里调用)
*/
private void initMenu(){
jmb = new JMenuBar();//创建菜单条
jm_view = new JMenu(“查看(V)”);//查看菜单
jm_view.setMnemonic(‘V’);//设置热键
jm_edit = new JMenu(“编辑(E)”);//编辑菜单
jm_edit.setMnemonic(‘E’);
jm_help = new JMenu(“帮助(H)”);//帮助菜单
jm_help.setMnemonic(‘H’);
jmb.add(jm_view);
jmb.add(jm_edit);
jmb.add(jm_help);
this.setJMenuBar(jmb);//将菜单条加入窗体中
}
目标:仿结果显示框
代码:如下
—————-
/**
* 创建内容区域初始化方法
*/
private void initContent(){
//整个窗口区域
JPanel jp = new JPanel();
jp.setLayout(null);//设置空布局以便绝对定位
//显示框区域
JPanel jptmp = new JPanel(){
//获取背景图片,使用截图工具从win计算器显示框中截取2像素宽度作为背景
Image bg = new ImageIcon(“imgs/bg.png”).getImage();
/**
* 填充结果显示区域的背景
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//x轴平铺满面板
for(int i = 0;ithis.getWidth();i+=bg.getWidth(this)){
g.drawImage(bg, i, 0, this);//绘制背景图片
}
}
};
//设置显示框上方小字体
Font font_lab = new Font(“arial”, Font.BOLD, 22);
jla_input = new JLabel();
jla_input.setText(“0”);
//设置字体右对齐
jla_input.setHorizontalAlignment(JLabel.RIGHT);
jla_input.setFont(font_lab);
//设置显示框中计算结果的字体
font_lab = new Font(“arial”, Font.BOLD, 10);
jla_show = new JLabel();
jla_show.setText(“sqrt”);
//设置字体右对齐
jla_show.setHorizontalAlignment(JLabel.RIGHT);
jla_show.setFont(font_lab);
//设置显示框区域的位置的大小
jptmp.setBounds(14, 15, 190, 50);
jptmp.setLayout(new BorderLayout());
jptmp.add(jla_show,BorderLayout.NORTH);
jptmp.add(jla_input,BorderLayout.CENTER);
//设置边框
jptmp.setBorder(BorderFactory.createLineBorder(new Color(142,156,173)));
jp.add(jptmp);
this.setLayout(new BorderLayout());
this.add(jp,BorderLayout.CENTER);
}
目标:绘制其他按钮
代码:如下
—————-
①设置字符枚举类
public enum Operator{
//用于swith判断,待用
mC,mR,mS,mAdd,mSubtract,//mc,mr,ms,m+,m-
clBack,clError,clClear,operNegation,operSqrt,//-,ce,c,-/+,开平方
n7,n8,n9,operDivide,operPer,// /,%,
n4,n5,n6,operMultiply,operReciproc,//*,倒数
n1,n2,n3,operSubtract,operEqu,//-,=
n0,operDot,operAdd;//+
//用于显示
public static final String [] labs = new String[]{
“MC”,”MR”,”MS”,”M+”,”M-“,
“←”,”CE”,”C”,”±”,”√”,
“7”,”8″,”9″,”/”,”%”,
“4”,”5″,”6″,”*”,”1/x”,
“1”,”2″,”3″,”-“,”=”,
“0”,”.”,”+”
};
}
②添加按钮
jptmp = new JPanel();
jptmp.setBounds(14, 72, 196,194);
jptmp.setLayout(null);
Font font_but = new Font(“arial”, Font.BOLD, 10);//创建按钮字体
for (int i = 0; i jb_oper.length; i++) {
jb_oper[i] = new JButton(Operator.labs[i]);//设置按钮文字
jb_oper[i].setForeground(new Color(30,57,91));//设置字体颜色
jb_oper[i].setActionCommand(Operator.values()[i].toString());//设置按钮标示
jb_oper[i].setFont(font_but);//设置按钮字体
jb_oper[i].setBounds(i%5*(33+6), i/5*(24+6), 33, 24);//统一33宽,24高,间距6,每5个换一行
jb_oper[i].setBorder(new LineBorder(new Color(135,151,170), 1));//设置按钮边框
jb_oper[i].addActionListener(this);//添加监听器
jptmp.add(jb_oper[i]);
}
jb_oper[24].setBounds(24%5*(33+6), 24/5*(24+6), 33, 24*2+6);//调整等号按钮位置
jb_oper[25].setBounds(25%5*(33+6), 25/5*(24+6), 33*2+6, 24);//调整0按钮的位置
jb_oper[26].setBounds(27%5*(33+6), 26/5*(24+6), 33, 24);//调整.按钮的位置
jb_oper[27].setBounds(28%5*(33+6), 27/5*(24+6), 33, 24);//调整较好按钮的位置
jp.add(jptmp);
完整代码
—–
package com.lfd.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import com.lfd.common.Operator;
public class View extends JFrame implements ActionListener{
private JMenuBar jmb;
private JMenu jm_view,jm_edit,jm_help;
private JLabel jla_input,jla_show;
private JButton[] jb_oper = new JButton[28];
public View(){
initMenu();
initContent();
this.setTitle(“计算器”);//设置标题
this.setResizable(false);//不可改变大小
this.setLocationRelativeTo(null);//居中显示
this.setSize(228, 324);//窗体大小,可以使用FastStone Capture的屏幕尺量一下win计算器的大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认关闭操作
}
/**
* 初始化菜单方法
*/
private void initMenu(){
jmb = new JMenuBar();//创建菜单条
jm_view = new JMenu(“查看(V)”);//查看菜单
jm_view.setMnemonic(‘V’);//设置热键
jm_edit = new JMenu(“编辑(E)”);//编辑菜单
jm_edit.setMnemonic(‘E’);
jm_help = new JMenu(“帮助(H)”);//帮助菜单
jm_help.setMnemonic(‘H’);
jmb.add(jm_view);
jmb.add(jm_edit);
jmb.add(jm_help);
this.setJMenuBar(jmb);//将菜单条加入窗体中
}
/**
* 创建内容区域初始化方法
*/
private void initContent(){
//整个窗口区域
JPanel jp = new JPanel();
jp.setLayout(null);
//显示框区域
JPanel jptmp = new JPanel(){
//获取背景图片,使用截图工具从win计算器显示框中截取2像素宽度作为背景
Image bg = new ImageIcon(“imgs/bg.png”).getImage();
/**
* 填充结果显示区域的背景
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//x轴平铺满面板
for(int i = 0;ithis.getWidth();i+=bg.getWidth(this)){
g.drawImage(bg, i, 0, this);//绘制背景图片
}
}
};
//设置显示框上方小字体
Font font_lab = new Font(“arial”, Font.BOLD, 22);
jla_input = new JLabel();
jla_input.setText(“0”);
//设置字体右对齐
jla_input.setHorizontalAlignment(JLabel.RIGHT);
jla_input.setFont(font_lab);
//设置显示框中计算结果的字体
font_lab = new Font(“arial”, Font.BOLD, 10);
jla_show = new JLabel();
jla_show.setText(“sqrt”);
//设置字体右对齐
jla_show.setHorizontalAlignment(JLabel.RIGHT);
jla_show.setFont(font_lab);
//设置显示框区域的位置的大小
jptmp.setBounds(14, 15, 190, 50);
jptmp.setLayout(new BorderLayout());
jptmp.add(jla_show,BorderLayout.NORTH);
jptmp.add(jla_input,BorderLayout.CENTER);
//设置边框
jptmp.setBorder(BorderFactory.createLineBorder(new Color(142,156,173)));
jp.add(jptmp);
jptmp = new JPanel();
jptmp.setBounds(14, 72, 196,194);
jptmp.setLayout(null);
Font font_but = new Font(“arial”, Font.BOLD, 10);//创建按钮字体
for (int i = 0; i jb_oper.length; i++) {
jb_oper[i] = new JButton(Operator.labs[i]);//设置按钮文字
jb_oper[i].setForeground(new Color(30,57,91));//设置字体颜色
jb_oper[i].setActionCommand(Operator.values()[i].toString());//设置按钮标示
jb_oper[i].setFont(font_but);//设置按钮字体
jb_oper[i].setBounds(i%5*(33+6), i/5*(24+6), 33, 24);//统一33宽,24高,间距6,每5个换一行
jb_oper[i].setBorder(new LineBorder(new Color(135,151,170), 1));//设置按钮边框
jb_oper[i].addActionListener(this);//添加监听器
jptmp.add(jb_oper[i]);
}
jb_oper[24].setBounds(24%5*(33+6), 24/5*(24+6), 33, 24*2+6);//调整等号按钮位置
jb_oper[25].setBounds(25%5*(33+6), 25/5*(24+6), 33*2+6, 24);//调整0按钮的位置
jb_oper[26].setBounds(27%5*(33+6), 26/5*(24+6), 33, 24);//调整.按钮的位置
jb_oper[27].setBounds(28%5*(33+6), 27/5*(24+6), 33, 24);//调整较好按钮的位置
jp.add(jptmp);
this.setLayout(new BorderLayout());
this.add(jp,BorderLayout.CENTER);
}
public static void main(String[] args) {
new View().setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//TODO 实现逻辑操作
JButton jb = (JButton) e.getSource();
String commond = jb.getActionCommand();
}
}
—–
package com.lfd.common;
public enum Operator{
mC,mR,mS,mAdd,mSubtract,//mc,mr,ms,m+,m-
clBack,clError,clClear,operNegation,operSqrt,//-,ce,c,-/+,开平方
n7,n8,n9,operDivide,operPer,// /,%,
n4,n5,n6,operMultiply,operReciproc,//*,倒数
n1,n2,n3,operSubtract,operEqu,//-,=
n0,operDot,operAdd;//+
public static final String [] labs = new String[]{
“MC”,”MR”,”MS”,”M+”,”M-“,
“←”,”CE”,”C”,”±”,”√”,
“7”,”8″,”9″,”/”,”%”,
“4”,”5″,”6″,”*”,”1/x”,
“1”,”2″,”3″,”-“,”=”,
“0”,”.”,”+”
};
}
计算器制作JAVA版(第三步,表达式求值(+
1.首先思考一下制作计算器需要哪些Swing组件,下面列出一些制作计算器的一些常用组件:
JFrame Jpanel JButton JTextField
2.选用布局管理器:
这里采用的是GridBagLayout,即网格包布局管理器。
3.如何处理按钮事件:
这里可以分两种情况来考虑,一:处理0~9的数字按钮和”.”按钮,这种按钮的单击事件很简单,只需要获取监听的对象,并在文本框中显示对象的数据即可。
二:处理操作按钮即文本为+,-,*,/,C(清除),D(删除)和=的按钮,这些按钮的事件处理稍微复杂。
4.具体实现代码如下:
1.创建Calculator类,该类继承自JFrame类
[java] view plain copy
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField jtf=new JTextField();
private JPanel panel=new JPanel();
private GridBagLayout gridbaglayout=new GridBagLayout();
private GridBagConstraints constraints=new GridBagConstraints();
private int select=0;
// private String command=””;
private double temp=0.0;
private double number;
public Calculator(){ //创建Calculator类的构造方法
this.setTitle(“计算器”);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(jtf,BorderLayout.NORTH);
this.add(panel, BorderLayout.CENTER);
panel.setLayout(gridbaglayout); //将panel面板设置成网格包布局管理器
this.add(panel);
jtf.setHorizontalAlignment(JTextField.RIGHT); //文本靠右
ActionListener nums=new CalculatorAction1();
ActionListener opin=new CalculatorAction2();
constraints.fill=GridBagConstraints.BOTH;
// constraints.weightx=0.1;
// constraints.weighty=0.1;
constraints.gridheight=GridBagConstraints.REMAINDER;
addButton(“”,nums);
constraints.gridheight=1;
addButton(“C”,opin);
addButton(“7”,nums);
addButton(“4”,nums);
addButton(“1”,nums);
constraints.gridheight=GridBagConstraints.REMAINDER;
addButton(“%”,nums);
constraints.gridheight=1;
addButton(“D”,opin);
addButton(“8”,nums);
addButton(“5”,nums);
addButton(“2”,nums);
constraints.gridheight=GridBagConstraints.REMAINDER;
addButton(“0”,nums);
constraints.gridheight=1;
addButton(“/”,opin);
addButton(“9”,nums);
addButton(“6”,nums);
addButton(“3”,nums);
constraints.gridheight=GridBagConstraints.REMAINDER;
addButton(“.”,nums);
constraints.gridheight=1;
addButton(“*”,opin);
addButton(“-“,opin);
addButton(“+”,opin);
constraints.gridheight=GridBagConstraints.REMAINDER;
addButton(“=”,opin);
}
private void addButton(String str,ActionListener list){ //添加按钮方法
JButton button=new JButton(str);
if(str.equals(“”)||str.equals(“%”)){
button.setEnabled(false);
}
button.addActionListener(list); //向按钮添加事件
gridbaglayout.setConstraints(button, constraints);
panel.add(button); //将按钮添加到JPanel容器中
}
class CalculatorAction1 implements ActionListener{ //创建内部类并实现ActionListener接口,实现数字按钮的监听事件
public void actionPerformed(ActionEvent e){
String input = e.getActionCommand();
// System.out.println(input);
jtf.setText(jtf.getText()+input); //在文本中显示用户单击的按钮文本内容
}
}
class CalculatorAction2 implements ActionListener{ //创建内部类并实现ActionListener接口,实现操作按钮的监听事件
public void actionPerformed(ActionEvent e){
String command=e.getActionCommand();
if(command.equals(“+”)){
temp=Double.parseDouble(jtf.getText());
jtf.setText(“”);
select=1;
}
if(command.equals(“-“)){
temp=Double.parseDouble(jtf.getText());
jtf.setText(“”);
select=2;
}
if(command.equals(“*”)){
temp=Double.parseDouble(jtf.getText());
jtf.setText(“”);
select=3;
}
if(command.equals(“/”)){
temp=Double.parseDouble(jtf.getText());
jtf.setText(“”);
select=4;
}
if(command.equals(“C”)){
jtf.setText(“”);
}
if(command.equals(“D”)){
jtf.setText(jtf.getText().substring(0, jtf.getText().length()-1));
}
if(command.equals(“=”)){
if(select==1){
number=Double.parseDouble(jtf.getText());
jtf.setText((temp+number)+””);
}
else if(select==2){
number=Double.parseDouble(jtf.getText());
jtf.setText((temp-number)+””);
}
else if(select==3){
number=Double.parseDouble(jtf.getText());
jtf.setText((temp*number)+””);
}
else if(select==4){
number=Double.parseDouble(jtf.getText());
if(number==0){
JOptionPane.showMessageDialog(panel, “除数不能为0”);
}
else
jtf.setText((temp/number)+””);
}
}
}
}
}
2.创建CalculatorTest类
[java] view plain copy
public class CalculatorTest {
public static void main(String[] args) {
Calculator mainFrame=new Calculator();
mainFrame.setBounds(300, 200, 200, 200);
mainFrame.setVisible(true);
mainFrame.setResizable(false);
}
}
阅读全文
java如何设计四则计算器?
用一个栈,来存储所有元素
定义4种运算规则,在运算规则种进行对应的运算
分解输入的表达式,将每个字符都保存入栈中
当遇到运算符,从栈中找到前面的元素与后面的元素,进行对应的组合后,再保存入栈中
java表达式计算器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java计算数学表达式、java表达式计算器的信息别忘了在本站进行查找喔。