Java实现图形化计算器(支持括号、开平方)

Java实习作业,实现一个图形化计算器,正好赶上周末作业不多就写了一个计算器。功能不是特别全,但是能满足一些最基本的需求(比如小学三年级及以下的数学题,,,也不一定能算对,,,)(手动滑稽)。代码注释写的比较详尽,不多说赘述。目前时间及能力有限,代码中可(ken)能(ding)还有bug,欢迎测试&扩展。

程序运行界面如下:
上菜~

//@Calculater.java
import java.awt.Font;
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;/*** 2019.10.27更新:* 修复bug:* 1.添加了除零的判断并给出提示* 2.避免了科学记数法产生的‘E’使程序崩溃* 3.添加了表达式符号运与算数不匹配(如3-)*   的判断(通过栈空和栈剩余的判断)。* *//*** @版本:V2.0* @作者:猪猪侠的Laser_Cannon* @时间: 2019.10.27* @博客:https://blog.csdn.net/qq_43312718* * @描述:* 简易计算器的实现代码,能够计算开方,百分数,倒数* 及简单的带有小括号的中缀表达式。* * @说明:* 代码全部为自己所写,由于时间能力不足,代码仍有很* 多问题和未实现的功能,今后会逐渐更新和完善。若发* 现bug或计算错误的表达式,欢迎私我,一定认真对待。* * @已实现的功能:* 1.简单的表达式计算,包括 + - * /运算符,正负号,*   开平方,求倒数,百分数及括号功能,以及退格,清空。* 2.输入表达式时自动更新上下两文本框(仿Windows自*   带计算器界面),并将最后的运算结果显示在下方文本*   框,将表达式显示在上方文本框。* 3.简单的表达式检查功能,能够检查括号不匹配、除以零、*   等部分表达式错误。* 4.运算符输入限制和辅助:连续输入运算符时,不会连续*   向表达式中添加运算符,而是进行运算符更新(将最近*   一次输入的运算符更新)。* 5.小数点限制:在一个运算数中若输入小数点则小数点按*   键暂时失效,以保证每个运算数只有一个小数点;另外,*   当按下小数点时,若下方文本框中没有内容或者仅有运*   算符,则自动在小数点前添加数字0。* 6.数字及小数点输入限制和辅助:输入右括号之后数字键*   及小数点键暂时失效,输入运算符之后重新激活。* 7.其他输入限制和辅助:无法在表达式为空时输入百分号。*   允许输入前导零,计算时自动去除,允许输入多层括号,*   将按照优先级进行计算。* 8.支持开平方函数(sqrt)的多层嵌套,当开平方的运算*   数小于零时将显示表达式错误(Bad str)。* 9.根据表达式长度动态改变上下文本框字体大小,以保证*   上下文本框内容能在文本框中完整显示。* 10.计算结果格式化,自动确定是否输出小数位,并将整数*    部分按照四位分级法显示,即每三位数字用一个逗号隔*    开。* * * * @待实现的功能:* 1.更多按键* 2.界面的美化* 3.表达式检查功能* 4.表达式纠错功能* 5.键盘的监听功能* 6.支持多层开平方嵌套(递归实现)* 6.动态改变改变组件大小(跟随窗口)* 7.一次计算完成后点击运算符号会将上次运算结果保留*   并加入这次的运算表达式中* 8.菜单栏的更多功能:进制转换计算器、运算历史记录* 9.更多及更强大的输入限制及辅助功能* 10.高精度及大数类的使用,以实现更强的计算器功能* 11.百分号前可以添加括号括起来的表达式* 12.正负号按键功能的优化:当前仅是每次按下正负号*    就会添加“(-”,后续将更改为判断正负,若为负*    则去掉负号,否则添加负号* 13.支持自行设置小数点后显示的位数* *//*** @类说明:* 计算器的界面生成,以及事件监听响应功能。* * @类结构:* public class Calculater extends JFrame {*   public static void main(String[] args){}*   public Calculater(){}                   //构造函数,生成主界面*    class btnActionListener implements ActionListener{} //按键监听事件响应内部类*  class btnKeyListener implements KeyListener{}       //键盘监听(未实现)* }*/public class Calculater extends JFrame {private static final long serialVersionUID = 1L;/** @flag* 用于标记是否完成了一次运算,每次计算完成之后* 即每次点击'='之后其值更新为真,之后再次点击* 任何按键将清空文本框,并将其值更新为false。* ** @point* 若正在输入运算数(即非运算符),则point生效,* 用于标记当前运算数是否已经输入小数点,以保证* 每个运算数只能有一个小数点。*/private boolean flag = false;private boolean point = false;private JPanel contentPane;    //主窗格private JTextField txtUnder;   //上层文本框,用于显示输入的表达式private JTextField txtUpper;  //下层文本框,用于显示当前的输入private String strUpper = "";   //上层文本private String strUnder = "";  //下层文本public static void main(String[] args) {Calculater frame = new Calculater();frame.setVisible(true);//frame.setResizable(false);  //不可更改窗口大小}public Calculater() {setTitle("简易计算器-猪猪侠的Laser_Cannon");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 416, 620);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);/*** 生成文本窗格,窗格分两层。输入计算表达式时表达* 式显示在下层。开始时均为空。输入计算表达式时,* 上下层文本框实时更新。点击等于号之后下层文本框* 显示运算结果,上层显示表达式。再次点击任何按键* 重置计算器并显示该键。*/JPanel paneText = new JPanel();        //添加文本窗格paneText.setBounds(0, 0, 400, 170);contentPane.add(paneText);paneText.setLayout(null);txtUpper = new JTextField(strUpper); //添加上方文本框txtUpper.setHorizontalAlignment(JTextField.RIGHT); //设置文本右对齐txtUpper.setFont(new Font("Consolas", Font.PLAIN, 30));txtUpper.setEditable(false);txtUpper.setBounds(0, 0, 400, 65);paneText.add(txtUpper);txtUnder = new JTextField(strUnder);    //添加下方文本框txtUnder.setHorizontalAlignment(JTextField.RIGHT); //设置文本右对齐txtUnder.setFont(new Font("Consolas", Font.PLAIN, 50));txtUnder.setEditable(false);txtUnder.setBounds(0, 65, 400, 105);paneText.add(txtUnder);/*** 生成按键窗格,采用字符串数组以循环形式生成按键。*/JPanel PaneButton = new JPanel();       //添加按键窗格PaneButton.setBounds(0, 170, 400, 412);contentPane.add(PaneButton);PaneButton.setLayout(new GridLayout(6, 4, 0, 0));String[] btn = {"(",")","CE","Del","%","sqrt","1/X","*",   //设置按键文字"7","8","9","/","4","5","6","+","1","2","3","-","±","0",".","="};for(int i=0;i<btn.length;i++) {            //添加按键Button button = new Button(btn[i]);button.setFont(new Font("Consolas", Font.PLAIN, 25));button.addActionListener(new btnActionListener());     //添加监听器//button.addKeyListener(new btnKeyListener());PaneButton.add(button);}}/*** 内部类,实现按键的监听功能,并实时更新上下* 两个文本窗格的显示内容。*/class btnActionListener implements ActionListener{public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();/*** 检查更新flag,若flag为真,清空上下文本框。* @flag* 用于标记是否完成了一次运算,每次计算完成之后* 即每次点击'='之后其值更新为真,之后再次点击* 任何按键将清空文本框,并将其值更新为false。*/if(flag) {strUnder = "";strUpper = "";flag = false;}/** * 检查更新point,(point为真,小数点按键失效)* 若point为真且当前响应按键为运算符,则将point* 置为假,此时小数点生效。* @point* 若正在输入运算数(即非运算符),则point生效,* 用于标记当前运算数是否已经输入小数点,以保证* 每个运算数只能有一个小数点。*/char a = cmd.charAt(0);if(point && cmd.length()==1 && (a<'0'||a>'9') && a!='.') {point = false;}//清空键,将上下文本框清空,等待下次输入。if(cmd.equals("CE")) {strUpper = "";strUnder = "";}//删除键,将下方文本框中的最后一个字符(若存在)//删掉,但无法删除上方文本框的字符。else if (cmd.equals("Del")) {if(strUnder.length()>0) {strUnder = strUnder.substring(0,strUnder.length()-1);}}//基本运算符,将下方文本框的内容移至上方文本框,//若下方文本框首字符为左括号,则延迟上移操作至//下次输入右括号时(此处待优化,功能将改为当左右//括号数量匹配时再进行上移操作)else if(cmd.equals("+")||cmd.equals("-")||cmd.equals("*")||cmd.equals("/")) {char s = ' ';if(!strUnder.isEmpty()) {       //获取下方文本框最后字符s = strUnder.charAt(strUnder.length()-1);}if(strUpper.isEmpty()&&strUnder.isEmpty()) {}   //上下均空时运算符按键失效else if(!strUnder.isEmpty()&&(s=='+'||s=='-'||s=='*'||s=='/')) { //当已经输入一个运算符时,再次输入视为运算符更新strUnder = strUnder.substring(0,strUnder.length()-1)+cmd;}else if(!strUnder.isEmpty()&&strUnder.charAt(0)!='(') {strUpper += strUnder;strUnder = cmd;}else {strUnder += cmd;}}//左括号按键else if(cmd.equals("(")) {strUpper += strUnder;strUnder = cmd;}//右括号按键,将下方文本框内容上移else if(cmd.equals(")")) {strUpper = strUpper + strUnder + ")";strUnder = "";}//百分号按键,当下层问空时百分号键失效else if (cmd.equals("%")) {if(strUpper.isEmpty()&&strUnder.isEmpty()) {}else {strUpper += strUnder;strUnder = cmd;}}//开平方按键else if (cmd.equals("sqrt")) {strUpper += strUnder;strUnder = "sqrt(";}//求倒数按键//避免了下层文本框有运算符时点击“1/X”键会出现“1/(+”的问题。else if (cmd.equals("1/X")) {if(!strUnder.isEmpty()) {char t = strUnder.charAt(0);if(t=='+'||t=='-'||t=='*'||t=='/') {strUpper += t;strUnder = strUnder.substring(1,strUnder.length());}}strUnder = "1/(" + strUnder;}//正负号按键,在下方文本框中的文本前加上“(-”(此处待优化)else if (cmd.equals("±")) {strUnder = strUnder + "(-";}//小数点按键。若point为真,按键失效。否则,下方文本框添加//小数点并point的值赋为真,开始生效。另外,若按下小数点时//表达式为空或前一位非数字,则自动在小数点前添加数字0。//下层为空上层非空时小数点按键失效。(避免右括号之后输入数字)else if(cmd.equals(".")) {if(point) {return;}else if(strUnder.isEmpty()&&!strUpper.isEmpty()) {}  else if(strUnder.isEmpty()) {strUnder += "0.";point = true;}else {char t = strUnder.charAt(strUnder.length()-1);if(t<'0'||t>'9') {strUpper += strUnder;strUnder = "0.";}else strUnder += ".";point = true;}}//等于号按键,按下即触发计算表达式,并将flag赋为真,下次点//击任何按键将清空上下文本框(此处待优化)。else if (cmd.equals("=")) {if(strUnder.isEmpty()&&strUpper.isEmpty()) {return;}flag = true;strUpper += strUnder;strUnder = Calculate.calc(strUpper);}//数字按键,若之前下方文本框有基本运算符则将其上移。//下层为空上层非空时数字键失效else {if(strUnder.isEmpty()&&!strUpper.isEmpty()) {}  else if(strUnder.isEmpty()) {strUnder += cmd;}else {char t = strUnder.charAt(strUnder.length()-1);if((t=='+'||t=='-'||t=='*'||t=='/') && (strUnder.charAt(0)!='(')) {strUpper += strUnder;strUnder = cmd;}else {strUnder += cmd;}}}txtUpper.setText(strUpper);  //更新上方文本框的文本if(strUpper.length()>23) {txtUpper.setFont(new Font("Consolas", Font.PLAIN, 690/strUpper.length()));}else {txtUpper.setFont(new Font("Consolas", Font.PLAIN, 30));}txtUnder.setText(strUnder);   //更新下方文本框的文本if(strUnder.length()>15) {txtUnder.setFont(new Font("Consolas", Font.PLAIN, 700/strUnder.length()));}else {txtUnder.setFont(new Font("Consolas", Font.PLAIN, 50));}}}//  class btnKeyListener implements KeyListener{    //键盘监听功能
//      @Override
//      public void keyTyped(KeyEvent e) {//      }
//      @Override
//      public void keyPressed(KeyEvent e) {//      }
//      @Override
//      public void keyReleased(KeyEvent e) {//      }
//  }}
//@Calculate.java
import java.util.Stack;
import java.util.StringTokenizer;/*** @类说明:* 表达式计算静态方法类,包括表达式计算、表达式纠错、* 表达式预处理三个静态方法。若表达式有误返回包含错误* 说明的字符串,否则返回计算结果的字符串形式。* * @类结构:* public class Calculate {*     public static String calc(String str) {}        //表达式计算(调用各个方法)*  private static boolean checkString(String str) {}   //表达式检查(检查括号匹配)*  private static String Preprocess(String str) {}     //表达式预处理(计算sqrt及%)*   private static String getcalc(String str) {}        //初等表达式计算(中缀转后缀)* }*/
public class Calculate {/*** 表达式计算方法,首先调用纠错方法及预处理方法进行初步处理,* 再通过栈进行中缀表达式转后缀表达式,最后返回计算结果的字符* 串,是否返回小数位具取决于小数部分是否为0。*/public static String calc(String str) {if (checkString(str) == false) { //检查括号匹配return "Bad str";}str = Preprocess(str);if(str.equals("Bad sqrt")||str.equals("Devide 0")) {    //检查开平方数是否为正return str;}str = getcalc(str);        //进行计算(此时仅包含基本运算符和小括号)if(str.equals("Bad str")||str.equals("Devide 0")) {return str;}java.text.DecimalFormat format = new java.text.DecimalFormat("#,###.######");//数值格式化return format.format(Double.parseDouble(str));}/*** 表达式纠错方法,目前功能仅限于检查左右小括号的匹配, * 后续准备加入更多的纠错功能,如运算符与运算数的匹配。*/private static boolean checkString(String str) {// 检查括号括号匹配Stack<Character> sta = new Stack<Character>();for (int i = 0; i < str.length(); i++) {if (str.charAt(i) == '(') {sta.push(str.charAt(i));} else if (str.charAt(i) == ')') {if (sta.empty() || sta.peek() != '(') {return false;} else {sta.pop();}}}if (sta.size() > 0)return false;return true;}/*** 表达式预处理方法,计算表达式中的一元运算符的* 部分(sqrt及%)。并将负号做处理以便计算。*/private static String Preprocess(String str) {for (int i = 0; i < str.length()-1; i++) {if (str.charAt(i) == '(' && str.charAt(i + 1) == '-') { //将“(-”转化为“(0-”str = str.substring(0, i + 1) + "0" + str.substring(i + 1, str.length());}}for (int i = str.length()-1; i>=0; i--) {//从后向前遍历,以支持sqrt的多层嵌套if (str.charAt(i) == 's') { //计算开平方int cnt = 1;for (int j = i + 5; j < str.length(); j++) {if(str.charAt(j)=='(') {cnt++;}else if(str.charAt(j)==')') {cnt--;}if (cnt==0) {//左右括号达到匹配,即可获得根号下的完整表达式String s = getcalc(str.substring(i + 5, j));if(s.equals("Devide 0")) {return s;}double sqrt = Double.parseDouble(s);if(sqrt<0) {return "Bad sqrt";}str = str.substring(0, i)+ String.valueOf(Math.sqrt(sqrt))+ str.substring(j + 1, str.length());break;}}}}for (int i = 0; i<str.length(); i++) {//从后向前遍历,以支持sqrt的多层嵌套if (str.charAt(i) == '%') { //计算百分比for (int j = i - 1; j >= 0; j--) {if (j == 0) {if (i < str.length() - 1) {str = String.valueOf(Double.parseDouble(str.substring(0, i)) / 100)+ str.substring(i + 1, str.length());} else {str = String.valueOf(Double.parseDouble(str.substring(0, i)) / 100);}break;}char t = str.charAt(j);if ((t > '9' || t < '0') && t != '.') {if (i < str.length() - 1) {str = str.substring(0, j + 1)+ String.valueOf(Double.parseDouble(str.substring(j + 1, i)) / 100)+ str.substring(i + 1, str.length());} else {str = str.substring(0, j + 1)+ String.valueOf(Double.parseDouble(str.substring(j + 1, i)) / 100);}break;}}}}return str;}private static String getcalc(String str) {if (str.isEmpty()) {return str;}/*** 将中缀表达式转换为后缀表达式,并在运算数与运算符之间* 添加分隔符‘$’,最后进行后缀表达式的计算。中缀表达式* 储存在str中,后缀表达式储存在s中。*/Stack<Character> sta = new Stack<Character>();String s = "$";int i = 0;if (str.charAt(0) == '(') {sta.push('(');i++;}boolean flag = false;for (; i < str.length(); i++) {if (str.charAt(i) == '+' && (i == 0 || (str.charAt(i - 1) < '0' && str.charAt(i - 1) != ')')))i++;if (str.charAt(i) == '-') {flag = true;i++;}while (i < (int) str.length() && ((str.charAt(i) >= '0' && str.charAt(i) <= '9') || str.charAt(i) == '.' || str.charAt(i)=='E')) {if (flag) {s += "-$";flag = false;}s += str.charAt(i);i++;}s += "$";if (i < (int) str.length()) {if (sta.empty() || str.charAt(i) == '(')sta.push(str.charAt(i));else if (str.charAt(i) == '+' || str.charAt(i) == '-') {while (sta.size() > 0 && sta.peek() != '(') {s += sta.pop() + "$";}sta.push(str.charAt(i));} else if (str.charAt(i) == '*' || str.charAt(i) == '/') {while (sta.size() > 0 && (sta.peek() == '*' || sta.peek() == '/')) {s += sta.pop() + "$";}sta.push(str.charAt(i));} else {while (sta.size() > 0 && sta.peek() != '(') {s += sta.pop() + "$";}sta.pop();}}}while (sta.size() > 0) {s += sta.pop() + "$";}/*** 进行后缀表达式的计算*/Stack<Double> stack = new Stack<Double>();StringTokenizer token = new StringTokenizer(s, "$", false);while (token.hasMoreTokens()) {String t = token.nextToken();if((t.equals("+")||t.equals("-")||t.equals("*")||t.equals("/"))&&stack.size()<2) {return "Bad str";}if (t.equals("+")) {stack.push(stack.pop() + stack.pop());} else if (t.equals("-")) {double a = stack.pop();stack.push(stack.pop() - a);} else if (t.equals("*")) {stack.push(stack.pop() * stack.pop());} else if (t.equals("/")) {double a = stack.pop();if(Math.abs(a-0)<1E-6) {return "Devide 0";}stack.push(stack.pop() / a);} else {stack.push(Double.parseDouble(t));}}double c = stack.pop();if(sta.size()>0) {return "Bad Str";}return String.valueOf(c);}}/*** 来自stackoverflow的eval实现,支持以下符号运算* sqrt cos sin tan ^ + - / * . ( )* 使用应首先检查表达式是否正确,否则可能导致程序崩溃。* 在此备份待学习。*/
//public static double eval(final String str) {//    return new Object() {//        int pos = -1, ch;
//
//        void nextChar() {//            ch = (++pos < str.length()) ? str.charAt(pos) : -1;
//        }
//
//        boolean eat(int charToEat) {//            while (ch == ' ') nextChar();
//            if (ch == charToEat) {//                nextChar();
//                return true;
//            }
//            return false;
//        }
//
//        double parse() {//            nextChar();
//            double x = parseExpression();
//            if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
//            return x;
//        }
//
//        // Grammar:
//        // expression = term | expression `+` term | expression `-` term
//        // term = factor | term `*` factor | term `/` factor
//        // factor = `+` factor | `-` factor | `(` expression `)`
//        //        | number | functionName factor | factor `^` factor
//
//        double parseExpression() {//            double x = parseTerm();
//            for (;;) {//                if      (eat('+')) x += parseTerm(); // addition
//                else if (eat('-')) x -= parseTerm(); // subtraction
//                else return x;
//            }
//        }
//
//        double parseTerm() {//            double x = parseFactor();
//            for (;;) {//                if      (eat('*')) x *= parseFactor(); // multiplication
//                else if (eat('/')) x /= parseFactor(); // division
//                else return x;
//            }
//        }
//
//        double parseFactor() {//            if (eat('+')) return parseFactor(); // unary plus
//            if (eat('-')) return -parseFactor(); // unary minus
//
//            double x;
//            int startPos = this.pos;
//            if (eat('(')) { // parentheses
//                x = parseExpression();
//                eat(')');
//            } else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
//                while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
//                x = Double.parseDouble(str.substring(startPos, this.pos));
//            } else if (ch >= 'a' && ch <= 'z') { // functions
//                while (ch >= 'a' && ch <= 'z') nextChar();
//                String func = str.substring(startPos, this.pos);
//                x = parseFactor();
//                if (func.equals("sqrt")) x = Math.sqrt(x);
//                else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
//                else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
//                else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
//                else throw new RuntimeException("Unknown function: " + func);
//            } else {//                throw new RuntimeException("Unexpected: " + (char)ch);
//            }
//
//            if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation
//
//            return x;
//        }
//    }.parse();
//}

Java实现图形化计算器(支持括号、开平方)相关推荐

  1. 【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器

    一. 实验任务(实验题目.目的) 搞个图形化的代括号的计算器 二. 任务分析 假设已经有了计算器,实现按下等号的计算算法 学习qt 设置各按钮槽函数 将算法缝合进qt内 设计实现负数.小数 优化代码计 ...

  2. JAVA Swing 图形化界面编程

    JAVA Swing 图形化界面编程 目录 1.组件 1.1 基本组件 1.2. 组件边框 1.3. JToolBar 工具条 1.4 JColorChooser 颜色选择器 1.5 JFileCho ...

  3. JAVA学习——图形化窗口图标设置

    JAVA学习--图形化窗口图标设置 一.问题: 明明按着老师的代码来学习,但是我死活都改变不了图形化窗口左上角的小图标,为什么呢? 先上代码: Image im=(new ImageIcon(path ...

  4. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  5. java之图形化界面(GUI)

    一.概述 用户与计算机进行交换的方式有两种: GLI:Command lin User Interface(命令行用户接口),也就是常见的dos窗口,它需要记住一些常用的命令,操作不直观方便. GUI ...

  6. java 高级 图形化界面_java高级图形化界面

    java.awt.event.WindowAdapter 是一个接口 学生的答案: C 标准答案: C 该题分数:4.0 学生得分: 4.0 分 9. 在基于 Swing 的图形用户界面设计中,面板属 ...

  7. 基于Java的图形化中国象棋游戏+PPT文档

    下载地址 介绍 (具有网络通信功能) 使用Java语言实现的经典中国象棋程序, 带有演讲PPT文档 功能 登录功能 登录与游戏界面之间添加闪屏界面(类似启动页图片) 游戏准备 投降认输 悔棋 聊天沟通 ...

  8. java基础-图形化界面(一)

    JPanel 是 JComponent 的直接子类(可以用JPanel替换 JComponent) Graphics2D是Graphics的子类 Graphics2D类 getX(),getY(),g ...

  9. c语言遇到非法字符,98行的四则计算器.(支持括号)加入了非法字符的检测

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

最新文章

  1. Python的数据库操作(Sqlalchemy)
  2. 做好准备迎接崭新的BCH了吗?
  3. JAVA 创建线程池
  4. web前后台数据交互
  5. comparator比较器用法_Python学习:好像很少人知道 Python iter() 的另外一个用法?...
  6. 重命名数据库表空间和数据文件
  7. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
  8. 【总结】实现点击累加效果的几种方式对比
  9. 深入理解 OUI(Oracle Universal Installer)
  10. VMware Workstation Pro 虚拟机做RAID
  11. 动画交互原型设计:Principle for Mac
  12. [读书笔记]密码文件总结
  13. 部署war包到tomcat根目录
  14. 调试工具之UDP/TCP网络调试助手NetAssist
  15. ETL工具kettle之Java脚本+Elasticsearch bulk insert
  16. 深港澳金融科技师(SHMFTTP)一级考试
  17. 压力变送器matlab,总结压差变送器三种不同故障以及处理方法[理论结合实际]
  18. 搭建企业级ELK日志分析系统
  19. 微信公众平台开发(六) 翻译功能开发
  20. 推挽电路原理“上P下N”及“上N下P”的区别

热门文章

  1. python backspace 转义_如何将backspace\x08应用于字符串?
  2. S5PV210系列之刷机【部署 烧写】
  3. 计算机在学校的使用英语作文,学生使用电脑大学英语作文
  4. 「知识连载」 如何用钉钉宜搭制定企业疫情防控数字化管理方案
  5. 医疗器械维修前景如何
  6. 关于IGS安装后只有ABB等少数几个驱动解决方法
  7. Elasticsearch实战 | 如何从数千万手机号中识别出情侣号?
  8. 计算机硬件电信号和二进制之间是什么关系,ch2_计算机硬件基础.ppt
  9. 变种 背包问题_01背包及其变种(物品无限背包、恰好装满背包)
  10. SVM算法(Support Vector Machine)