用java寫一個簡單計算器(用java做一個簡單的計算器)

本文目錄一覽:

怎麼用JAVA編程編寫一個計算器?

打開IED:打開自己java編程的軟件,採用的是eclipse軟件。

建立java工程。

編寫類。

編寫類的詳細步驟

1.類的基本結構:

由於這裡用到了界面,所以要進行窗口界面的編程,按鈕事件的處理,和計算處理界面;

package MyCaculator;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyCaculator extends JFrame {

private int add=1,sub=2,mul=3,div=4;

private int op=0;

boolean ifOp;

private String output=”0″;

private Button[] jba=new Button[]{new Button(“7”),new Button(“8”),

new Button(“9”),new Button(“+”),

new Button(“4”),new Button(“5”),new Button(“6”),new Button(“-“),

new Button(“1”),new Button(“2”),new Button(“3”),new Button(“*”),

new Button(“0”),new Button(“.”),new Button(“=”),new Button(“/”)};

private JPanel jpt=new JPanel();

private JPanel jpb=new JPanel();

private JTextField jtf=new JTextField(“”);

private MyCaculator(){

}

private void operate(String x){

}

public String add(String x){

return output;

}

public String subtract(String x){

return output;

}

public String multiply(String x){

return output;

}

public String divide(String x){

return output;

}

public String Equals(String x){

return output;

}

public void opClean(){

}

class setOperate_Act implements ActionListener{

public void actionPerformed(ActionEvent e) {

}

}

class setLabel_Act implements ActionListener{

public void actionPerformed(ActionEvent e) {

}

}

public static void main(String[] args) {

}

}

2.建立構造方法:

所謂構造方法就是,對自己的主類進行初始化,代碼如下:

private MyCaculator(){

jpt.setLayout(new BorderLayout());

jpt.add(jtf);

this.add(jpt,BorderLayout.NORTH);

jpb.setLayout(new GridLayout(4,4));

for(int i=0;ijba.length;i++){

jpb.add(jba[i]);

if(i==3||i==7||i==11||i==15||i==14)

jba[i].addActionListener(new setOperate_Act());

else

jba[i].addActionListener(new setLabel_Act());

}

this.add(jpb,BorderLayout.CENTER);

this.setSize(250, 200);

this.setResizable(false);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

3.建立數據計算方法

這裡的數據計算方法有6個,一個是主方法其他幾個是加減乘除的處理方法,代碼如下:

private void operate(String x){

double x1=Double.valueOf(x);

double y=Double.valueOf(output);

switch(op){

case 0:output=x;break;

case 1:output=String.valueOf(y+x1);break;

case 2:output =String.valueOf(y-x1);break;

case 3:output =String.valueOf(y*x1);break;

case 4:

if(x1!=0) output=String.valueOf(y/x1);

else output=”不能為0″;

break;

}

}

public String add(String x){

operate(x);

op=add;

return output;

}

public String subtract(String x){

operate(x);

op=sub;

return output;

}

public String multiply(String x){

operate(x);

op=mul;

return output;

}

public String divide(String x){

operate(x);

op=div;

return output;

}

public String Equals(String x){

operate(x);

op=0;

return output;

}

public void opClean(){

op=0;

output =”0″;

}

4.事件處理方法

這裡的時間處理方法,沒有建立一個整體的方法,二是在為了便於處理的方法,將按鈕事件分成兩個部分,並採用兩個子類來實現,這兩個類時內部類要寫在主類內部的,代碼如下:

class setOperate_Act implements ActionListener{

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jba[3]){

jtf.setText(add(jtf.getText()));

ifOp=true;

}

else if(e.getSource()==jba[7]){

jtf.setText(subtract(jtf.getText()));

ifOp=true;

}

else if(e.getSource()==jba[11]){

jtf.setText(multiply(jtf.getText()));

ifOp=true;

}

else if(e.getSource()==jba[15]){

jtf.setText(divide(jtf.getText()));

ifOp=true;

}

else if(e.getSource()==jba[14]){

jtf.setText(Equals(jtf.getText()));

ifOp=true;

}

}

}

class setLabel_Act implements ActionListener{

public void actionPerformed(ActionEvent e) {

Button tempb=(Button)e.getSource();

if(ifOp){

jtf.setText(tempb.getLabel());

ifOp=false;

}else {

jtf.setText(jtf.getText()+tempb.getLabel());

}

}

}

5.建立main方法:

要想實現我們的代碼,我們需在main方法中,實例化我們的對象。

public static void main(String[] args) {

new MyCaculator();

}

用JAVA編寫一個計算器

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.SwingConstants;

public class Jisuanqi extends JFrame implements ActionListener {

/**

 *

 */

private static final long serialVersionUID = 1L;

Result result = new Result(); // 定義text的面板

Number_Key number_key = new Number_Key(); // 定義按鈕面板

// 當點擊按鈕+、-、*、/時,com = true

boolean com = false;

// 當i=0時說明是我們第一次輸入,字符串text不會累加

int i = 0;

// 存放text的內容

String text = “”;

// 存放點擊按鈕+、-、*、/之前的數值

double defbutton = 0;

// +、-、*、/的代號分別為1,2,3,4

int symbol = 0;

// 構造函數

Jisuanqi() {

super(“WangJiao”); // 設定標題

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設定關閉窗體時退出程序

JPanel pane = new JPanel(); // 定義主面板

pane.setLayout(new BorderLayout());

setBounds(380, 220, 30, 80); // 前兩個參數是在屏幕上顯示的坐標,後兩個是大小

// 替換圖標

ImageIcon icon = new ImageIcon(“F:1.GIF”);

// Jisuanqi.class.getResource(“APPLE.GIF”)

// );

setIconImage(icon.getImage());

pane.add(result, BorderLayout.NORTH);

pane.add(number_key, BorderLayout.CENTER);

pane.add(number_key.equal, BorderLayout.SOUTH);

number_key.one.addActionListener(this); // 對1按鈕添加監聽事件

number_key.two.addActionListener(this); // 對2按鈕添加監聽事件

number_key.three.addActionListener(this); // 對3按鈕添加監聽事件

number_key.four.addActionListener(this); // 對4按鈕添加監聽事件

number_key.five.addActionListener(this); // 對5按鈕添加監聽事件

number_key.six.addActionListener(this); // 對6按鈕添加監聽事件

number_key.seven.addActionListener(this); // 對7按鈕添加監聽事件

number_key.eight.addActionListener(this); // 對8按鈕添加監聽事件

number_key.nine.addActionListener(this); // 對9按鈕添加監聽事件

number_key.zero.addActionListener(this); // 對0按鈕添加監聽事件

number_key.ce.addActionListener(this); // 對置零按鈕添加監聽事件

number_key.plus.addActionListener(this); // 對+按鈕添加監聽事件

number_key.equal.addActionListener(this); // 對=按鈕添加監聽事件

number_key.sub.addActionListener(this); // 對-按鈕添加監聽事件

number_key.mul.addActionListener(this); // 對*按鈕添加監聽事件

number_key.div.addActionListener(this); // 對/按鈕添加監聽事件

number_key.point.addActionListener(this); // 對.按鈕添加監聽事件

setContentPane(pane);

pack(); // 初始化窗體大小為正好盛放所有按鈕

}

// 各個按鈕觸發的事件

public void actionPerformed(ActionEvent e) {

/*

 * 如果是點擊數字按鈕那麼先要判斷是否在此之前點擊了+、-、*、/、=,如果是那麼com=true 如果沒有com=

 * false;或者是否點擊數字鍵,如果是i = 1,如果沒有 i = 0;

 */

if (e.getSource() == number_key.one) {

if (com || i == 0) {

result.text.setText(“1”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “1”);

}

} else if (e.getSource() == number_key.two) {

if (com || i == 0) {

result.text.setText(“2”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “2”);

}

} else if (e.getSource() == number_key.three) {

if (com || i == 0) {

result.text.setText(“3”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “3”);

}

} else if (e.getSource() == number_key.four) {

if (com || i == 0) {

result.text.setText(“4”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “4”);

}

} else if (e.getSource() == number_key.five) {

if (com || i == 0) {

result.text.setText(“5”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “5”);

}

} else if (e.getSource() == number_key.six) {

if (com || i == 0) {

result.text.setText(“6”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “6”);

}

} else if (e.getSource() == number_key.seven) {

if (com || i == 0) {

result.text.setText(“7”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “7”);

}

} else if (e.getSource() == number_key.eight) {

if (com || i == 0) {

result.text.setText(“8”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “8”);

}

} else if (e.getSource() == number_key.nine) {

if (com || i == 0) {

result.text.setText(“9”);

com = false;

i = 1;

} else {

text = result.text.getText();

result.text.setText(text + “9”);

}

}

/*

 * 對於0這個按鈕有一定的說法,在我的程序里不會出現如00000這樣的情況,我加了判斷條件就是

 * 如果text中的數值=0就要判斷在這個數值中是否有.存在?如果有那麼就在原來數值基礎之上添 加0;否則保持原來的數值不變

 */

else if (e.getSource() == number_key.zero) { // result.text.getText()是得到text里內容的意思

if (com || i == 0) {

result.text.setText(“0”);

com = false;

i = 1;

} else {

text = result.text.getText();

if (Float.parseFloat(text)  0 || Float.parseFloat(text)  0) { // Float.parseFloat(text)就是類型轉換了,下面都是一樣

result.text.setText(text + “0”);

} else {

if (text.trim().indexOf(“.”) == -1) {

result.text.setText(text);

} else {

result.text.setText(text + “0”);

}

}

}

} else if (e.getSource() == number_key.ce) {

result.text.setText(“0”);

i = 0;

com = true;

// text = “”;

defbutton = 0;

}

/*

 * 本程序不會讓一個數值中出現2個以上的小數點.具體做法是:判斷是否已經存在.存在就不添加, 不存在就添加.

 */

else if (e.getSource() == number_key.point) {

if (com || i == 0) {

result.text.setText(“0.”);

com = false;

i = 1;

} else {

text = result.text.getText();

if (text.trim().indexOf(“.”) == -1) {

result.text.setText(text + “.”);

} else {

result.text.setText(text);

}

}

} // 獲得點擊+之前的數值

else if (e.getSource() == number_key.plus) {

com = true;

i = 0;

defbutton = Double.parseDouble(result.text.getText());

symbol = 1;

} // 獲得點擊-之前的數值

else if (e.getSource() == number_key.sub) {

com = true;

i = 0;

defbutton = Double.parseDouble(result.text.getText());

symbol = 2;

} // 獲得點擊*之前的數值

else if (e.getSource() == number_key.mul) {

com = true;

i = 0;

defbutton = Double.parseDouble(result.text.getText());

System.out.println(defbutton);

symbol = 3;

} // 獲得點擊/之前的數值

else if (e.getSource() == number_key.div) {

com = true;

i = 0;

defbutton = Double.parseDouble(result.text.getText());

symbol = 4;

} else if (e.getSource() == number_key.equal) {

switch (symbol) {

case 1: { // 計算加法

double ad = defbutton

+ Double.parseDouble(result.text.getText());

result.text.setText(ad + “”);

i = 0;

text = “”;

break;

}

case 2: { // 計算減法

double ad = defbutton

– Double.parseDouble(result.text.getText());

result.text.setText(String.valueOf(ad));

i = 0;

text = “”;

break;

}

case 3: { // 計算乘法

double ad = defbutton

* Double.parseDouble(result.text.getText());

result.text.setText(ad + “”);

i = 0;

text = “”;

break;

}

case 4: { // 計算除法

double ad = defbutton

/ Double.parseDouble(result.text.getText());

result.text.setText(ad + “”);

i = 0;

text = “”;

break;

}

}

System.out.println(com);

}

System.out.println(result.text.getText());

}

@SuppressWarnings(“deprecation”)

public static void main(String[] args) {

Jisuanqi loveyou = new Jisuanqi();

loveyou.show();

}

}

// 計算器數字按鈕定義面板

class Number_Key extends JPanel {

/**

 *

 */

private static final long serialVersionUID = 1L;

JButton zero = new JButton(“0”); // 數字鍵0

JButton one = new JButton(“1”); // 數字鍵1

JButton two = new JButton(“2”); // 數字鍵2

JButton three = new JButton(“3”); // 數字鍵3

JButton four = new JButton(“4”); // 數字鍵4

JButton five = new JButton(“5”); // 數字鍵5

JButton six = new JButton(“6”); // 數字鍵6

JButton seven = new JButton(“7”); // 數字鍵7

JButton eight = new JButton(“8”); // 數字鍵8

JButton nine = new JButton(“9”); // 數字鍵9

JButton plus = new JButton(“+”);

JButton sub = new JButton(“-“);

JButton mul = new JButton(“*”);

JButton div = new JButton(“/”);

JButton equal = new JButton(“=”);

JButton ce = new JButton(“清零”); // 置零鍵

JButton point = new JButton(“.”);

Number_Key() {

setLayout(new GridLayout(4, 4, 1, 1)); // 定義布局管理器為網格布局

setBackground(Color.blue); // 設置背景顏色

// 添加按鈕

add(one);

add(two);

add(three);

add(four);

add(five);

add(six);

add(seven);

add(eight);

add(nine);

add(zero);

add(plus);

add(sub);

add(mul);

add(div);

add(point);

add(equal);

add(ce);

}

}

// 計算器顯示結果的窗體

class Result extends JPanel {

/**

 *

 */

private static final long serialVersionUID = 1L;

// text先是輸入和結果

JTextField text = new JTextField(“0”);

@SuppressWarnings(“deprecation”)

Result() { // 講輸入的數字或得到的結果在text的右邊顯示

text.setHorizontalAlignment(SwingConstants.RIGHT);

text.enable(false); // 文本框不能編輯

setLayout(new BorderLayout()); // 設定布局管理器邊框布局

add(text, BorderLayout.CENTER); // text放置在窗體的中間

}

}

直接複製 保存成Jisuanqi .java可以直接運行了

用JAVA編寫一個簡單的計算器,要求如下

然後 通過輸入 顯示結果,比如說:

以下是上圖計算器的代碼:

package Computer;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Stack;

import javax.swing.JApplet;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Count extends JApplet implements ActionListener

{

/**

*

*/

private static final long serialVersionUID = 1L;

private JTextField textField = new JTextField(“請輸入”);

String operator = “”;//操作

String input = “”;//輸入的 式子

boolean flag =  true;

//  boolean flag1 = true;

//  boolean flag2 = true;

public void init()//覆寫Applet裡邊的init方法

{

Container C = getContentPane();

JButton b[] = new JButton[16];

JPanel panel = new JPanel();

C.add(textField, BorderLayout.NORTH);

C.add(panel,BorderLayout.CENTER);

panel.setLayout(new GridLayout(4, 4,5,5));

String name[]={“7″,”8″,”9″,”+”,”4″,”5″,”6″,”-“,”1″,”2″,”3″,”*”,”0″,”C”,”=”,”/”};//設置 按鈕

for(int i=0;i16;i++)//添加按鈕

{

b[i] = new JButton(name[i]);

b[i].setBackground(new Color(192,192,192));

b[i].setForeground(Color.BLUE);//數字鍵 設置為 藍顏色

if(i%4==3)

b[i].setForeground(Color.RED);

b[i].setFont(new Font(“宋體”,Font.PLAIN,16));//設置字體格式

panel.add(b[i]);

b[i].addActionListener(this);

}

b[13].setForeground(Color.RED);//非數字鍵,即運算鍵設置為紅顏色

b[13].setForeground(Color.RED);

}

public void actionPerformed(ActionEvent e)

{

int cnt = 0;

String actionCommand = e.getActionCommand();

if(actionCommand.equals(“+”)||actionCommand.equals(“-“)||actionCommand.equals(“*”) ||actionCommand.equals(“/”))

input +=” “+actionCommand+” “;//設置輸入,把輸入的樣式改成 需要的樣子

else if(actionCommand.equals(“C”))

input = “”;

else if(actionCommand.equals(“=”))//當監聽到等號時,則處理 input

{

input+= “=”+compute(input);

textField.setText(input);

input=””;

cnt = 1;

}

else

input += actionCommand;//數字為了避免多位數的輸入 不需要加空格

if(cnt==0)

textField.setText(input);

}

private String compute(String input)//即1237 的 樣例

{

String str[];

str = input.split(” “);

StackDouble s = new StackDouble();

double m = Double.parseDouble(str[0]);

s.push(m);

for(int i=1;istr.length;i++)

{

if(i%2==1)

{

if(str[i].compareTo(“+”)==0)

{

double help = Double.parseDouble(str[i+1]);

s.push(help);

}

if(str[i].compareTo(“-“)==0)

{

double help = Double.parseDouble(str[i+1]);

s.push(-help);

}

if(str[i].compareTo(“*”)==0)

{

double help = Double.parseDouble(str[i+1]);

double ans = s.peek();//取出棧頂元素

s.pop();//消棧

ans*=help;

s.push(ans);

}

if(str[i].compareTo(“/”)==0)

{

double help = Double.parseDouble(str[i+1]);

double ans = s.peek();

s.pop();

ans/=help;

s.push(ans);

}

}

}

double ans = 0d;

while(!s.isEmpty())

{

ans+=s.peek();

s.pop();

}

String result = String.valueOf(ans);

return result;

}

public static void main(String args[])

{

JFrame frame = new JFrame(“Count”);

Count applet = new Count();

frame.getContentPane().add(applet, BorderLayout.CENTER);

applet.init();//applet的init方法

applet.start();//線程開始

frame.setSize(350, 400);//設置窗口大小

frame.setVisible(true);//設置窗口可見

}

}

原創文章,作者:KCXK6,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128671.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KCXK6的頭像KCXK6
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29

發表回復

登錄後才能評論