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();
}
}
結語
代碼雖爛,但含本人心血,未經本人允許,禁止轉載或複製。希望這篇博客能夠幫到您,如果不喜歡,望大佬海涵,請勿噴本超級菜鳥,謝謝!