Java简易计算器
概要:这是一个简单的Java计算器示例
本计算器代码均未参考和复制任何现成的源代码,所有代码均为本超级菜鸟历经通宵所写。以下代码原本是为实现加、减、乘、除连 续运算以及按优先级运算所设计。目前成功实现了不同运算混合连续运算, 而若要实现按加、减、乘、除的优先级运算,只需增添少量代码即可。本人 对JAVA的学习水平不高,代码混乱,算法复杂、啰嗦,望各位见谅!
简单介绍
为了操作方便起见,本次编程在eclipse应用程序内进行:
- 导入相关Java类包
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
- 添加GUI组件与相关布局(部分代码示例如下):
JButton button;
JButton buttonzero=new JButton("0");
JButton surebutton=new JButton("清除");
JButton buttonend=new JButton("=");
JButton buttonadd=new JButton("+");
JButton buttoncut=new JButton("-");
JButton buttonmul=new JButton("×");
JButton buttonmod=new JButton("÷");
JTextField text=new JTextField();
- 为相关组件设置监听(部分代码示例如下):
for(int i=1;i<=9;i++){
String buttons=String.valueOf(i);
button=new JButton(buttons);
button.addActionListener(this);
panel1.add(button);
}
buttonzero.addActionListener(this);
panel1.add(buttonzero);
buttonadd.addActionListener(this);
panel1.add(buttonadd);
buttoncut.addActionListener(this);
panel1.add(buttoncut);
buttonmul.addActionListener(this);
panel1.add(buttonmul);
buttonmod.addActionListener(this);
panel1.add(buttonmod);
buttonend.addActionListener(this);
panel1.add(buttonend);
- 简易计算功能的实现(部分代码示例如下):
public void calculate(String s,Double num,Double save,boolean flag){
if(flag){
result=num;
flag=false;
}
if(!flag){
if(s.equals("+")){
result+=save;
text.setText(""+result);
System.out.println(result);
}
if(s.equals("-")){
result-=save;
System.out.println(result);
text.setText(""+result);
}
if(s.equals("×")){
result*=save;
text.setText(""+result);
System.out.println(result);
}
if(s.equals("÷")){
if(save==0.0){String msg=String.format("错误,分母为零!"); JOptionPane.showMessageDialog(this, msg);}
else{
result/=save;
System.out.println(result);
}
}
if(s.equals("=")){
text.setText(""+result);
}
}
}
效果图片
运算图片
所有代码
以下是上Java只有12次课菜鸟的悲哀
// 代码说明 //
// 本人郑重声明:本计算器代码均未参考和复制任何现成的源代码, //
//所有代码均为本人历经通宵所写。以下代码原本是为实现加、减、乘、除连 //
//续运算以及按优先级运算所设计。目前成功实现了不同运算混合连续运算, //
//而若要实现按加、减、乘、除的优先级运算,只需增添少量代码即可。本人 //
//对JAVA的学习水平不高,代码较为混乱,算法较为复杂、啰嗦,望各位谅解!//
package 上机实验2; //代码文件所在包名
//--代码运行时,可能输出报错信息,但不会影响计算器功能的实现。--//
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class CalculateWin extends JFrame implements ActionListener{
String str="";
String nu="";
int i=0;
boolean flag=true;
Double before[];
String array1[];
String array[];
Double store=0.0;
Double save=0.0;
Double value=null,num=0.0,result=0.0;
JButton button;
JButton buttonzero=new JButton("0");
JButton surebutton=new JButton("清除");
JButton buttonend=new JButton("=");
JButton buttonadd=new JButton("+");
JButton buttoncut=new JButton("-");
JButton buttonmul=new JButton("×");
JButton buttonmod=new JButton("÷");
JTextField text=new JTextField();
CalculateWin(){
init("便捷计算器");
setLocation(500,200);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(String s){
setTitle(s);
JPanel panel1=new JPanel();
panel1.setSize(800,100);
for(int i=1;i<=9;i++){
String buttons=String.valueOf(i);
button=new JButton(buttons);
button.addActionListener(this);
panel1.add(button);
}
buttonzero.addActionListener(this);
panel1.add(buttonzero);
buttonadd.addActionListener(this);
panel1.add(buttonadd);
buttoncut.addActionListener(this);
panel1.add(buttoncut);
buttonmul.addActionListener(this);
panel1.add(buttonmul);
buttonmod.addActionListener(this);
panel1.add(buttonmod);
buttonend.addActionListener(this);
panel1.add(buttonend);
buttonend.setBackground(Color.red);
buttonend.setForeground(Color.white);
GridLayout grid=new GridLayout(5,3,5,5);
GridLayout grid2=new GridLayout(1,2,5,5);
panel1.setLayout(grid);
add(panel1,BorderLayout.CENTER);
JPanel panel2=new JPanel();
text.setColumns(10);
panel2.add(text);
surebutton=new JButton("清除");
surebutton.addActionListener(this);
surebutton.setBackground(Color.pink);
panel2.add(surebutton);
panel2.setLayout(grid2);
add(panel2,BorderLayout.NORTH);
text.addActionListener(this);
}
public String clean(String s){
s="";
return s;
}
public void calculate(String s,Double num,Double save,boolean flag){
if(flag){
result=num;
flag=false;
}
if(!flag){
if(s.equals("+")){
result+=save;
text.setText(""+result);
System.out.println(result);
}
if(s.equals("-")){
result-=save;
System.out.println(result);
text.setText(""+result);
}
if(s.equals("×")){
result*=save;
text.setText(""+result);
System.out.println(result);
}
if(s.equals("÷")){
if(save==0.0){String msg=String.format("错误,分母为零!"); JOptionPane.showMessageDialog(this, msg);}
else{
result/=save;
System.out.println(result);
}
}
if(s.equals("=")){
text.setText(""+result);
}
}
}
public void actionPerformed(ActionEvent e){
if(!e.getActionCommand().equals("清除") ){
str=str+e.getActionCommand();
if(str.equals("+") || str.equals("-") || str.equals("×") || str.equals("÷") || str.equals("=")){String msg=String.format("运算数字不合法!请清空重新输入!"); JOptionPane.showMessageDialog(this, msg);}
text.setText(str); //在文本框输出监听到的除"清除"以外的所有按钮标签
array=str.split("[^\\d]"); //数组array用于存储运算数字
save=Double.parseDouble(array[array.length-1]); //save为最后一个数
num=Double.parseDouble(array[0]); //num为第一个数
array1=str.split("[\\d]"); //数组array1用于存储运算符
}
if(e.getActionCommand().equals("清除")){str=clean(str);text.setText(str);num=0.0;value=null;flag=true;array=null;array1=null;result=0.0;}
if(num==save && array==null && array1==null){ //如果只输入一个数,就不做运算
if(e.getActionCommand().equals("="))text.setText(""+Double.parseDouble(array[0]));
}
else if(!(num==save || array==null || array1==null)){ //不写会报错--点击清除会报错:说什么空指针
int k=0;
for(int j=0;j<=array1.length-1 && k+1<=array.length-1;++j){ //遍历array1中存储的运算符
while(array1[j].length()<=0)j+=1; //跳过array1得到的str用数字分割后的空字符
if(e.getActionCommand().equals("=") && k+1<=array.length-1){ //如果监听到了"=",执行计算
String store=array1[j];
calculate(store,Double.parseDouble(array[0]),Double.parseDouble(array[k+1]),flag); //运算
k=k+1; //以遍历array存储的所有数字
if(e.getActionCommand().equals("="))text.setText(""+result);
flag=false; //解决对result第一次赋值问题
}
if(e.getActionCommand().equals("="))text.setText(""+result);
}
}
}
}
public class task2 {
public static void main(String args[]){
CalculateWin calculatewin=new CalculateWin();
}
}
结语
代码虽烂,但含本人心血,未经本人允许,禁止转载或复制。希望这篇博客能够帮到您,如果不喜欢,望大佬海涵,请勿喷本超级菜鸟,谢谢!