网站首页 > 文章中心 > 其它

java全面的计算器代码

作者:小编 更新时间:2023-09-29 18:49:13 浏览量:431人看过

计算器java代码

import java.awt.Color;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.WindowConstants;

import javax.swing.border.LineBorder;

class Normal{

double i,j;

i=num1;

}

public double puls(){

return i◆j;

public double subtract(){

return i-j;

public double multiply(){

return i*j;

return i/j;

public double surpuls(){

return i%j;

class scientific extends Normal{

public class calc extends JFrame{

public static void main(String[] args) {

viewNormal VN= new viewNormal("normal");

class viewNormal extends JFrame implements ActionListener{

JLabel jl;

JButton[] jb;

JButton jbs,jbo,jba,jbb,jbc,jby;

StringBuffer sb = new StringBuffer();

Normal normal;

int dot=0;

double fnum=0;

double lnum=0;

double result;

String sign=null;

public viewNormal(String title){

setTitle(title);

setLayout(null);

setVisible(true);

setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

jb[i]=new JButton(""◆(i◆1));

jp1.add(jb[i]);

jb[i].addActionListener(this);

jb[10]=new JButton("0");

jb[11]=new JButton("=");

jb[10].addActionListener(this);

jb[11].addActionListener(this);

jp1.add(jb[10]);

jp1.add(jb[11]);

jbs= new JButton("◆");jbo= new JButton("-");jba= new JButton("*");

jbb= new JButton("/");jby= new JButton("%");jbc= new JButton("C");

jbs.addActionListener(this);jbo.addActionListener(this);jba.addActionListener(this);

jbb.addActionListener(this);jby.addActionListener(this);jbc.addActionListener(this);

jl= new JLabel("0",JLabel.RIGHT);

jl.setBackground(Color.white);

jl.setOpaque(true);

add(jl);

add(jp1);

//◆

public void sum(){

lnum=Double.parseDouble(sb.toString());

normal=new Normal(fnum,lnum);

fnum=normal.puls();

result=fnum;

//-

private void sub() {

System.out.println(sb.toString());

fnum=normal.subtract();

//*

private void mul() {

fnum=normal.multiply();

// /

//%

private void sur() {

fnum=normal.surpuls();

// =

private void same(){

if(sign.equals("◆")){

sum();

if(sign.equals("-")){

sub();

if(sign.equals("*")){

mul();

if(sign.equals("/")){

if(sign.equals("%")){

sur();

//result

public void Result(){

if(result%1!=0)

jl.setText(""◆result);

else

{

int i=(int)result;

jl.setText(""◆i);

@Override

public void actionPerformed(ActionEvent e) {

//System.out.println(sb.toString());

if(e.getSource()==jb[i]!sb.toString().equals("0")){

sb.append(jb[i].getText());

jl.setText(sb.toString());

else if(e.getSource()==jb[i]sb.toString().equals("0")){

int d=sb.length();

sb.delete(0, d);

// 0

if(e.getSource()==jb[10]!sb.toString().equals("0")){

sb.append(jb[10].getText());

// .

dot◆◆;

// =

if(e.getSource()==jb[11]!sb.toString().equals("")){

same();

Result();

dot=0;

// ◆

if(e.getSource()==jbs!sb.toString().equals("")){

if(sign!="◆"sign!=null)

sign ="◆";

if(e.getSource()==jbo!sb.toString().equals("")){

if(fnum==0)

if(sign!="-"sign!=null)

sign ="-";

if(e.getSource()==jba!sb.toString().equals("")){

fnum=1;

if(sign!="*"sign!=null)

sign ="*";

// /

if(e.getSource()==jbb!sb.toString().equals("")){

if(sign!="/"sign!=null)

sign ="/";

// if(e.getSource()==jby!sb.toString().equals("")){

// if(fnum==0){

// fnum=Double.parseDouble(sb.toString());

// result=fnum;

// }

// else {

// if(sign!="%"sign!=null)

// same();

// else{

// lnum=Double.parseDouble(sb.toString());

// normal=new Normal(fnum,lnum);

// fnum=normal.surpuls();

// }

// sign ="%";

// Result();

// int d=sb.length();

// sb.delete(0, d);

// dot=0;

// }

//clear

if(e.getSource()==jbc){

jl.setText("0");

fnum=0;

lnum=0;

sign=null;

class viewScientific extends viewNormal{

public viewScientific(String title){

super(title);

//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的.

java 计算器代码

import javax.swing.*;

import javax.swing.border.Border;

import java.awt.*;

import java.math.BigDecimal;

import java.math.RoundingMode;

import java.util.HashMap;

/**

* 我的计算器.Cheshi 继承于 JFrame,是计算器的界面

c*/

public class Cheshi extends JFrame {

private JTextField textbox = new JTextField("0");

private CalculatorCore core = new CalculatorCore();

private ActionListener listener = new ActionListener() {

JButton b = (JButton) e.getSource();

String label = b.getText();

String result = core.process(label);

textbox.setText(result);

};

public Cheshi(String title) throws HeadlessException {

super(title); // 调用父类构造方法

setupFrame(); // 调整窗体属性

setupControls(); // 创建控件

private void setupControls() {

setupDisplayPanel(); // 创建文本面板

setupButtonsPanel(); // 创建按钮面板

// 创建按钮面板并添加按钮

private void setupButtonsPanel() {

JPanel panel = new JPanel();

panel.setBorder(border);

createButtons(panel, new String[]{

"0", ".", "=", "/", ""

});

this.add(panel, BorderLayout.CENTER);

* 在指定的面板上创建按钮

*

* @param panel 要创建按钮的面板

* @param labels 按钮文字

*/

private void createButtons(JPanel panel, String[] labels) {

for (String label : labels) {

// 如果 label 为空,则表示创建一个空面板.否则创建一个按钮.

if (label.equals("")) {

panel.add(new JPanel());

} else {

JButton b = new JButton(label);

b.addActionListener(listener); // 为按钮添加侦听器

panel.add(b);

// 设置显示面板,用一个文本框来作为计算器的显示部分.

private void setupDisplayPanel() {

panel.setLayout(new BorderLayout());

setupTextbox();

panel.add(textbox, BorderLayout.CENTER);

this.add(panel, BorderLayout.NORTH);

// 调整文本框

private void setupTextbox() {

textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐

textbox.setEditable(false); // 文本框只读

textbox.setBackground(Color.white); // 文本框背景色为白色

// 调整窗体

private void setupFrame() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束

this.setResizable(false); // 窗体大小固定

// 程序入口

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Cheshi frame = new Cheshi("我的计算器");

frame.setVisible(true); // 在桌面上显示窗体

class CalculatorCore {

boolean reset = true;

private String operator;

private HashMapString, Operator operators = new HashMapString, Operator();

private HashMapString, Processor processors = new HashMapString, Processor();

CalculatorCore() {

setupOperators();

setupProcessors();

// 为每种命令添加处理方式

private void setupProcessors() {

public void calculate(String command) {

numberClicked(command);

processors.put("\\.", new Processor() {

dotClicked();

processors.put("=", new Processor() {

equalsClicked();

processors.put("[◆\\-*/]", new Processor() {

operatorClicked(command);

processors.put("C", new Processor() {

clearClicked();

processors.put("CE", new Processor() {

clearErrorClicked();

// 为每种 operator 添加处理方式

private void setupOperators() {

operators.put("◆", new Operator() {

operators.put("-", new Operator() {

operators.put("*", new Operator() {

operators.put("/", new Operator() {

// 根据命令处理.这里的命令实际上就是按钮文本.

public String process(String command) {

for (String pattern : processors.keySet()) {

if (command.matches(pattern)) {

processors.get(pattern).calculate(command);

break;

// 当按下 CE 时

private void clearErrorClicked() {

if (operator == null) {

number1 = null;

reset = true;

// 当按下 C 时,将计算器置为初始状态.

private void clearClicked() {

operator = null;

// 当按下 = 时

private void equalsClicked() {

calculateResult();

// 计算结果

private void calculateResult() {

Operator oper = operators.get(operator);

if (oper != null) {

// 当按下 ◆-*/ 时(这里也可以扩展成其他中间操作符)

private void operatorClicked(String command) {

if (operator != null) {

operator = command;

// 当按下 . 时

private void dotClicked() {

} else if (reset) {

reset = false;

private void numberClicked(String command) {

if (reset) {

// 运算符处理接口

interface Operator {

// 按钮处理接口

interface Processor {

void calculate(String command);

有没有完整的计算器Java代码,不要有错误的,急求

package?jisuanqi;

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.JButton;

import?javax.swing.JFrame;

import?javax.swing.JPanel;

import?javax.swing.JTextField;

public?class?Calculator?extends?JFrame?implements?ActionListener{??//建一个Calculator类继承JFrame实现ActionListener

public?static?void?main?(String?args[]){

Calculator?calculator=new?Calculator();??//创建对象calculator

calculator.setVisible(true);???//窗口可见

calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?//关闭图标后结束程序

String?command?[]={"backspace","C"};//功能键

JButton?KEYS?[]=new?JButton[keys.length];//创建键对象

JButton?COMMAND[]=new?JButton[command.length];//功能键对象

static?JTextField?resultSet=new?JTextField();//建一个文本框

double?resultNum;??//结果

String?operator="";//运算符?---------------------------

public?Calculator()?{//?构造函数

super();?

init();//初始化计算器

this.setBackground(Color.WHITE);//this代表用当前构造方法创建的对象

this.setTitle("简单计算器");?//窗口标题

this.pack();//使组件大小合适

void?init()?{?//初始化计算器

resultSet.setHorizontalAlignment(JTextField.RIGHT);??//设置文本框内容向右对齐

resultSet.setBackground(Color.WHITE);???//设置文本框背景颜色

JPanel?keysPanel=new?JPanel();//创建一个面板

for?(int?i=0;ikeys.length;i◆◆)?{?//把数字键和符号键设为按钮

KEYS[i]=new?JButton(keys[i]);

keysPanel.add(KEYS[i]);??//把按钮加到面板中

JPanel?comPanel=new?JPanel();??//创建命令键面板

for(int?i=0;icommand.length;i◆◆)?{?//把命令键设置为按钮

COMMAND[i]=new?JButton(command[i]);

comPanel.add(COMMAND[i]);??//把按钮放到面板上

JPanel?pane=new?JPanel();?//创建面板

pane.setLayout(new?BorderLayout());?//面板布局为区域型

pane.add(comPanel,BorderLayout.NORTH);??//把命令面板加入到大面板上

pane.add(keysPanel,BorderLayout.CENTER);//把数字键面板加到大面板

getContentPane().setLayout(new?BorderLayout());??//设置底层容器的布局为区域型

getContentPane().add(resultSet,BorderLayout.NORTH);?//把文本框放到北面

getContentPane().add(pane,BorderLayout.CENTER);?//把大面板放到中央

for(int?i=0;ikeys.length;i◆◆){

KEYS[i].addActionListener(this);//为按钮添加监听器

for(int?i=0;icommand.length;i◆◆){

COMMAND[i].addActionListener(this);?

//处理事件?

public?void?actionPerformed(ActionEvent?e){?

String?lable=e.getActionCommand();

if(lable.equals("backspace")){?//如果命令为backspace

backspace();

else?if?(lable.equals("C")){??//如果命令为C

Clear();

else?if?(Character.isDigit(lable.charAt(0)))?{??//---------------

if(resultSet.getText().equals("0")){

resultSet.setText("");

resultSet.setText(resultSet.getText()◆lable);

else?if?(lable.equals(".")){

point();

else?if?(lable.equals("=")){

equal();

else?{

doOperation();

operator=lable;

void?point()?{

String?s=resultSet.getText();

if(s.indexOf(".")==-1){

resultSet.setText(s◆".");

void?equal()?{

resultSet.setText(""◆resultNum);

operator="";

void?doOperation()?{

double?m=Double.parseDouble(resultSet.getText());

if(operator.equals("")){

resultNum=m;

if(operator.equals("◆")){

resultNum◆=m;

if(operator.equals("-")){

resultNum-=m;

if(operator.equals("*")){

resultNum*=m;

if(operator.equals("/")){

resultNum/=m;

void?Clear()?{??//清零

resultSet.setText("0");

void?backspace()?{?//退格

String?text?=resultSet.getText();

if?(text.length()0){

resultSet.setText(text.substring(0,?text.length()-1));//将文本最后一个字符删除

else?if?(text.length()==0){

JAVA 编写计算器 要代码最简单的

学java的时候自己编的,很简单,能够连续输入计算式后进行计算

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.text.NumberFormat;

import java.util.ArrayList;

/**简易计算器,能够进行简单的计算

public class CalculatorA

implements ActionListener{

private JFrame frame;

private JTextField field;

private JButton[] allButtons;

private JButton clearButton;

// private JButton backButton;

String result="";//保存结果

StringBuilder sb = new StringBuilder();//保存要进行的计算式

int x = 0; //用来判断上一次的事件类型

ArrayListString arrayList = new ArrayListString();//保存计算式,通过方法进行运算

public CalculatorA(){

frame = new JFrame("我的计算器v1.1");

for(int i=0;iallButtons.length;i◆◆){

allButtons[i]= new JButton(str.substring(i,i◆1));

clearButton = new JButton("CLEAR");

// backButton = new JButton("——");

init();

setFondAndColor();

addEventHander();

public void init(){

frame.setLayout(new BorderLayout());

JPanel northPanel = new JPanel();

JPanel centerPanel = new JPanel();

JPanel southPanel = new JPanel();

northPanel.setLayout(new FlowLayout());

southPanel.setLayout(new FlowLayout());

northPanel.add(field);

centerPanel.add(allButtons[i]);

southPanel.add(clearButton);

//southPanel.add(backButton);

frame.add(northPanel,BorderLayout.NORTH);

frame.add(centerPanel,BorderLayout.CENTER);

frame.add(southPanel,BorderLayout.SOUTH);

//设置输入字体

public void setFondAndColor(){

field.setForeground(Color.RED);

//设置字体从右起始

field.setHorizontalAlignment(JTextField.RIGHT);

public void showMi(){

frame.pack();

frame.setResizable(false);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

public void addEventHander(){

allButtons[i].addActionListener(this);

clearButton.addActionListener(this);

// backButton.addActionListener(this);

String str = e.getActionCommand();//取得当前事件返回的值

if(x == 0){ //当x为0时表示还没有进行输入

result=str;

sb.append(str);

field.setText(str);

x = 1;

else if(x == 1){

result = result ◆str;

field.setText(result);

sb.delete(0,sb.length());

result = result◆str;

result = str;

arrayList.clear();

result ="";

else{

else if("◆*-/".indexOf(str)!=-1){

if(x == 0){

field.setText("");

result = result ◆ str;

arrayList.add(sb.toString());

arrayList.add(str);

field.setText(result◆str);

arrayList.add(result);

else if("=".equals(str)){

field.setText("0");

result = "0";

try{

arrayList = getResult(arrayList);

result = arrayList.get(0);

}catch(Exception e1){

field.setText("数据格式异常");

x = 0;

field.setText("数据格式错误.....");

else {

else if("CLEAR".equals(str)){

arrayList.add("0");

if(result.length()1){

result = result.substring(0,result.length()-1);

if(sb.length()0){

sb.delete(sb.length()-1,sb.length());

sb.delete(0,1);

result = "";

public static ArrayListString getResult(ArrayListString list){

String res = null;

String[] s = {"/","*","-","◆"};

int i=0;

if(list.size()1){

for(;is.length;){

if(s[i].equals("/")){

for(int j=0;jlist.size();j◆◆){

if(list.get(j).equals(s[i])){

res = Double.toString(Double.parseDouble(list.get(j-1))/Double.parseDouble(list.get(j◆1)));

//本地的数据格式

NumberFormat nf = NumberFormat.getInstance();

res = nf.format(Double.parseDouble(res));

res = getChange(res);

list.set(j-1,res);

list.remove(j);

getResult(list);

i◆◆;

else if(s[i].equals("*")){

res = Double.toString(Double.parseDouble(list.get(j-1))*Double.parseDouble(list.get(j◆1)));

else if(s[i].equals("-")){

res = Double.toString(Double.parseDouble(list.get(j-1))-Double.parseDouble(list.get(j◆1)));

NumberFormat nf = NumberFormat.getNumberInstance();

res = Double.toString(Double.parseDouble(list.get(j-1))◆Double.parseDouble(list.get(j◆1)));

return list;

//对数字字符串进行排除不必要符号

public static String getChange(String res){

String s_temp = "";

char[] c = new char[res.length()];

for(int k=0;kc.length;k◆◆){

c[k] = res.charAt(k);

s_temp ◆= c[k];

return s_temp;

public static void main(String[] args){

new CalculatorA().showMi();

以上就是土嘎嘎小编为大家整理的java全面的计算器代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章