我正在使用一台科学计算器,在进行某些特定计算时,例如3sin30或5tan45或2cos90,很少发生崩溃。请问我该怎么纠正这个问题。我还想添加一些函数,比如x^n,其中n可以是任何值,cot,csc,sec和shiftbutton,将cos,tan和sin改为倒数。下面是java文件。
主活动.java
'''
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "1");
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "2");
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "3");
}
});
b4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "4");
}
});
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "5");
}
});
b6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "6");
}
});
b7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "7");
}
});
b8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "8");
}
});
b9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "9");
}
});
b0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "0");
}
});
bdot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + ".");
}
});
bac.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText("");
txtsec.setText("");
}
});
bc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = txtmain.getText().toString();
if (text.length()==1){
txtmain.setText("0");
}else{
txtmain.setText(text.substring(0, text.length() - 1));
txtmain.setSelection(txtmain.getText().length());
}
}
});
badd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "+");
}
});
bminus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "-");
}
});
bdivide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "÷");
}
});
bmulti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "×");
}
});
bb1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "(");
}
});
bb2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + ")");
}
});
bsroot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = txtmain.getText().toString();
double r = Math.sqrt(Double.parseDouble(val));
txtmain.setText(String.valueOf(r));
}
});
bpie.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtsec.setText(txtsec.getText());
txtmain.setText(txtmain.getText() + pie);
}
});
binv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText()+"^"+"(-1)" );
}
});
bsin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "sin");
}
});
btan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "tan");
}
});
bcos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText() + "cos");
}
});
blog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText()+"ln");
}
});
bln.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtmain.setText(txtmain.getText()+"log");
}
});
bfact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int val = Integer.parseInt(txtmain.getText().toString());
int fact = factorial(val);
txtmain.setText(String.valueOf(fact));
txtsec.setText(val+"!");
}
});
power.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int p = Integer.parseInt(txtmain.getText().toString());
int pow = (p*p*p);
txtmain.setText(String.valueOf(pow));
txtsec.setText(p +"^");
}
});
bsquare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double d = Double.parseDouble(txtmain.getText().toString());
double square = d*d;
txtmain.setText(String.valueOf(square));
txtsec.setText(d+"²");
}
});
bequals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = txtmain.getText().toString();
String replacedstr = val.replace('÷', '/').replace('×', '*');
double result = eval(replacedstr);
txtmain.setText(String.valueOf(result));
txtsec.setText(val);
}
});
}
//factorial function
int factorial(int n)
{
return (n==1 || n==0) ? 1 : n*factorial(n-1);
}
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;
}
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 *= parseTerm(); //multiplication
else if (eat( '/')) x /= parseTerm(); //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("sroot")) 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 if (func.equals("log")) x = Math.log10(x);
else if (func.equals("ln")) x = Math.log(x);
else throw new RuntimeException("Unknown function: " + func);
} else {
throw new RuntimeException("Unexpected: " + (char)ch);
}
if (eat('^')) x =Math.pow(x, parseFactor());
return x;
}
}.parse();
}
}
'''
暂无答案!
目前还没有任何答案,快来回答吧!