簡單的Java計算器示例

概要:這是一個簡單的Java計算器示例

本計算器代碼均未參考和複製任何現成的源代碼,所有代碼均爲本超級菜鳥歷經通宵所寫。以下代碼原本是爲實現加、減、乘、除連 續運算以及按優先級運算所設計。目前成功實現了不同運算混合連續運算, 而若要實現按加、減、乘、除的優先級運算,只需增添少量代碼即可。本人 對JAVA的學習水平不高,代碼混亂,算法複雜、囉嗦,望各位見諒!

簡單介紹

爲了操作方便起見,本次編程在eclipse應用程序內進行:

  1. 導入相關Java類包
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
  1. 添加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();
  1. 爲相關組件設置監聽(部分代碼示例如下):
     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);
  1. 簡易計算功能的實現(部分代碼示例如下):
   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();
	}
}

結語

代碼雖爛,但含本人心血,未經本人允許,禁止轉載或複製。希望這篇博客能夠幫到您,如果不喜歡,望大佬海涵,請勿噴本超級菜鳥,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章