package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.util.Vector;
public class test8 extends JFrame {
JTextField result_TextField;
// 操作数1,为了程序的安全,初值一定要设置,这里我们设置为0。
String str1 = "0";//操作数1
String str2 = "0"; //操作数2
String result = "0"; //运算结果
// 以下k1至k5为状态开关
// 开关1用于选择输入方向,将要写入str1或str2
// 为 1 时写入 str1,为 2时写入 str2
int k1 = 1;
// 开关 2 用于记录符号键的次数
// 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算
int k2 = 1;
// 开关3用于标识 str1 是否可以被清 0
// 等于 1 时可以,不等于1时不能被清0
int k3 = 1;
// 开关4用于标识 str2 是否可以被清 0
// 等于 1 时可以,不等于1时不能被清0
int k4 = 1;
// 开关5用于控制小数点可否被录入
// 等于1时可以,不为1时,输入的小数点被丢掉
int k5 = 1;
//开关6用于控制正负号输入
int k6 = 1;
// store的作用类似于寄存器,用于记录是否连续按下符号键
JButton store;
String signal;
//vt 存储之前输入的运算符
Vector vt = new Vector(20, 10);
public test8(){
//创建一个JTextField对象并初始化。
// JTextField用于显示操作和计算结果的文本框。
// 参数 20 表明可以显示 20 列的文本内容
result_TextField = new JTextField(20);
// 清除按钮
JButton clear_Button = new JButton("C");
// 数字键0到9
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
// 计算命令按钮,加减乘除以及小数点、正负号等
JButton button_Dian = new JButton(".");
JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_dy = new JButton("=");
JButton button_zhengfu = new JButton("+/-");
// 两个标签
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
//一个面板
JPanel panel = new JPanel(new GridLayout(5, 4));
//在面板中添加标签和按钮
panel.add(label1); panel.add(label2);
panel.add(clear_Button); panel.add(button_dy);
panel.add(button0); panel.add(button1);
panel.add(button2); panel.add(button_jia);
panel.add(button3); panel.add(button4);
panel.add(button5); panel.add(button_jian);
panel.add(button6); panel.add(button7);
panel.add(button8); panel.add(button_cheng);
panel.add(button9); panel.add(button_zhengfu);
panel.add(button_Dian); panel.add(button_chu);
//0-9添加监听器
button0.addActionListener(new Listener());
button1.addActionListener(new Listener());
button2.addActionListener(new Listener());
button3.addActionListener(new Listener());
button4.addActionListener(new Listener());
button5.addActionListener(new Listener());
button6.addActionListener(new Listener());
button7.addActionListener(new Listener());
button8.addActionListener(new Listener());
button9.addActionListener(new Listener());
//小数点添加监听器
button_Dian.addActionListener(new Listener_xiaos());
//+-*/添加监听器
button_jia.addActionListener(new Listener_signal());
button_jian.addActionListener(new Listener_signal());
button_cheng.addActionListener(new Listener_signal());
button_chu.addActionListener(new Listener_signal());
//等于号添加监听器
button_dy.addActionListener(new Listener_dy());
//清除键添加监听器
clear_Button.addActionListener(new Listener_clear());
//正负号添加监听器
button_zhengfu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(k6 == 1){
k6 = 2;
if(k1 == 1){
str1 = "-" + str1;
result_TextField.setText(str1);
} else if(k1 == 2) {
str2 = "-" + str2;
result_TextField.setText(str2);
}
} else if(k6 == 2){
if(k1 == 1){
str1 = str1.substring(1);
result_TextField.setText(str1);
} else if(k1 == 2) {
str2 = str2.substring(1);
result_TextField.setText(str2);
}
k6 = 1;
}
}
});
this.add(result_TextField, BorderLayout.NORTH);
this.add(panel, BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(300, 300, 300, 400);
this.setVisible(true);
this.setTitle("计算器");
}
//Listener类中编写的是数字键的响应逻辑。
class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String ss = ((JButton)e.getSource()).getText();
store = (JButton)e.getSource();
if(k1 == 1){//输入第一个数
if(k3 == 1){//第一个数可以被清零
str1 = "";
k5 = 1;
}
str1 = str1 + ss;
k3 = k3 + 1;
if(k6 != 1){//正负号的输入
str1 = "-" + str1;
k6 = 1;
}
result_TextField.setText(str1);
} else if (k1 == 2) {
if(k4 == 1){//str2可以被清零
str2 = "";
k5 = 1;//小数点是否可以被输入
}
str2 = str2 + ss;
k4 = k4 + 1;
if(k6 != 1){
str2 = "-" + str2;
k6 = 1;
}
result_TextField.setText(str2);
}
}
}
//Listener_signal类中编写了运算符号键的响应逻辑
class Listener_signal implements ActionListener {
public void actionPerformed(ActionEvent e) {
k6 = 1;
String ss2 = ((JButton)e.getSource()).getText();
store = (JButton)e.getSource();
vt.add(store);
if(k2 == 1){
k1 = 2;
k5 = 1;
signal = ss2;
k2 = k2 + 1;
} else {
int a = vt.size();
JButton c = (JButton)vt.get(a - 2);
if(c.getText().equals("+")||c.getText().equals("-")||c.getText().equals("*")||c.getText().equals("/")){
cal();
str1 = result;
k1 = 2;
k5 = 1;
k4 = 1;
signal = ss2;
}
k2 = k2 + 1;
}
}
}
//Listener_clear类中编写了清除键的响应逻辑
class Listener_clear implements ActionListener {
public void actionPerformed(ActionEvent e) {
result = "0";
str1 = "0";
str2 = "0";
result_TextField.setText("");
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
k5 = 1;
k6 = 1;
signal = "";
}
}
//Listener_dy类中编写的是等于号键的响应逻辑
class Listener_dy implements ActionListener {
public void actionPerformed(ActionEvent e) {
store = (JButton)e.getSource();
vt.add(store);
cal();
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
str1 = result;
}
}
//Listener_xiaos类中编写的是小数点键的相应逻辑
class Listener_xiaos implements ActionListener {
public void actionPerformed(ActionEvent e) {
store = (JButton)e.getSource();
vt.add(store);
if(k5 == 1){
String ss2 = ((JButton)e.getSource()).getText();
if(k1 == 1){
if(k3 == 1){
str1 = "";
k5 = 1;
}
str1 = str1 + ss2;
k3 = k3 + 1;
result_TextField.setText(str1);
} else if(k1 == 2){
if(k4 == 1){
str2 = "";
k5 = 1;
}
str2 = str2 + ss2;
k4 = k4 + 1;
result_TextField.setText(str2);
}
}
k5 = k5 + 1;
}
}
// calc()方法中编写了计算逻辑的实现。
public void cal() {
double a2, b2;
String c = signal;
double result2 = 0;
if(c.equals("")){
result_TextField.setText("please input operator");
} else {
if(str1.equals(".")){
str1 = "0.0";
}
if(str2.equals(".")){
str2 = "0.0";
}
a2 = Double.valueOf(str1).doubleValue();
b2 = Double.valueOf(str2).doubleValue();
if(c.equals("+")){
result2 = a2 + b2;
}
if(c.equals("-")){
result2 = a2 - b2;
}
if(c.equals("*")){
BigDecimal m1 = new BigDecimal(Double.toString(a2));
BigDecimal m2 = new BigDecimal(Double.toString(b2));
result2 = m1.multiply(m2).doubleValue();
}
if(c.equals("/")){
if(b2 == 0){
result2 = 0;
} else {
result2 = a2 / b2;
}
}
result = String.valueOf(result2);
result_TextField.setText(result);
}
}
public static void main(String[] args) {
new test8();
}
}
java计算器编写,请问我要怎样可以把所输入进去式子符号都一起显示,按现在的改一下的话
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7486441
- 这篇博客也不错, 你可以看下Java实现给定一个字符串,将其中的每一个单词进行翻转并输出翻转后的字符串
- 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-野生动物
- 除此之外, 这篇博客: Java序列化,如何实现序列化和反序列化,常见的序列化协议有哪些?中的 反序列化 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
--实现Serializable接口对象在反序列化时不需要调用对象所在类的构造方法,完全基于字节。
--实现externalSerializable接口的方法在反序列化时会调用构造方法。
- 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
- 以下回答由chatgpt基于相关博客总结生成:
初学Java时,在学习基础语法的同时,可以将目光投向以下几个方向,这些是工作中常用的知识点: 1.常用框架:Spring、Spring MVC、MyBatis等 2.数据库:MySQL、Oracle等 3.大数据相关:Hadoop、Spark等 4.前端开发:HTML、CSS、JavaScript等 5.网络相关:TCP/IP协议、HTTP协议等 6.操作系统:Linux、Windows等 7.设计模式等高级编程思想,例如单例模式、工厂模式等
在初学时,可以按照自己的需求和兴趣选择重点学习的内容。建议通过实际的项目实战来加深对知识点的理解和掌握。在实际工作中,随着业务的不同,也需要不断学习和掌握新的知识和技能。
解决 无用评论 打赏 举报