java 比例计算器_java版计算器

[java]代码库import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.awt.*;

import java.math.BigDecimal;

import java.math.MathContext;

import java.math.RoundingMode;

import java.awt.Color;

/**

* java版计算器

*/

public class Calculator extends JFrame {

final int WIN_W = 250, WIN_H = 250;

JPanel myPanel, panelSuper;

public Calculator() {

// 主面板

panelSuper = new JPanel();

panelSuper.setLayout(null);

// 设置窗口位置

double width = Toolkit.getDefaultToolkit().getScreenSize().width;

double height = Toolkit.getDefaultToolkit().getScreenSize().height;

this.setBounds((int) (width - WIN_W) / 2, (int) (height - WIN_H) / 2,

WIN_W, WIN_H);

// 窗口配置

this.setTitle("java版计算器");

this.validate();

this.setResizable(false);

this.setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

// 添加计算器按钮面板

myPanel = new MyPanel();

this.add(myPanel, BorderLayout.CENTER);

}

public static void main(String[] args) {

new Calculator();

}

/**

* 计算器按钮面板类

*/

class MyPanel extends JPanel implements ActionListener {

JButton button1, button2, button3, button4, button5, button6, button7,

button8, button9, button0, buttonJia, buttonJian, buttonCheng,

buttonChu, buttonDeng, buttonDian, buttonC, buttonDel,

buttonZF, buttonGH;

JTextField jTextField; // 计算器显示屏

char oper; // 操作符

String key, allKey = "1234567890.±del", jjccKey = "+-*/";

BigDecimal d1, d2;

boolean first;

public MyPanel() {

// 设置布局

this.setLayout(new FlowLayout(FlowLayout.LEFT, 4, 5));

// 计算器显示屏

jTextField = new JTextField(21);

jTextField.setHorizontalAlignment(JTextField.RIGHT);

jTextField.setEditable(false);

jTextField.setBackground(new Color(255, 255, 255));

jTextField.setText("0");

this.add(jTextField);

// 计算器按钮

button1 = new JButton("1");

button2 = new JButton("2");

button3 = new JButton("3");

button4 = new JButton("4");

button5 = new JButton("5");

button6 = new JButton("6");

button7 = new JButton("7");

button8 = new JButton("8");

button9 = new JButton("9");

button0 = new JButton("0");

buttonJia = new JButton("+");

buttonJian = new JButton("-");

buttonCheng = new JButton("*");

buttonChu = new JButton("/");

buttonDeng = new JButton("=");

buttonDian = new JButton(".");

buttonDel = new JButton("del");

buttonC = new JButton("c");

buttonZF = new JButton("±");

buttonGH = new JButton("√");

button1.setPreferredSize(new Dimension(55, 30));

button2.setPreferredSize(new Dimension(55, 30));

button3.setPreferredSize(new Dimension(55, 30));

button4.setPreferredSize(new Dimension(55, 30));

button5.setPreferredSize(new Dimension(55, 30));

button6.setPreferredSize(new Dimension(55, 30));

button7.setPreferredSize(new Dimension(55, 30));

button8.setPreferredSize(new Dimension(55, 30));

button9.setPreferredSize(new Dimension(55, 30));

button0.setPreferredSize(new Dimension(55, 30));

buttonJia.setPreferredSize(new Dimension(55, 30));

buttonJian.setPreferredSize(new Dimension(55, 30));

buttonCheng.setPreferredSize(new Dimension(55, 30));

buttonChu.setPreferredSize(new Dimension(55, 30));

buttonDeng.setPreferredSize(new Dimension(55, 30));

buttonDian.setPreferredSize(new Dimension(55, 30));

buttonDel.setPreferredSize(new Dimension(55, 30));

buttonC.setPreferredSize(new Dimension(55, 30));

buttonZF.setPreferredSize(new Dimension(55, 30));

buttonGH.setPreferredSize(new Dimension(55, 30));

this.add(buttonDel);

this.add(buttonC);

this.add(buttonZF);

this.add(buttonGH);

this.add(button1);

this.add(button2);

this.add(button3);

this.add(buttonJia);

this.add(button4);

this.add(button5);

this.add(button6);

this.add(buttonJian);

this.add(button7);

this.add(button8);

this.add(button9);

this.add(buttonCheng);

this.add(button0);

this.add(buttonDian);

this.add(buttonDeng);

this.add(buttonChu);

buttonDel.addActionListener(this);

buttonC.addActionListener(this);

buttonZF.addActionListener(this);

buttonGH.addActionListener(this);

button1.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

button4.addActionListener(this);

button5.addActionListener(this);

button6.addActionListener(this);

button7.addActionListener(this);

button8.addActionListener(this);

button9.addActionListener(this);

button0.addActionListener(this);

buttonJia.addActionListener(this);

buttonJian.addActionListener(this);

buttonCheng.addActionListener(this);

buttonChu.addActionListener(this);

buttonDeng.addActionListener(this);

buttonDian.addActionListener(this);

// 计算器初始化

init();

}

/**

* 计算器初始化

*/

public void init() {

d1 = new BigDecimal("0");

d1 = new BigDecimal("0");

key = "=";

oper = '=';

jTextField.setText("0");

first = true; // 用于标记是否进行连续操作(例如按键顺序为“9*9====”,第一次等于first由true变为false,如果!first,按等号相当于用上一次的结果与第二个操作数相乘)

}

/**

* 按钮监听

*/

public void actionPerformed(ActionEvent e) {

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

if (b == buttonDian) { // 按下.

jTextField.setText(jTextField.getText() + ".");

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonZF) {// 按下±

BigDecimal d = getNum();

d = new BigDecimal("0").subtract(d);

setFormatNum(d);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonDel) {// 按下del

if (jTextField.getText().length() == 1

|| jTextField.getText().length() == 2

&& jTextField.getText().startsWith("-")) {

jTextField.setText("0");

} else {

String s = jTextField.getText();

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

if (s.endsWith("E+") || s.endsWith("E-"))

s = s.substring(0, s.length() - 2);

jTextField.setText(s);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

}

} else if (b == buttonC) {// 按下c

init();

} else if (b == buttonJia) {// 按下+

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

if (oper == '-' || oper == '/') {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

// System.out.print("111我执行啦\n");

oper = '+';

} else if (b == buttonJian) {// 按下-

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

s = operate(d1, oper, d2);

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '-';

} else if (b == buttonCheng) {// 按下*

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

if (oper == '-' || oper == '/') {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '*';

} else if (b == buttonChu) {// 按下/

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

s = operate(d1, oper, d2);

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '/';

} else if (b == buttonGH) {// 按下平方根

if (jTextField.getText().startsWith("-")) {

init();

return;

}

BigDecimal d = getNum();

MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);

d = new BigDecimal(Math.sqrt(d.doubleValue()), mc);

setFormatNum(d);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonDeng) {// 按下=

BigDecimal s = null;

d2 = getNum();

if (!key.equals("=")) {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

if (oper != '=' && !key.equals("=")) {// 上一次操作为 +-*/

d1 = getNum();

}

setFormatNum(s);

first = true;

} else { // 按下其他按钮

if (this.jTextField.getText().equals("0")

|| allKey.indexOf(key) == -1) {

this.jTextField.setText(b.getText());

} else {

this.jTextField.setText(jTextField.getText() + b.getText());

}

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}// d2作被加数:d2+d1

}

key = b.getText();

}

/**

* 获取操作数

*

* @return 操作数

*/

public BigDecimal getNum() {

BigDecimal d = new BigDecimal(jTextField.getText());

return d;

}

public void setFormatNum(BigDecimal dd) {

MathContext mc = new MathContext(18, RoundingMode.HALF_DOWN);

BigDecimal d = new BigDecimal(dd.toString(), mc);

String num = d.toString();

if (num.endsWith(".0"))

num = num.replaceAll("\\.0", "");

this.jTextField.setText(num);

}

/**

* 计算

*

* @param a1

* 操作数1

* @param c

* 操作符

* @param a2

* 操作数2

* @return

*/

public BigDecimal operate(BigDecimal a1, char c, BigDecimal a2) {

MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);

switch (c) {

case '+':

return a1.add(a2);

case '-':

return a1.subtract(a2);

case '*':

return a1.multiply(a2);

case '/':

if (a2.compareTo(new BigDecimal("0")) == 0) {

init();

return new BigDecimal("0");

}

return a1.divide(a2, mc);

default:

return a2;

}

}

}

}

[代码运行效果截图]

187146f58d32336867a947a868d3df9f.png

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。你想要使用Java模拟计算器,可以按照以下步骤进行: 1. 创建一个Java类,命名为Calculator。 2. 在Calculator类中,定义一个main方法,用于程序的执行入口。 3. 在main方法中,创建一个Scanner对象,用于从控制台读取用户输入。 4. 定义两个double类型的变量,用于存储用户输入的两个数值。 5. 使用Scanner对象从控制台读取用户输入的两个数值,并将其存储到定义的变量中。 6. 定义一个char类型的变量,用于存储用户输入的运算符。 7. 使用Scanner对象从控制台读取用户输入的运算符,并将其存储到定义的变量中。 8. 根据用户输入的运算符,进行相应的计算,并将结果输出到控制台。 下面是一个简单的Java模拟计算器的示例代码: ``` import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数:"); double num1 = scanner.nextDouble(); System.out.print("请输入第二个数:"); double num2 = scanner.nextDouble(); System.out.print("请输入运算符(+、-、*、/):"); char operator = scanner.next().charAt(0); double result = 0; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; default: System.out.println("输入的运算符不合法!"); return; } System.out.println("计算结果为:" + result); } } ``` 你可以将以上代码复制到一个Java文件中,然后编译运行该程序,即可使用Java模拟计算器进行简单的数值计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值