📄 keyset.java
字号:
} 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 + -