⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyset.java

📁 这是一个用J2ME开发的计算器程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    } else if (strb.equals("p")) {
                        strb = "pi";
                        i++;
                    } else if (strb.equals("s")) {
                        if (func.sSub(stra, i, 3).equals("sq3")) {
                            strb = "sq3";
                            i+=2;
                        } else if (func.sSub(stra, i, 4).equals("sqrt")) {
                            strb = "sqrt";
                            i+=3;
                        }
                    } else {
                    }
                    keys = strb;
                    setKeyInput();
                    if (strb.equals("=")) { break;}
                }
                return;
            } else if (keqs("Backspace")) {
                strn = func.sLess(strn, 1);
            } else if (keqs("CE")) {
                strn = "";
            } else if ("|0|1|2|3|4|5|6|7|8|9|.|+|-|*|/|(|)|sqrt|sq3|pi|e|A|B|C|D|E|F|".indexOf(keys) >= 0) {
                strn += keys;
            } else if (keqs("x^y")) {
                strn += "^";
            } else {
            }
        } else {
            allowset = !allowset;
            if (meqs("???")) {
                mn.add("", "");
                setrec();
                strm = "Set";
                strn = "";
            } else {
                strn = "";
                for (int i = rec0; i <= rec1; i++) {
                    strn += mn.get(i, 0) + mn.get(i, 1);
                }
                for ( ; rec1 > rec0; rec1--) {
                    mn.delete(rec1);
                }
            }
        }
        mn.set( strm, strn, rec1);
    }

/*
      下面是需要用到的函数
*/
    private boolean keqs(String s) {
        return (s.equals(keys));
    }
    private boolean meqs(String s) {
        return (s.equals(strm));
    }
    private boolean neqs(String s) {
        return (s.equals(strn));
    }
    private boolean kins(String s) {
        return (s.indexOf(keys) >= 0);
    }
    private boolean mins(String s) {
        return (s.indexOf(strm) >= 0);
    }
    private boolean nins(String s) {
        return (s.indexOf(strn) >= 0);
    }
    private boolean klen(int i) {
        return (keys.length() == i);
    }
    private boolean mlen(int i) {
        return (strm.length() == i);
    }
    private boolean nlen(int i) {
        return (strn.length() == i);
    }

    private int len(String s) {
        return s.length();
    }

    private void setrec() {                                                      //设置记录参数
        rec1 = mn.lastof();
        rec0 = 0;
        for(int i = rec1 - 1; i > 0; i--) {
            if (mn.get(i, 0).equals("=")) {
                rec0 = i + 1;
                break;
            }
        }
    }

    private String calcRecord() {                                               //按下 = 键以后计算
        StrVect v0 = new StrVect(-1, 2);
        setrec();
        String s = "";
        for (int i = rec0; i <= rec1; i++) {
            if (mn.get(i, 1).length() == 0 && "^+-*/".indexOf(mn.get(i, 0)) >= 0)
                { mn.set(s, i, 1);} //用上行一的补齐
            s = mn.get(i, 1);
            v0.add(mn.get(i, 0), s);
        }

        s = vectorJJCC(v0);
        //System.out.println("calculate--->"+s0);
        if (v0.size() != 2) {
            s = "Result Error:" + s;
        }
        return s;
    }

    public String vectorJJCC(StrVect v1) {                  //计算平方、括号、顺序
        String s0 = "", s1 = "", s2 = "";
        int k1 = 0, k2 = 0, vi, vj, i, j;
        vi = v1.row();
        while ( v1.lastof() > 0 && vi > v1.lastof() ) {
            vi = v1.lastof();//每次运行之后都应该减少,否则就是死循环
            for (i = 0; i < v1.row(); i++) {
                if (v1.get(i, 0).equals("^")) {
                    s1 = vectJJCC(v1, i, "");
                    v1.delete(i);
                    v1.set(s1, i - 1, 1);
                    i--;
                }
            }
            vj = vi + 1;
            while ( v1.occur( "(", 0, v1.lastof() ) == v1.occur( ")", 0, v1.lastof() )  && v1.occur( "(", 0, v1.lastof() ) > 0 && vj > v1.lastof() ) {
                vj = v1.lastof();//第次都应减少规模
                k1 = -1; k2 = -1;
                for (i = 0; i < v1.row(); i++) {
                    s1 = v1.get(i, 0);
                    if      ( s1.equals("(") ) { k1 = i;}
                    else if ( s1.equals(")") ) { k2 = i; break;}
                }
                if (k2 - k1 > 1 && k2 > 0) {
                    s2 = calcJJCC(v1, k1, k2-1);
                } else if (k2 - k1 == 1 && k1 >= 0) {    //括号内已计算完成,要删除括号
                    v1.set("", k1, 0);
                    v1.delete(k2);
                    if (k1 > 0) {
                        v1.set(v1.get(k1, 1), k1 - 1, 1);
                        v1.delete(k1);
                    }
                }
            }
        }

        s0 = calcJJCC(v1, 0, v1.lastof());

        return s0;
    }

    public String calcJJCC(StrVect v2, int begin, int end) {                  //按顺序计算 * / + -
        String s0 = v2.get(begin, 1), s1 = "", s2 = "";
        int j = v2.row();
        while ( begin + 1 <= end && begin >= 0 && end < v2.row() && j > v2.lastof() ) {
            j = v2.lastof();
            for (int i = begin + 1; i <= end; i++) {
                s2 = v2.get(i, 0);
                if ("*/".indexOf(s2) >= 0) {
                    s1 = vectJJCC(v2, i, "");
                    v2.delete(i);
                    v2.set(s1, i - 1, 1);
                    end--;
                    i--;
                }
            }
            for (int i = begin + 1; i <= end; i++) {
                s2 = v2.get(i, 0);
                if ("+-".indexOf(s2) >= 0) {
                    s1 = vectJJCC(v2, i, "");
                    v2.delete(i);
                    v2.set(s1, i - 1, 1);
                    end--;
                    i--;
                }
            }
            s0 = v2.get(begin, 1);
        }
        if (v2.size() != 2) {
            s0 = "Result Error:" + s0;
        }
        return s0;
    }

    public String vectJJCC(StrVect v3, int vi, String s) {                 //计算两相邻vector记录的结果
        String s0 = "", s1 = "", s2 = "", vs = "";
        double i0 = 0, i1 = 0, i2 = 0;
        int i = 0;
        if (vi < 0) {
            i++;
        } else if ( v3.row() < 1 || vi >= v3.row() ) {
            i++;
        } else if (vi == 0) {
            vs = v3.get(0, 1);         //首行
        } else {
            s0 = v3.get(vi, 0);        //运算符
            s2 = v3.get(vi, 1);        //本行
            s1 = v3.get(vi - 1, 1);    //上一行
            s2 = (s2.length() == 0 ? s1 : s2);//本行为空,则用上一行的数值
            i += (func.isNum(s1) ? 0 : 1);
            i += (func.isNum(s2) ? 0 : 1);
            if (i == 0) {
                vs = strJJCC(s1, s2, (s.length() > 0 ? s : s0));
            } else {
                vs = "Error Found";
            }
        }
        //System.out.println("result-->"+vs);
        if (func.isNum(vs) && i == 0) {
            return vs;
        } else {
            i += (i==0 ? 1 : 0);
            return i + " Error(s) Found";
        }
   }

    public String strJJCC(String s1, String s2, String s3) {                       //将两个字符串转为数字后运算
        String s0 = "";
        double i0 = 0, i1 = 0, i2 = 0 ;
        //lont i3 = 0;
        int i3 = 0;
        try {
            i1 = Double.parseDouble(s1);
            if (s3.equals("^")) { i3 = Integer.parseInt(s2);}
            else { i2 = Double.parseDouble(s2); }
        } catch (NumberFormatException ne) { return "Number Error"; }
        if      (s3.equals("+")) {i0 = i1 + i2;}
        else if (s3.equals("-")) {i0 = i1 - i2;}
        else if (s3.equals("*")) {i0 = i1 * i2;}
        else if (s3.equals("/")) {i0 = i1 / i2;}
        else if (s3.equals("%")) {i0 = i1 * i2 / 100;}
        else if (s3.equals("sqrt")) {i0 = Math.sqrt(i1);}
        else if (s3.equals("sq3")) {       //近似计算开3次方
            if (i1 == 0) {return "0";}
            boolean b = (i1 > 0);
            i2 = Math.abs(i1);
            i2 = Math.sqrt(i2);
            i0 = i2;
            for (int i = 0; i < 25; i++){
                i2 = Math.sqrt(i2);
                i1 = Math.sqrt(i2);
                i0 = i0 * i1 / i2;
                i2 = i1;
                //System.out.println(""+i0);
            }
            i0 = func.dDecimal(i0, 8, 5);
            i0 = (b ? i0 : 0-i0);
        }
        else if (s3.equals("^")) {
            i0 = 1;
            if (i3 > 0) {
                for (int i = 0; i < i3; i++) { i0 = i0 * i1;}
            } else if (i3 < 0) {
                for (int i = 0; i < Math.abs(i3); i++) { i0 = i0 * i1;}
                i0 = 1 / i0;
            }
        } else { return s3 + " Error"; }
        s0 = Double.toString(i0);
        //////System.out.println(s1+s3+s2+" = "+s0);
        return s0;
    }




}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -