java版简易计算器,java 简易计算器

java做的简易计算器

可以实现科学型和标准型的转换,标准型的功能完善,科学型的功能没全部写

java小白,有啥问题希望大神可以指正!!

下列代码是标准型的代码,科学型的可以自己补充,无非就是复制粘贴调参

package Jisuanqi;

/** 简易计算器 开根号只能先输入数字在点击开根号

* created by 晴眸若初

*

*/

import javax.swing.*;

import java.awt.BorderLayout;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.DecimalFormat;

public class Calculator extends JFrame implements ActionListener{

//创建一个界面窗口

private JFrame jiemian = new JFrame();

//创建按键的名字,并创建对应的按钮

private String[] keys = {"%","CE","C","Back","1⁄x","X²","√x","÷","7","8","9","X","4","5","6","-","1","2","3","+","+/-","0",".","="};

private JButton[] buttons = new JButton[keys.length];

//计算的结果 文本框显示 result_txt

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

//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字

private boolean firstDigit = true;

//当前运算的运算符

private String now_key = "=";

//计算的中间结果

private double resultNum = 0.0000;

//判断当前操作是否合法

private boolean operatelegal = true;

//创建菜单

//private Menu mineMenu;

private JMenu menu;

private JMenu help;

private JMenuItem biaozhun;

private JMenuItem kexue;

private JMenuItem about;

public Calculator() {

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

jiemian.setTitle("简易计算器 by 晴眸若初");

jiemian.setSize(380,450);

jiemian.setLocation(500, 300);

//不允许修改计算器窗口大小

jiemian.setResizable(false);

JMenuBar zkm = new JMenuBar();

jiemian.setJMenuBar(zkm);

jiemian.setVisible(true);

menu = new JMenu("菜单");

help = new JMenu("帮助");

biaozhun = new JMenuItem("标准型(B)");

kexue = new JMenuItem("科学型(K)");

about = new JMenuItem("关于(P)");

menu.add(biaozhun);

biaozhun.setMnemonic('b');

menu.add(kexue);

kexue.setMnemonic('k');

help.add(about);

about.setMnemonic('p');

zkm.add(menu);

zkm.add(help);

kexue.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

new Calculator2();

jiemian.setVisible(false);

}

});

// biaozhun.addActionListener(new ActionListener(){

//public void actionPerformed(ActionEvent e) {

//new Calculator();

Calculator2.this.setVisible(false);

//}

//});

about.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

new About();

}

});

jiemian.pack();

//关闭窗口

jiemian.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

/**

* 调用主函数,运行程序

*/

public static void main(String[] args) {

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

}catch(Exception e) {

System.out.println(e);

}

new Calculator();

}

/**

* 初始化函数 init();

*

*/

private void init() {

//设置各个部分颜色

Color color1 = new Color(150, 150, 150); //功能键和运算符颜色 中灰色

Color color2 = new Color(137, 207, 240); //等于号专属颜色 浅蓝色

Color color3 = new Color(232, 232, 232); //背景颜色也是灰色 深灰色

JPanel Panel = new JPanel();

Panel.setLayout(new BorderLayout());

Panel.add(result_txt);

//设置文本框中文字的字体以及大小,加粗,内容采用右对齐方式

result_txt.setFont(new Font("楷体",Font.BOLD,43));

result_txt.setHorizontalAlignment(JTextField.RIGHT);

result_txt.setEditable(false); //不能修改结果文本框

result_txt.setBorder(null); //删除文本框的边框

// 设置文本框背景颜色

result_txt.setBackground(color1);

//创建一个放置按钮的面板

JPanel keysPanel = new JPanel();

//网格布局,6行4列,网格之间水平与垂直间隔2像素

keysPanel.setLayout(new GridLayout(6, 4, 2, 2));

//初始化前两行按键的功能

for(int i = 0; i < 8; i++) {

buttons[i] = new JButton(keys[i]);

keysPanel.add(buttons[i]);

buttons[i].setBackground(color3);

//设置按钮文本的前景色

buttons[i].setForeground(Color.black);

//设置字体显示效果 18磅粗的字体

buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18));

buttons[i].setBorderPainted(false); //去除按钮的边框

}

for(int i = 8; i < keys.length; i++) {

buttons[i] = new JButton(keys[i]);

keysPanel.add(buttons[i]);

if((i+1)%4==0) buttons[i].setBackground(color3); //将三四五行第四列的按钮设置为color3

else buttons[i].setBackground(Color.white);

buttons[i].setForeground(Color.black);

buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18));

buttons[i].setBorderPainted(false); //去除按钮的边框

}

//“=”键使用浅蓝色 按钮所在面板使用深灰色

buttons[23].setBackground(color2);

keysPanel.setBackground(color1);

//将文本框放在北部,将按钮面板放在中部

jiemian.getContentPane().add("North", Panel);

jiemian.getContentPane().add("Center", keysPanel);

//设置面板的边框属性

Panel.setBorder(BorderFactory.createMatteBorder(25,3,1,3,color1));

keysPanel.setBorder(BorderFactory.createMatteBorder(6,3,3,3,color1));

//添加事件监听器

for(int i=0;i

buttons[i].addActionListener(this);

}

}

/**

* 事件监听

*/

public void actionPerformed(ActionEvent e) {

//获取事件,即用户的指令

String zhiling = e.getActionCommand();

if(zhiling.equals(keys[3])) {

//用户点了“back”

goBack();

}else if(zhiling.equals(keys[1])) {

//用户按了“CE”,当前数字清零

result_txt.setText("0");

}else if(zhiling.equals(keys[2])) {

//用户按“C”,初始化计算器

goC();

}else if("0123456789.".indexOf(zhiling) >= 0) {

//利用indexOf判断,若是没有出现0-9和.,则返回-1

goNum(zhiling);

}else if(zhiling.equals(keys[0]) || zhiling.equals(keys[4]) || zhiling.equals(keys[5]) ||

zhiling.equals(keys[6]) || zhiling.equals(keys[20])) {

// 用户按了"求倒数,%,开方,平方,取正负数"

goDeal1(zhiling);

} else {

goDeal2(zhiling);

}

}

/**

* 当用户按下“Back”后如何处理

*/

private void goBack() {

String text = result_txt.getText();

int i = text.length();

if (i > 0) {

text = text.substring(0, i - 1); // 退格,将文本最后一个字符去掉

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

// 如果文本没有内容了,则初始化计算器的各种值

result_txt.setText("0");

firstDigit = true;

now_key = "=";

} else {

// 显示新的文本

result_txt.setText(text);

}

}

}

/**

* 当用户按下“C”后如何处理:初始化计算器

*/

private void goC() {

// 初始化计算器的各种值

result_txt.setText("0");

firstDigit = true;

now_key = "=";

}

/**

* 当用户按下数字键后如何处理

*/

private void goNum(String key) {

if (firstDigit) {

// 输入的为第一个数

result_txt.setText(key);

} else if ((key.equals(".")) && (result_txt.getText().indexOf(".") < 0)) {

// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面

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

} else if (!key.equals(".")) {

// 如果输入的不是小数点,则将数字附在结果文本框的后面

result_txt.setText(result_txt.getText() + key);

}

firstDigit = false;

}

/**

* 当用户按下运算符后如何处理,分两种情况:1.简单单目运算符 2.双目运算符

*/

//第一种情况

private void goDeal1(String key) {

now_key = key; // 运算符为用户按的按钮

if (now_key.equals("1⁄x")) {

// 倒数运算

if (resultNum == 0) {

operatelegal = false; //操作不合法

result_txt.setText("零没有倒数");

} else {

resultNum = 1 / getNumberFromText();

}

} else if (now_key.equals("√x")) {

// 开平方运算

if (resultNum < 0) {

operatelegal = false; //操作不合法

result_txt.setText("根号内不能为负");

} else {

resultNum = Math.sqrt(getNumberFromText());

}

} else if (now_key.equals("X²")) {

// 平方运算

resultNum = getNumberFromText()*getNumberFromText();

} else if (now_key.equals("%")) {

// 百分号运算,除以100

resultNum = getNumberFromText() / 100;

} else if (now_key.equals("+/-")) {

// 正数负数运算

resultNum = getNumberFromText() * (-1);

if (operatelegal) {

// 操作合法的情况下,结果为小数保留小数点后4位,整数正常输出

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

result_txt.setText(String.valueOf(t1));

} else {

result_txt.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum)));

}

}

firstDigit = true;

operatelegal = true;

}

}

//第二种情况

private void goDeal2(String key) {

if (now_key.equals("÷")) { //除法运算

// 如果当前结果文本框中的值等于0

if (getNumberFromText() == 0.0) {

operatelegal = false; //操作不合法

result_txt.setText("除数不能为零");

} else {

resultNum /= getNumberFromText();

}

} else if (now_key.equals("+")) {

// 加法运算

resultNum += getNumberFromText();

} else if (now_key.equals("-")) {

// 减法运算

resultNum -= getNumberFromText();

} else if (now_key.equals("X")) {

// 乘法运算

resultNum *= getNumberFromText();

} else if (now_key.equals("=")) {

// 赋值运算

resultNum = getNumberFromText();

}

if (operatelegal) {

// 操作合法的情况下,结果为小数保留小数点后4位,整数正常输出

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

result_txt.setText(String.valueOf(t1));

} else {

result_txt.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum)));

}

}

now_key = key; // 运算符为用户按的按钮

firstDigit = true;

operatelegal = true;

}

/**

* 从文本框中获取文本,并将文本转化为数字

*/

private double getNumberFromText() {

double result = 0;

//将文本框中的内容转换成一个Double对象,然后利用Double内的方法变成double

try {

result = Double.valueOf(result_txt.getText()).doubleValue();

} catch (NumberFormatException e) {

}

return result;

}

}

标签:java,equals,else,简易,result,key,计算器,new,txt

来源: https://blog.csdn.net/limbo66/article/details/110673675

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值