📄 calc.java
字号:
package myfile;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color.*;
import java.awt.font.*;
import java.util.Random;
/**
*有需要的人可以联系本人qq:170900003
*or emailTO: chenquan9958@163.com
*本人自己做的 java表达式 计算器 带有界面的
*可以 计算 形如 1+2+(545.212-87987/5454)*45
*运算符号只能是+-*/()这些
*暂时没做其他的比如cos sin tg ctg等,但是估计够用了
*/
class DangBuCalc2 implements ActionListener{
Frame f;int j=1;
Panel p1,p2;
Label lab1,lab2;
JTextArea tf1=new JTextArea(1,15);
JLabel jlb1=new JLabel("式子");
TextField tf2,tf3;
Button[] btn=new Button[17];
Button btnmc,btnmr,btnms,btnmand,btnsqrt,btnmod,btndao,btnfuh;
Button btnbackspace,btnc,btnout;
double a1=0,a2;
String ans,suans;
String zifu[]=new String[100];
double shuju[]=new double[100];
//creat the pane
void creat(){
Random r=new Random();
int shu=1;
f=new Frame("表达式运算器");
f.setSize(240,300);
p1=new Panel();p1.resize(new Dimension(290,30));
p2=new Panel();p2.resize(new Dimension(290,30));
lab2=new Label("结果");lab2.resize(10,10);
tf1.setBackground(java.awt.Color.getHSBColor(77,33,22));
tf1.resize(60,10);tf1.setFont(new Font("",java.awt.Font.BOLD,13));
tf1.setForeground(java.awt.Color.RED);
tf2=new TextField(19);tf2.setBackground(java.awt.Color.getHSBColor(77,33,22));
tf2.resize(20,10);tf2.setText("0");
tf3=new TextField(2);tf3.setBackground(java.awt.Color.getHSBColor(r.nextFloat(),r.nextFloat(),r.nextFloat()));
tf3.resize(35,25);
//name btn and set size and set others configure
for(;shu<10;shu++) btn[shu]=new Button(""+shu);
btn[10]=new Button("0");
btn[11]=new Button(".");
btn[12]=new Button("+");
btn[13]=new Button("-");
btn[14]=new Button("*");
btn[15]=new Button("/");
btn[16]=new Button("=");
for(shu=1;shu<17;shu++){
btn[shu].resize(35,25);
btn[shu].setForeground(java.awt.Color.BLUE);
}
btnsqrt=new Button("sqrt");btnsqrt.resize(35,25);btnsqrt.setForeground(java.awt.Color.red);
btnmod=new Button("%");btnmod.resize(35,25);btnmod.setForeground(java.awt.Color.red);
btndao=new Button("1/x");btndao.resize(35,25);btndao.setForeground(java.awt.Color.red);
btnfuh=new Button("+/-");btnfuh.resize(35,25);btnfuh.setForeground(java.awt.Color.red);
btnmc=new Button("(");btnmc.resize(35,25);btnmc.setForeground(java.awt.Color.red);
btnmr=new Button(")");btnmr.resize(35,25);btnmr.setForeground(java.awt.Color.red);
btnms=new Button("M-");btnms.resize(35,25);btnms.setForeground(java.awt.Color.red);
btnmand=new Button("M+");btnmand.resize(35,25);btnmand.setForeground(java.awt.Color.red);
btnbackspace=new Button("Backspace");btnbackspace.resize(80,25);btnbackspace.setForeground(java.awt.Color.red);
btnc=new Button("C");btnc.resize(35,25);btnc.setForeground(java.awt.Color.red);
btnout=new Button("out");btnout.resize(60,25);btnout.setForeground(java.awt.Color.red);
//name btn and set size and set others configure
//add btn's ActionListener
for(shu=1;shu<17;shu++){
btn[shu].addActionListener(this);
}
btnsqrt.addActionListener(this);
btnmod.addActionListener(this);
btndao.addActionListener(this);
btnfuh.addActionListener(this);
btnmc.addActionListener(this);
btnmr.addActionListener(this);
btnms.addActionListener(this);
btnmand.addActionListener(this);
btnbackspace.addActionListener(this);
btnc.addActionListener(this);
btnout.addActionListener(this);
//add btn's ActionListener
//set location for buttons and add them to f
f.add(btnbackspace);btnbackspace.setLocation(20,100);
f.add(btnout);btnout.setLocation(110,100);
f.add(tf3);tf3.setLocation(180,100);
f.add(btn[7]);btn[7].setLocation(20,130);
f.add(btn[8]);btn[8].setLocation(60,130);
f.add(btn[9]);btn[9].setLocation(100,130);
f.add(btn[15]);btn[15].setLocation(140,130);
f.add(btnsqrt);btnsqrt.setLocation(180,130);
f.add(btn[4]);btn[4].setLocation(20,160);
f.add(btn[5]);btn[5].setLocation(60,160);
f.add(btn[6]);btn[6].setLocation(100,160);
f.add(btn[14]);btn[14].setLocation(140,160);
f.add(btnmod);btnmod.setLocation(180,160);
f.add(btn[1]);btn[1].setLocation(20,190);
f.add(btn[2]);btn[2].setLocation(60,190);
f.add(btn[3]);btn[3].setLocation(100,190);
f.add(btn[13]);btn[13].setLocation(140,190);
f.add(btndao);btndao.setLocation(180,190);
f.add(btn[10]);btn[10].setLocation(20,220);
f.add(btn[11]);btn[11].setLocation(60,220);
f.add(btnfuh);btnfuh.setLocation(100,220);
f.add(btn[12]);btn[12].setLocation(140,220);
f.add(btn[16]);btn[16].setLocation(180,220);
f.add(btnmc);btnmc.setLocation(20,250);
f.add(btnmr);btnmr.setLocation(60,250);
f.add(btnms);btnms.setLocation(100,250);
f.add(btnmand);btnmand.setLocation(140,250);
f.add(btnc);btnc.setLocation(180,250);
//set location for buttons and add them to f
p1.add(jlb1);p1.add(tf1);p2.add(lab2);p2.add(tf2);
f.add(p1,"North");f.add(p2,"Center");
f.setBackground(java.awt.Color.pink);
f.setVisible(true);
f.setResizable(false);
// f.setDefaultClostOperation(EXIT_ON_CLOSE);
}
//check the input is accept or no 检测输入合法性
boolean check(String suans){
boolean b=true;
int LeftKNum=0,RightKNum=0;
int i,j=0;
//检验输入是否为空
if(suans.length()<1){
b=false;
tf2.setText("Error! Nothing !");
}
//检验输入是否为空
//检验输入的()个数是否匹配和是否有连续两个点
wrongInput:for(i=0;i<suans.length();i++){
// System.out.println("正在记录()符号个数");
if( suans.substring(i,i+1).equals("(")){
LeftKNum++;
if( suans.substring(i+1,i+2).equals(".")||
suans.substring(i+1,i+2).equals("+")||
suans.substring(i+1,i+2).equals("*")||
suans.substring(i+1,i+2).equals("/")){
tf2.setText("Error! '(.' or '(+' or '(*' or '(/' error !");
LeftKNum=RightKNum;
b=false;
break wrongInput;
}
}
if( suans.substring(i,i+1).equals(")")) {
if(b==true)
RightKNum++;
}
if( suans.substring(i,i+1).equals(".")) {
if( suans.substring(i+1,i+2).equals(".")){
tf2.setText("Error! Too many ... !");
b=false;
}
}
}
if (!(LeftKNum==RightKNum)) {
tf2.setText("Error! ( ) don't match !");
b=false;
}
//检验输入的()个数是否匹配和是否有连续两个点
return b;
}
//消除算式中的()
void clear(String suans){
int kuohao=0,khxiabiao=0;
int i,j=0;
int LeftKNum=0;
String x;
for(i=0;i<suans.length();i++){
if( suans.substring(i,i+1).equals("(")){
LeftKNum++;
}
}
for(;j<LeftKNum;j++)
for(i=0;i<suans.length();i++){
// System.out.println("正在检查()符号");
if( suans.substring(i,i+1).equals("(")){
// System.out.println("检查到(符号");
khxiabiao=i;
for(;i<suans.length();i++){
if(suans.substring(i,i+1).equals("(")){
khxiabiao=i;
}
else if(suans.substring(i,i+1).equals(")")){
// System.out.println("检查到)符号");
System.out.println(suans.substring(khxiabiao+1,i));
x=jisuan(suans.substring(khxiabiao+1,i));
System.out.println("x="+x);
suans=suans.substring(0,khxiabiao)+x+suans.substring(i+1,suans.length());
System.out.println(suans);
i=khxiabiao;
break;
}
}
}
}
jisuan(suans);
// jta.append(tf1.getText()+"="+tf2.getText()+"\n");
}
//表达式计算的方法
String jisuan(String suans){
int i,yxiabiao=0,dataXiaBiao=1,fuhaoNums=0,chengchuNums=0;//数据下标从1开始 字符则是从2开始
//先提取符号前的数据和字符
/**************核心提取数据和符号的算法*************************
*没检测到符号就 i+1
*检测到有符号就存储之前的数据 再存储符号
*接着记录符号个书和*\号个数
*同时记录当前下标到yxiabiao中去
*之后i+=2 就是跳个一个数检测下一个 这样速度更快*
*最后提取最后个符号之后的数据
/**************核心提取数据和符号的算法*************************/
for(i=0;i<suans.length();){
if( suans.substring(i,i+1).equals("+") || suans.substring(i,i+1).equals("-") ||
suans.substring(i,i+1).equals("*") || suans.substring(i,i+1).equals("/")){
//判断第一个数据是否是-号
if(!(i==0)){
if(suans.substring(i,i+1).equals("*") || suans.substring(i,i+1).equals("/")){
chengchuNums++;//记录/*个数
}
fuhaoNums++; //记录总符号数
shuju[dataXiaBiao++]=Double.parseDouble(suans.substring(yxiabiao,i)); //存储数据到shuju中
zifu[dataXiaBiao++]=suans.substring(i,i+1); //把符号存到zifu中
yxiabiao=i+1;
i+=2;
}else {
//第一个是-号后再判断第2个是否是-号 是的话忽略两个负号
if( suans.substring(i+1,i+2).equals("-")){
yxiabiao=i+2;
i+=2;
}else {
i++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -