diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b92412c95717973685c8ba307a4e2ebdf45ca549
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/../../../:\kqrGitee\.idea/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..0e124206de2d87620445e3c6d129e5de6504af30
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+java2022spring
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84da703c3b6737ae27e4c89f3e04cb1712cf3a17
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ea25cb6475b9409a6cd5868ef50ea0cdc7ce9a84
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java2022spring.iml b/java2022spring.iml
new file mode 100644
index 0000000000000000000000000000000000000000..8e7b6cd32f7565fba6b210ff3a62cf40d1a27086
--- /dev/null
+++ b/java2022spring.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java
new file mode 100644
index 0000000000000000000000000000000000000000..42850d36f270172b39dc96ac3e92c39d9ed7a0fb
--- /dev/null
+++ b/src/java2022spring/Calculator.java
@@ -0,0 +1,296 @@
+package java2022spring;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Objects;
+
+import javax.swing.*;
+
+//Calculator类,继承JFrame框架,实现事件监听器接口
+public class Calculator extends JFrame implements ActionListener {
+ private final String[] KEYS = { "7", "8", "9", "AC", "4", "5", "6", "-", "1", "2", "3", "+", "0", "e", "pi", "/", "sqrt",
+ "%", "x*x", "*", "(", ")", ".", "=" };
+ private JButton keys[] = new JButton[KEYS.length];
+ private JTextArea resultText = new JTextArea("0.0");// 文本域组件TextArea可容纳多行文本;文本框内容初始值设为0.0
+ private JTextArea History = new JTextArea();// 历史记录文本框初始值设为空
+ private JPanel jp2=new JPanel();
+ private JScrollPane gdt1=new JScrollPane(resultText);//给输入显示屏文本域新建一个垂直滚动滑条
+ private JScrollPane gdt2=new JScrollPane(History);//给历史记录文本域新建一个垂直滚动滑条
+ // private JScrollPane gdt3=new JScrollPane(History);//给历史记录文本域新建一个水平滚动滑条
+ private JLabel label = new JLabel("历史记录");
+ private String b = "";
+
+ // 构造方法
+ public Calculator() {
+ super("Caculator");//“超”关键字,表示调用父类的构造函数,此处参考了网上部分代码
+ resultText.setBounds(20, 18, 255, 115);// 设置文本框大小
+ resultText.setAlignmentX(RIGHT_ALIGNMENT);// 文本框内容右对齐
+ resultText.setEditable(false);// 文本框不允许修改结果
+ History.setBounds(290, 40, 250,370);// 设置文本框大小
+ History.setAlignmentX(LEFT_ALIGNMENT);// 文本框内容右对齐
+ History.setEditable(false);// 文本框不允许修改结果
+ label.setBounds(300, 15, 100, 20);//设置标签位置及大小
+ jp2.setBounds(290,40,250,370);//设置面板窗口位置及大小
+ jp2.setLayout(new GridLayout());
+ JPanel jp1 = new JPanel();
+ jp1.setBounds(20,18,255,115);//设置面板窗口位置及大小
+ jp1.setLayout(new GridLayout());
+ resultText.setLineWrap(true);// 激活自动换行功能
+ resultText.setWrapStyleWord(true);// 激活断行不断字功能
+ resultText.setSelectedTextColor(Color.RED);
+ History.setLineWrap(true);//自动换行
+ History.setWrapStyleWord(true);
+ History.setSelectedTextColor(Color.blue);
+ gdt1.setViewportView(resultText);//使滚动条显示出来
+ gdt2.setViewportView(History);
+ gdt1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//设置让垂直滚动条一直显示
+ gdt2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//设置让垂直滚动条一直显示
+ gdt2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置让水平滚动条一直显示
+ jp1.add(gdt1);//将滚动条添加入面板窗口中
+ jp2.add(gdt2);
+ this.add(jp1);//将面板添加到总窗体中
+ this.add(jp2);//将面板添加到总窗体中
+ this.setLayout(null);
+ this.add(label);// 新建“历史记录”标签
+
+
+ // 放置按钮
+ int x = 20, y = 150;
+ for (int i = 0; i < KEYS.length; i++)
+ {
+ keys[i] = new JButton();
+ keys[i].setText(KEYS[i]);
+ keys[i].setBounds(x, y, 60, 40);
+ if (x < 215) {
+ x += 65;
+ } else {
+ x = 20;
+ y += 45;
+ }
+ this.add(keys[i]);
+ }
+ for (int i = 0; i < KEYS.length; i++)// 每个按钮都注册事件监听器
+ {
+ keys[i].addActionListener(this);
+ }
+ this.setResizable(false);
+ this.setBounds(500, 200, 567, 480);
+ this.setDefaultCloseOperation(EXIT_ON_CLOSE);
+ this.setVisible(true);
+ }
+
+ // 事件处理
+ public void actionPerformed(ActionEvent e)
+ {
+ //History.setText(b);//使输入的表达式显示在历史记录文本框中
+ String label=e.getActionCommand();//获得事件源的标签
+ if(Objects.equals(label, "="))//
+ {
+ resultText.setText(this.b);
+ History.setText(History.getText()+resultText.getText());
+ if(label.equals("="))//调用计算方法,得出最终结果
+ {
+ String[] s =houzhui(this.b);
+ String result=Result(s);
+ this.b=result+"";
+ //更新文本框,当前结果在字符串b中,并未删除,下一次输入接着此结果以实现连续运算
+ resultText.setText(this.b);
+ History.setText(History.getText()+"="+resultText.getText()+"\n");
+ }
+ }
+ else if(Objects.equals(label, "AC"))//清空按钮,消除显示屏文本框前面所有的输入和结果
+ {
+ this.b="";
+ resultText.setText("0");//更新文本域的显示,显示初始值;
+ }
+ else if(Objects.equals(label, "sqrt"))
+ {
+ String n=kfys(this.b);
+ resultText.setText("sqrt"+"("+this.b+")"+"="+n);//使运算表达式显示在输入界面
+ History.setText(History.getText()+"sqrt"+"("+this.b+")"+"=");//获取输入界面的运算表达式并使其显示在历史记录文本框
+ this.b=n;
+ }
+ else if(Objects.equals(label, "x*x"))
+ {
+ String m=pfys(this.b);
+ resultText.setText(this.b+"^2"+"="+m);//使运算表达式显示在输入界面
+ History.setText(History.getText()+this.b+"^2"+"=");//获取输入界面的运算表达式并使其显示在历史记录文本框
+ this.b=m;
+ }
+ else if(Objects.equals(label, "e") || Objects.equals(label, "pi"))
+ {
+ if(label.equals("e"))
+ {
+ String m=String.valueOf(2.71828);//将e的值以字符串的形式传给m
+ this.b=this.b+m;//保留显示m之前输入的运算符或数字字符继续下一步运算
+ resultText.setText(this.b);
+ // History.setText(History.getText()+this.b);
+ }
+ if(label.equals("pi"))
+ {
+ String m=String.valueOf(3.14159265);
+ this.b=this.b+m;
+ resultText.setText(this.b);
+ // History.setText(History.getText()+this.b);
+ }
+ }
+ else
+ {
+ this.b=this.b+label;
+ resultText.setText(this.b);
+ // History.setText(History.getText()+this.b);
+
+
+ }
+ //History.setText(History.getText()+this.b);//使输入的表达式显示在历史记录文本框中
+ }
+
+ private String[] houzhui(String str) {
+ String s = "";
+ char[] opStack = new char[100];
+ String[] postQueue = new String[100];
+ int top = -1, j = 0;
+ for (int i = 0; i < str.length(); i++)
+ // indexof函数,返回字串首次出现的位置;charAt函数返回index位置处的字符;
+ {
+ if ("0123456789.".indexOf(str.charAt(i)) >= 0)
+ {
+ s = "";// 作为承接字符,每次开始时都要清空
+ for (; i < str.length() && "0123456789.".indexOf(str.charAt(i)) >= 0; i++) {
+ s = s + str.charAt(i);
+
+ }
+ i--;
+ postQueue[j] = s;// 数字字符直接加入后缀表达式
+ j++;
+ }
+ else if ("(".indexOf(str.charAt(i)) >= 0) {// 遇到左括号
+ top++;
+ opStack[top] = str.charAt(i);
+ }
+ else if (")".indexOf(str.charAt(i)) >= 0) {// 遇到右括号
+ for (;;)
+ {
+ if (opStack[top] != '(') {
+ postQueue[j] = opStack[top] + "";
+ j++;
+ top--;
+ } else {
+ top--;
+ break;// 循环结束
+ }
+ }
+ }
+ else if ("*%/+-".indexOf(str.charAt(i)) >= 0)// 遇到运算符
+ {
+ if (top == -1)
+ {
+ top++;
+ opStack[top] = str.charAt(i);
+ }
+ else if ("*%/".indexOf(opStack[top]) >= 0)
+ {
+ postQueue[j] = opStack[top] + "";
+ j++;
+ opStack[top] = str.charAt(i);
+ }
+ else
+ {
+ top++;
+ opStack[top] = str.charAt(i);
+ }
+ }
+ }
+ while (top != -1) {
+ postQueue[j] = opStack[top] + "";
+ j++;
+ top--;
+ }
+ return postQueue;
+ }
+
+ //开方运算方法
+ public String kfys(String str) {
+ String result = "";
+ double a = Double.parseDouble(str), b = 0;
+ b = Math.sqrt(a);
+ result = String.valueOf(b);//将运算结果转换为string类型并赋给类型为string的变量result
+ return result;
+ }
+
+ //平方运算方法
+ public String pfys(String str) {
+ String result = "";
+ double a = Double.parseDouble(str), b = 0;
+ b = Math.pow(a, 2);
+ result = String.valueOf(b);
+ return result;
+ }
+
+ // 计算后缀表达式,并返回最终结果
+ public String Result(String[] str) {
+ String[] Result = new String[100];// 数据类型为字符串
+ int Top = -1;
+ for (int i = 0; str[i] != null; i++) {
+ if ("+-*%/".indexOf(str[i]) < 0) {
+ Top++;
+ Result[Top] = str[i];
+ }
+ if ("+-*%/".indexOf(str[i]) >= 0)
+ {
+ double x, y, n;
+ x = Double.parseDouble(Result[Top]);
+ Top--;
+ y = Double.parseDouble(Result[Top]);
+ Top--;
+ if ("*".indexOf(str[i]) >= 0) {
+ n = y * x;
+ Top++;
+ Result[Top] = String.valueOf(n);
+
+ }
+ if ("/".indexOf(str[i]) >= 0)
+ {
+ if (x == 0)// 被除数不允许为0,避免产生运算错误
+ {
+ String s = "error!";
+ return s;
+ } else {
+ n = y / x;
+ Top++;
+ Result[Top] = String.valueOf(n);
+ }
+ }
+ if ("%".indexOf(str[i]) >= 0)
+ {
+ if (x == 0)// 被除数不允许为0,同上
+ {
+ String s = "error!";
+ return s;
+ } else {
+ n = y % x;
+ Top++;
+ Result[Top] = String.valueOf(n);
+ }
+ }
+ if ("-".indexOf(str[i]) >= 0) {
+ n = y - x;
+ Top++;
+ Result[Top] = String.valueOf(n);
+ }
+ if ("+".indexOf(str[i]) >= 0) {
+ n = y + x;
+ Top++;
+ Result[Top] = String.valueOf(n);
+ }
+ }
+ }
+ return Result[Top];// 返回最终结果
+ }
+
+ // Main函数
+ public static void main(String[] args) {
+ Calculator a = new Calculator();
+ }
+}
+
diff --git a/src/java2022spring/Test.java b/src/java2022spring/Happy.java
similarity index 52%
rename from src/java2022spring/Test.java
rename to src/java2022spring/Happy.java
index 24deb29bfc0e5f50fdedcd21b504e77b529d48b6..722c4a738b5d748ac80a153bfa080007da027a0b 100644
--- a/src/java2022spring/Test.java
+++ b/src/java2022spring/Happy.java
@@ -1,7 +1,7 @@
-package java2022spring;
-
-public class Test {
- public static void main(String[] args) {
- System.out.println("Hello world!");
- }
-}
+package java2022spring;
+
+public class Happy{
+ public static void main(String[] args) {
+ System.out.println("kqr");
+ }
+}