zoukankan      html  css  js  c++  java
  • java Swing 简单计算器实现

    用java swing 写了一个计算器的图形。

    其实图形部分并不多,目前不仅有图形,还能输入并显示,只是没有计算功能,点击按钮显示相对输入,在对输入规则上费了一些时间

      1 package myJavaSwing;
      2 
      3 import jdk.internal.cmm.SystemResourcePressureImpl;
      4 import sun.awt.image.BufImgSurfaceData;
      5 import sun.plugin2.ipc.windows.WindowsIPCFactory;
      6 
      7 import javax.swing.*;
      8 import javax.swing.border.Border;
      9 import javax.swing.border.LineBorder;
     10 import javax.swing.plaf.metal.MetalBorders;
     11 import java.awt.*;
     12 import java.awt.event.ActionEvent;
     13 import java.awt.event.ActionListener;
     14 import java.math.*;
     15 
     16 public class myJavaSwing{
     17     JFrame          frame;
     18     JPanel          panel;
     19     JButton[][]     buttons;
     20     JTextField      resultShow;
     21     JTextField      resultShow2;
     22     String          inputString;
     23     buttonAction    Action;
     24     int             row;                    //偏移量
     25     int             line;
     26     boolean         calFlag;                //是否科学计算器,按钮布局和功能差异
     27     static Double   E     = 2.7182818285;
     28     static Double   PI    = 3.1415926536;
     29     
     30     
     31     public myJavaSwing(){
     32         this(false);
     33     }
     34 
     35     /**
     36      * 构造方法 新建 frame panel等实例,其他啥也不做
     37      * 其他东西全在lunch里面了
     38      * @param isScin
     39      */
     40     public myJavaSwing(boolean isScin)
     41     {
     42        frame                = new JFrame("小小计算器");     //新建frame 设置标题
     43        panel                = new JPanel();                    //创建面板
     44        Action               = new buttonAction();              //创建监听实例
     45        inputString          = new String("0");          //初始显示0
     46        resultShow           = new JTextField();
     47        resultShow2          = new JTextField();
     48        calFlag = isScin;                                        //是否科学计算器
     49                            //居中显示
     50         
     51 
     52     }
     53 
     54     /**
     55      * 用于在普通界面 和plus 之间切换
     56      * 就重新构建panel视图
     57      */
     58     public void lunchChange(){
     59         frame.setVisible(false);
     60         frame = new JFrame("小小计算器");
     61         panel = new JPanel();
     62         calFlag = !calFlag;
     63         frame.setVisible(true);
     64         panel.setVisible(true);
     65         lunch();
     66     }
     67 
     68     /**
     69      * 负责初始化按钮
     70      * 文字框,设定属性,并显示出来
     71      */
     72     public void lunch(){
     73         frame.setSize(400,700);                     //设置frame大小
     74         frame.setLayout(new GridBagLayout());                    //使用 表格包布局
     75         frame.setResizable(false);                               //frame大小不可改变
     76         frame.setLocationRelativeTo(null);
     77         if(calFlag){                                             //设置是否科学计算器
     78             row  = 2;
     79             line = 1;
     80         }else{
     81             row  = 0;
     82             line = 0;
     83         }
     84         buttons = new JButton[6 + row][5 + line];
     85         for (int i = 1; i <= 3;i++) {
     86             for (int j = 1;j <= 3;j++){
     87                 buttons[i + 1 + row][j + line] = new JButton(9 - (3*i) + j + "");
     88             }
     89         }
     90 
     91         buttons[1 + row][line + 1] = new JButton("清零");
     92         buttons[1 + row][line + 2] = new JButton("删除");
     93         buttons[1 + row][line + 3] = new JButton("÷");
     94         buttons[1 + row][line + 4] = new JButton("*");
     95         buttons[2 + row][line + 4] = new JButton("-");
     96         buttons[3 + row][line + 4] = new JButton("+");
     97         buttons[4 + row][line + 4] = new JButton("=");
     98         buttons[5 + row][line + 1] = new JButton("切换");
     99         buttons[5 + row][line + 2] = new JButton("0");
    100         buttons[5 + row][line + 3] = new JButton(".");
    101         buttons[5 + row][line + 4] = new JButton("none");
    102 
    103         if(calFlag){                                                     //为科学计算器设置按钮
    104 
    105 
    106             buttons[5 + row][line + 1].setText("%");
    107 
    108             buttons[1][1] = new JButton("切换");
    109             buttons[1][2] = new JButton("2nd");
    110             buttons[1][3] = new JButton("sin(");
    111             buttons[1][4] = new JButton("cos(");
    112             buttons[1][5] = new JButton("tan(");
    113 
    114             buttons[2][1] = new JButton("^");
    115             buttons[2][2] = new JButton("lg(");
    116             buttons[2][3] = new JButton("ln(");
    117             buttons[2][4] = new JButton("(");
    118             buttons[2][5] = new JButton(")");
    119 
    120             buttons[3][1] = new JButton("√");
    121             buttons[4][1] = new JButton("n!");
    122             buttons[5][1] = new JButton("1/X");
    123             buttons[6][1] = new JButton("π");
    124             buttons[7][1] = new JButton("e");
    125         }
    126 
    127         //设置所有按钮的属性
    128         for (int i = 1; i <= 5 + row;i++) {
    129             for (int j = 1;j <= 4 + line;j++){
    130                 try{
    131                     buttons[i][j].setBackground(new Color(250, 250, 250,100));
    132                     buttons[i][j].setFont(new Font("Arabic", Font.PLAIN, 20));
    133                     buttons[i][j].setBorder(BorderFactory.createLineBorder(Color.black,0,true));
    134                     buttons[i][j].addActionListener(Action);
    135                 }catch (NullPointerException e) {
    136                     System.out.println("NO." + i + row + "row " + j + line + "line NULLPOINTER" );
    137                 }
    138             }
    139         }
    140 
    141 
    142         resultShow.setHorizontalAlignment(SwingConstants.RIGHT);//文字右对齐
    143         resultShow.setColumns(18);                              //设置文本框的列数是18
    144         //resultShow.setBackground(Color.black);
    145         resultShow.setEditable(false);                          //不可编辑
    146         //resultShow.setText("0");
    147         //resultShow.setSize(400,100);
    148         resultShow.setFont(new Font("null",Font.BOLD,40));
    149         resultShow.setBorder(null);
    150 
    151         GridBagConstraints contains = new GridBagConstraints();
    152         contains.weightx = 0.5;                                 //多余部分占用比例 ?????
    153         contains.weighty = 1;
    154         contains.gridx = 1;
    155         contains.gridy = 1;
    156         contains.gridwidth = 4 + row;
    157         contains.gridheight = 1;
    158         contains.fill = GridBagConstraints.HORIZONTAL;
    159 
    160         this.frame.add(resultShow,contains);
    161         contains.gridx = 1;
    162         contains.gridy = 2;
    163 
    164         resultShow2.setHorizontalAlignment(SwingConstants.RIGHT);//文字右对齐
    165         resultShow2.setColumns(18);                              //设置文本框的列数是18
    166         resultShow2.setText(inputString);
    167         resultShow2.setEditable(false);                          //不可编辑
    168         resultShow2.setSize(400,80);
    169         resultShow2.setFont(new Font("null",Font.BOLD,40));
    170         resultShow2.setBorder(null);
    171 
    172         this.frame.add(resultShow2,contains);
    173 
    174 
    175         contains.fill = GridBagConstraints.BOTH;
    176         contains.gridheight = 1;                                 //占用行列
    177         contains.gridwidth = 1;
    178         for (int i = 1; i <= 5 + row;i++) {
    179             for (int j = 1;j <= 4 + line;j++){
    180                 if (i == 4 + row && j == 4 + line){
    181                     contains.gridheight = 2;                     //占用行列
    182                     contains.gridwidth = 1;
    183                     contains.gridx = j;                          // 行和列
    184                     contains.gridy = i + 2;
    185                     this.frame.add(buttons[i][j],contains);
    186                     contains.gridheight = 1;
    187                 }else if (i != 5 + row || j != 4 + line ){
    188                     contains.gridx = j;                           // 行和列
    189                     contains.gridy = i + 2;
    190                     this.frame.add(buttons[i][j],contains);
    191                 }
    192                 String str = buttons[i][j].getText();
    193                 System.out.println(str);
    194             }
    195         }
    196         //全部好了,让他显示出来
    197         this.frame.setVisible(true);
    198     }
    199 
    200     public void freshResult(String s){
    201         this.resultShow.setText(s.replace(" ",""));
    202     }
    203     public void freshResultShow2(){
    204         System.out.println("当前内容:" + inputString);
    205         if (inputString.length() != 0){
    206             this.resultShow2.setText(this.inputString.replace(" ",""));
    207         }else {
    208             this.resultShow2.setText("0");
    209         }
    210 
    211     }
    212 
    213     /**写出来用于解析并计算的类
    214      * 这是
    215      */
    216     class Calculator{
    217         String exp;
    218 
    219         Calculator(){
    220             this("0");
    221         }
    222         Calculator(String s){
    223             exp = s;
    224         }
    225 
    226         public Double getAnser(){
    227             int i = 0;
    228             while (true){
    229                 char ch = exp.charAt(i++);
    230                 if (isNum(ch + "")){
    231                     break;
    232                 }
    233                 return 0.0;
    234             }
    235 
    236 
    237             return 0.00000000;
    238         }
    239 
    240         private  String numSqrt(String s) throws Exception{
    241             if (s.indexOf('.') > 10 || s.indexOf('-') != -1){              //数值过大或含有负号
    242                 throw new Exception("输入错误,数值过大或尝试进行负数开方");
    243             }
    244             Double num;                                       //将字符串转换整型
    245             try {
    246                 num = new Double(s);
    247             }catch (Exception e){
    248                 System.out.println(e.getMessage());
    249                 throw new Exception("格式错误");
    250             }
    251             return Math.sqrt(num) + "";
    252         }
    253 
    254 
    255         private String numFactorial(String s) throws Exception{ //阶乘方法
    256             if (s.length() > 10 || s.indexOf('.') != -1){      //过长或含有小数点
    257                 throw new Exception("计算数值过大");
    258             }
    259             long num;                                       //将字符串转换整型
    260             try {
    261                 num = Integer.parseInt(s);
    262             }catch (Exception e){
    263                 System.out.println(e.getMessage());
    264                 throw new Exception("格式错误");
    265             }
    266             num = Integer.parseInt(s);
    267             if(num == 1 || num == 0){                       //计算阶乘 返回结果
    268                 return "1";                                 //但是,写完发现好像原来有这个方法。。。。。
    269             }else{
    270                 long temp;
    271                 try{
    272                     temp = Integer.parseInt(numFactorial(num - 1 + ""));
    273                 }catch (Exception e){
    274                     throw e;
    275                 }
    276                 return (num * temp) + "";
    277             }
    278         }
    279 
    280         private boolean isNum(String  c){
    281             for (int j = 0;j < c.length() ;j++){
    282                 for (int i = 0;i < 10;i++){
    283                     if ((i + "").equals(c.charAt(j) + "")){
    284                         break;
    285                     }
    286                     if(i == 9){
    287                         return false;
    288                     }
    289                 }
    290             }
    291 
    292             return true;
    293         }
    294 
    295     }
    296 
    297     /**
    298      * 处理案件事件的类
    299      */
    300     class buttonAction implements ActionListener{                   //没写完,正在想方案
    301         @Override
    302         public void actionPerformed(ActionEvent e) {
    303             System.out.println(e.getActionCommand());
    304             String cmd = e.getActionCommand();
    305             if(cmd.equals("删除")){
    306                 inputString = numDelete(inputString);                           //本来直接获取对应按钮文本,但是代码太长了,就直接输字算了
    307                 freshResultShow2();                                             //另外,换了比较方法 替换 ==
    308                 return;
    309             }else if (isMathFunc(cmd)){                                     //几个特殊数学函数
    310                 addInput(cmd);                                                  //例如 sin cos啥的
    311                 return;
    312             }else if (cmd.equals("=")){                                          //开始计算吧,,没写计算方法,比输入方法简单不到哪里去
    313                 cmdAnser();                                                     //输入方法写的我好累。。
    314                 return;                                                         //一堆输入规则
    315             }else if (cmd.equals("清零")){                                        //就是清零呗
    316                 inputString = "0";
    317                 freshResultShow2();
    318                 freshResult("");
    319                 return;
    320             }else if (cmd.equals("切换")){                                        //进行界面切换,将清除所有已输入
    321                 inputString = "0";
    322                 freshResultShow2();
    323                 freshResult("");
    324                 lunchChange();
    325                 return;
    326             }
    327             addInput(e.getActionCommand());                                 //其他的全交给输入了,一大波输入规则即将来袭
    328                                                                                 //我忘写注释了。。。。好难受
    329             /*if(isFunc(e.getActionCommand())){
    330                 //addNum(e.getActionCommand());
    331             }*/
    332         }
    333 
    334         /**
    335          * 判断输入字符串是否全数字
    336          * @param c
    337          * @return
    338          */
    339         private boolean isNum(String  c){
    340             for (int j = 0;j < c.length() ;j++){
    341                 for (int i = 0;i < 10;i++){
    342                     if ((i + "").equals(c.charAt(j) + "")){ //如果是 10 个数当中一个 开始下一个字符
    343                         break;
    344                     }
    345                     if(i == 9){                             //都到9了,还没有匹配到数字
    346                         return false;
    347                     }
    348                 }
    349             }
    350             //全部循环完毕,竟然没有遇到不能匹配的,我给你出彩
    351             return true;
    352         }
    353 
    354 
    355         /**
    356          * 开始计算方法,可能抛出错误
    357          */
    358         private void cmdAnser(){
    359             Calculator cal = new Calculator(inputString);
    360             Double r = 0.000000;
    361             try{
    362                 r = cal.getAnser();
    363             }catch (Exception e1){
    364                 inputString = e1.getMessage();
    365                 freshResultShow2();
    366                 return;
    367             }
    368             freshResult(inputString);
    369             inputString = r.toString();
    370             freshResultShow2();
    371         }
    372 
    373         /**
    374          *
    375          * @param s
    376          * @return boolean
    377          */
    378         private boolean isMathFunc(String s){
    379             if (calFlag == false){
    380                 return false;
    381             }
    382             return ("sin(".equals(s) ||
    383                     "cos(".equals(s) ||
    384                     "tan(".equals(s) ||
    385                     "ln(".equals(s)  ||
    386                     "lg(".equals(s)   ||
    387                     "^".equals(s)    ||
    388                     "√".equals(s)    ||
    389                     "n!".equals(s)   ||
    390                     "1/X".equals(s)
    391                     );
    392         }
    393 
    394         /**
    395          * 十分难受的输入方法,将输入以一定规则放到输入数组里面
    396          * 规则写的很难受,也就不考虑什么效率和漂亮了
    397          * 修修补补好些时间
    398           * @param s
    399          */
    400         private void addInput(String s) {
    401             /**
    402              *如果长度为0 或者只有一个0
    403              * 那就是没有东西咯
    404              * 直接弄上去
    405              **/
    406             int len = inputString.length();
    407             if (len == 0 || (len == 1 && inputString.charAt(0) == '0')) {
    408                 if (".".equals(s)) {
    409                     inputString = " 0 .";
    410                 } else if (s.equals("^") || "1/X".equals(s) || s.equals('%')) {               //+-*/
    411                     inputString = "0";
    412                 } else if (isFunc(s)) {               //+-*/
    413                     inputString = "0 " + s;
    414                 } else if (s.equals("x") || s.equals("/") || s.equals("÷")) {
    415                     inputString = "0 " + s;
    416                 } else {
    417                     if (s.equals("n!")) {
    418                         inputString = "!";
    419                     } else {
    420                         inputString = s;
    421                     }
    422                 }
    423                 freshResultShow2();
    424                 return;
    425             }
    426 
    427             /*
    428             * 获取已输入的最后一个字符来判断下一个输入是否合法
    429             * */
    430             char c = inputString.charAt(inputString.length() - 1);
    431 
    432             /*如果已经输入乘除 阶乘 百分号
    433             * 那么
    434             * 1. 后面直接输入 点 需要自动添加 0
    435             * 2. 仍然输入乘除 则认为纠正刚才输入,替换上一个符号
    436             * 3. 输入加减 可认为正负数,合法,添加
    437             * 4. 其他输入就没什么特别,直接加上 (n!和分数需要稍微变形,留在else里面 这被当作普通输入,将不再提起)
    438             * */
    439             if (c == '*' || c == '÷' || '!' == c || '%' == c) {
    440                 if (s.equals(".")) {
    441                     inputString = inputString + " " + "0 .";
    442                 } else if (s.equals("+") || s.equals("-")) {
    443                     inputString = inputString + " " + s;
    444                 } else if (s.equals("*") || s.equals("÷")) {
    445                     inputString = numDelete(inputString);
    446                     inputString = inputString + " " + s;
    447                 } else if (s.equals("^") || s.equals("1/X") || s.equals(")")) {
    448                     ;
    449                 } else {
    450                     if (s.equals("n!")) {
    451                         inputString = inputString + " " + "!";
    452                     } else {
    453                         inputString = inputString + " " + s;
    454                     }
    455                 }
    456                 freshResultShow2();
    457                 return;
    458                 /*
    459                 * 输入为 pi 和 e 那么后面
    460                 * 1. 小数点自动加0
    461                 * 2. 没了
    462                 * */
    463             } else if (c == 'π' || c == 'e') {
    464                 if (s.equals(".")) {
    465                     inputString = inputString + " " + "0 .";
    466                 } else if (s.equals("^") || s.equals("1/X")) {
    467                     if (s.equals("^")) {
    468                         inputString = inputString + " " + s;
    469                     } else {
    470                         inputString = inputString + " " + "^(-1)";
    471                     }
    472                 } else {
    473                     if (s.equals("n!")) {
    474                         inputString = inputString + " " + "!";
    475                     } else {
    476                         inputString = inputString + " " + s;
    477                     }
    478                 }
    479                 freshResultShow2();
    480                 /* "+" "-"
    481                 * 1. 输入 + - 替换
    482                 * 2. 输入 乘除 检测前面是不是已经有乘除,有就将 加减 一起替换
    483                 * 其实我觉得可以让他直接不输入,还能简单点
    484                 * */
    485             } else if (c == '-' || c == '+') {
    486                 if (s.equals(".")) {
    487                     inputString = inputString + " " + "0 .";
    488                 } else if (s.equals("*") || s.equals("÷")) {        //将上一个+ - 替换
    489                     String str = inputString;                       //
    490                     if (str.length() < 3){
    491                         inputString = "0 " + s;
    492                         freshResultShow2();
    493                         return;
    494                     }
    495                     System.out.println("length:" + str.length());
    496                     char strch = str.charAt(str.length() - 3);
    497                     if ( strch == '(' || strch == '!' || strch == '^' || strch == '%'){           ////但是这几个情况例外(某些后面能+-,但不能*/的符号
    498                         if (s.equals("*") || s.equals("/") || s.equals("÷") ){
    499                             return;
    500                         }
    501                     }
    502                     char ch = '0';
    503                     do {                                                    //将上一个几 + - 直接替换
    504                         inputString = numDelete(inputString);
    505                         ch = inputString.charAt(inputString.length() - 1);
    506                     } while (ch == '*' || ch == '÷');
    507                     inputString = inputString + " " + s;
    508                     freshResultShow2();
    509                     /*
    510                     * 后面的注释不想写了,好多呀,目前运行良好就算了
    511                     * 注释终结
    512                     * */
    513                 } else if (s.equals("+") || s.equals("-")) {
    514                     inputString = numDelete(inputString);
    515                     inputString = inputString + " " + s;
    516                     freshResultShow2();
    517                 } else if (s.equals("^") || s.equals("1/X")) {
    518                     ;
    519                 } else {
    520                     if (s.equals("n!")) {
    521                         inputString = inputString + " " + "!";
    522                     } else {
    523                         inputString = inputString + " " + s;
    524                     }
    525                 }
    526                 freshResultShow2();
    527                 return;
    528             } else if (".".equals(c + "")) {
    529                 if (!isNum(s)) {
    530                     if ((".").equals(s)) {
    531                         System.out.println("前面已经有一个点了");
    532                     } else if (inputString.length() > 2 && inputString.charAt(inputString.length() - 2) == '0') {
    533                         System.out.println("前面是0. 但是你输入不是数字,所以删了啊");
    534                         inputString = numDelete(inputString);
    535                         freshResultShow2();
    536                         inputString = inputString + "0" + " " + s;
    537                     } else if (s.equals("^") || s.equals("1/X")) {
    538                         inputString = numDelete(inputString);
    539                         if (s.equals("^")) {
    540                             inputString = inputString + " " + s;
    541                         } else {
    542                             inputString = inputString + " ^(-1)";
    543                         }
    544                     } else {
    545                         System.out.println("你输入不是是数字,所以点删了");
    546                         inputString = numDelete(inputString);
    547                         if (s.equals("n!")) {
    548                             inputString = inputString + " " + "!";
    549                         } else {
    550                             inputString = inputString + " " + s;
    551                         }
    552                     }
    553                 } else {
    554                     inputString = inputString + " " + s;
    555                 }
    556                 freshResultShow2();
    557                 return;
    558             }else if ( c == '^' || c == '√' || c == '(' || c == '%' || c == '!'){  //这些符号后面不能 直接乘除
    559                 if (c == '('){
    560                     if (s.equals("*") || s.equals("/") || s.equals("÷") || c == '^' || s.equals("1/X") ){
    561                         return;
    562                     }
    563                 }
    564                 if (s.equals("*") || s.equals("/") || s.equals("÷")){
    565                     return;
    566                 }
    567                 if (s.equals("n!")) {
    568                     inputString = inputString + " " + "!";
    569                 } else {
    570                     inputString = inputString + " " + s;
    571                 }
    572                 freshResultShow2();
    573                 return;
    574             } else if (!isNum(c + "")) {              //不是加减乘除 不是点 也不是数字 可能 :括号,特殊运算符
    575                 if (s.equals("^") || s.equals("1/X")) {
    576                     if (s.equals("^")) {
    577                         inputString = inputString + " " + s;
    578                     } else {
    579                         inputString = inputString + " ^(-1)";
    580                     }
    581                 } else {
    582                     if (s.equals("n!")) {
    583                         inputString = inputString + " " + "!";
    584                     } else {
    585                         inputString = inputString + " " + s;
    586                     }
    587                 }
    588                 freshResultShow2();
    589                 return;
    590             } else if (isNum("" + c)){               //是数字,总算啥都能输入了,但是考虑小数末尾的0 (应该放到运算符处检测)和数字开头的 0
    591                 /*此处考虑输入为0的情况
    592                 *如果前面没有小数点,且前面的数里面没有1 - 9,那么开头多个0 只输入一个
    593                 * */
    594                 if (c == '0'){
    595                     if (s.equals(".")){
    596                         if (hasDot(inputString)){
    597                             return;
    598                         }else {
    599                             inputString = inputString + " .";
    600                         }
    601                         freshResultShow2();
    602                         return;
    603                     }
    604                     if (!isNum(s) && hasDot(inputString)){  //输入不是数字 前面有点 末尾是0
    605                         while (c == '0'){
    606                             inputString = numDelete(inputString);
    607                             len = inputString.length() - 1;
    608                             if (len >= 0){
    609                                 c = inputString.charAt(len);
    610                             }else {
    611                                 inputString = "0";
    612                                 len = 0;
    613                                 break;
    614                             }
    615                         }
    616                         if (inputString.charAt(len) == '.'){
    617                             inputString = numDelete(inputString) + " " + s;
    618                         }else {
    619                             inputString = inputString + " " + s;
    620                         }
    621                         freshResultShow2();
    622                         return;
    623                     }
    624                     if (s.equals("0") && !has129(inputString)){
    625                         return;
    626                     }
    627                 }
    628 
    629                 if (s.equals(".") && hasDot(inputString)){
    630                     ;
    631                 }else if (s.equals("^")){
    632                     inputString = inputString + " " + s;
    633                 }else if (s.equals("1/X")){
    634                     inputString = inputString + " ^(-1)" ;
    635                 }else if (s.equals("n!")){
    636                     inputString = inputString + " " + "!";
    637                 }else if (c == '0' && !has129(inputString)){
    638                     if (s.equals(".")){
    639                         inputString = inputString + " " + s;
    640                     }else {
    641                         inputString = numDelete(inputString);
    642                         inputString = inputString + " " + s;
    643                     }
    644                 }else {
    645                     inputString = inputString + " " + s;
    646                 }
    647                 freshResultShow2();
    648                 return;
    649             }
    650 
    651             System.out.println("您似乎忽略了某些条件导致执行了该语句?位置 addinput.818156156");
    652         }
    653 
    654         /**
    655          * 判断前面是否有有效数字 1-9 & .
    656          * 是否可以输入0
    657          * @param s
    658          * @return
    659          */
    660         private boolean has129(String s){
    661             if (hasDot(s)){
    662                 return true;
    663             }else{
    664                 int len = s.length() - 1;
    665                 char ch = s.charAt(len);
    666                 while (true){
    667                     len -= 1;
    668                     if (isNum(ch + "") && ch != '0'){
    669                         System.out.println("true" + len);
    670                         return true;
    671                     }else if ( (ch == '0' || ch == ' ') && len >= 0){
    672                         System.out.println("has129 len 的值:" + len);
    673                         ch = s.charAt(len);
    674                         continue;
    675                     }else {
    676                         System.out.println("false" + len);
    677                         return false;
    678                     }
    679                 }
    680             }
    681         }
    682 
    683 
    684         /**
    685          * 判断字符串最后一个非数字字符后是否含有点
    686          * @param s 待判断字符串
    687          * @return 是否可以插入点
    688          */
    689         private boolean hasDot(String s){
    690             int len = s.length() - 1;
    691             while (true){
    692                 if (s.charAt(len) == '.'){          //找到点,true
    693                     return true;
    694                 }else if ( (isNum(s.charAt(len) + "") || s.charAt(len) == ' ' ) && len - 1 > 0) {
    695                     len--;
    696                     continue;//是数字或空格,继续
    697                 }else {       //不是数字,不是点,则false
    698                     return false;
    699                 }
    700             }
    701         }
    702 
    703         /**
    704          * 删除函数,每一次输入以空格分隔
    705          * 所以实际功能是删除末尾到最后一个空格之间的内容
    706          * 这个地方我没有什么好办法  简单replace方法
    707          *
    708          * @param s要删除最后一次输入的字符串
    709          * @return 删除后的字符串
    710          */
    711         //@org.jetbrains.annotations.NotNull
    712         private String numDelete(String s){
    713             int len = s.length();
    714             if (len == 0 || len == 2 || len == 1){  //长度为 0 1 2 删完就都没有了
    715                 return "0";
    716             }
    717             char c = s.charAt(--len);               //获取最后一个字符
    718             String str = c + "";                    //读取删除字符串
    719             while (c != ' ' && len-- > 0){           //重复直到遇到空格 或者 到头
    720                 c = s.charAt(len);
    721                 str = c + str;
    722                 System.out.println("将删除:" + str + " i:" + len);
    723             }
    724             s = s + "aja";
    725             return s.replace(str + "aja","");
    726             //myJavaSwing.this.freshResultShow2();
    727         }
    728 
    729         /**
    730          * 判断是否数学方法,不过这个方法好像没有用
    731          * 先不删他
    732          * @param s
    733          * @return
    734          */
    735         private boolean isFunc(String s){
    736             return ("+".equals(s) ||
    737                     "-".equals(s) ||
    738                     "*".equals(s) ||
    739                     "÷".equals(s) ||
    740                     "%".equals(s) ||
    741                     "/".equals(s));
    742         }
    743     }
    744 
    745     /**
    746      * 本来写出来设置监听的,结果在lunch里面顺便就吧这事做了
    747      */
    748     public void setActionListener(){
    749 
    750     }
    751     public static  void main(String[] args) {
    752         System.out.println("hello world");
    753         myJavaSwing cal = new myJavaSwing(true);
    754         cal.lunch();
    755         //设置
    756 
    757     }
    758 
    759     // todo list
    760     // 输入数字前面几个 0 删除多余,
    761     //小数后面多余 0 删除多余
    762 
    763 }
    View Code

  • 相关阅读:
    ReenTrantLock可重入锁(和synchronized的区别)总结
    什么是死锁?如何解决死锁?【转载】
    android studio 完整安装教程,已完全实践过
    foxmail创建163公司企业邮箱的时候会出现ERR Unable to log on
    Android 开发 res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
    android studio 突然出现Gradle project sync failed 错误
    android 开发edittext获取焦点时hint消失
    Z480联想笔记本突然没有了声音
    android聊天,存储聊天记录sqlite
    adb shell出现error错误
  • 原文地址:https://www.cnblogs.com/dosu/p/12775220.html
Copyright © 2011-2022 走看看