「java优先级计算器」java算术运算符优先级
本篇文章给大家谈谈java优先级计算器,以及java算术运算符优先级对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、最近实训 要求 用Java编写计算器(带一些复杂的运算) 然后要求做答辩 求大虾帮帮我
- 2、java 编写计算器 怎样实现连续运算?
- 3、java计算器,谁知道这段什么意思?进栈出栈?跪求高手帮我翻译下,希望详细注解。谢谢!如果好还会加分的
- 4、JAVA中如何用运算符的优先级来实现一个简单的计算器,说出思路便可,适当请用代码表明
- 5、求大神用JAVA语言编写一个简易计算器~!
最近实训 要求 用Java编写计算器(带一些复杂的运算) 然后要求做答辩 求大虾帮帮我
用两个简单的栈就行了,一个是操作数栈,一个是操作符栈。
扫描被运算的表达式,如果是数就压入操作数栈;如果是操作符就与操作符栈的栈顶元素比较:如果此操作符的优先级比栈顶元素的高,就入栈,否则,就在操作数栈中弹出两个元素与操作符运算,将结果压入操作数栈。
扫描完成后,如果栈中元素不空,就弹出来进行运算,直到空为止。
java 编写计算器 怎样实现连续运算?
简单方法是每按一个运算符就将前面的都计算出来 有些计算器就是这样的 比较好的办法就是采用二叉树的结构 每个数字都是一个叶子节点 其他的是运算符 这个好处是能实现运算符的优先级 比如说a + b 便是节点 + 下面2节点a b
再a + b × c 则b节点变成 × 下面2节点 b c 若是a + b + c 则 +节点变成 + 下面 + c 两节点 a b 又是+的节点 然后按=的话就根据二叉树计算出最后结果
java计算器,谁知道这段什么意思?进栈出栈?跪求高手帮我翻译下,希望详细注解。谢谢!如果好还会加分的
一般你这种要出入栈的计算器是可以计算表达式的,如可以直接输入2-4*3+4,一般有两个栈,数字栈和符号栈,如上面表达式,数字栈压入2,4;符号栈压入-;当取*号的时候,因为*的优先级比-大所有会将4弹出和3运算然后将12压回数字栈,结果是2,12;符号栈是-;然后取+,比较+与-优先级,同级的从左都右运算,直接压入栈,数字栈为2,12,4;符号栈是-,+;遇到表达式结束符,然后弹出一个符号两个数,运算后将结果压回数字栈,弹出加号,结果是2,16;弹出减号是最终结果14;然后输出结果。要是有括号的可以递归括号内的表达式。详细可百度表达式的栈运算。程序我没看,很多又没格式。
JAVA中如何用运算符的优先级来实现一个简单的计算器,说出思路便可,适当请用代码表明
曾经写过,现在忘了代码;思路就是:先定义“+”,“-“等符号,当然如果写的全,还有”()“,”[]“,"{}"这些符号的优先级,记得是写一个枚举类型的;然后,计算的时候用java的栈,通过入栈和出栈来计算的;
不好意思,代码是找不到了
求大神用JAVA语言编写一个简易计算器~!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
class CalcControler implements ActionListener
{
JTextField textField;
//integer1 ,integer2
String op1, op2, operator;
String errMsg = "Error";
//the state for now ,begin state = 0
int state = 0;
CalcControler( JTextField tf)
{
textField = tf;
}
public void actionPerformed( ActionEvent e )
{
String s;
s = e.getActionCommand();
switch( state )
{
case 0:
inputState0(s);
break;
case 1:
inputState1(s);
break;
case 2:
inputState2(s);
break;
case 3:
inputState3(s);
break;
case 4:
inputState4(s);
break;
case 5:
inputState5(s);
break;
default:
System.out.println( "Unknow state error!" );
System.exit(1);
}
}
private boolean isDigit( String s )
{
boolean b;
b = s.equals("0")||s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")
||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9");
return b;
}
private int fN( float fop1 )
{
int ruslt=0;
if ( fop1 == 0 || fop1 == 1 )
{
ruslt = 1;
}
else
{
ruslt = (int) (fop1 * fN(fop1-1) );
}
return ruslt;
}
private boolean isOperator(String s)
{
return s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")
||s.equals("x^2")||s.equals("x^3")||s.equals("x^y")
||s.equals("sqrt")||s.equals("sin")||s.equals("cos")
||s.equals("tan")||s.equals("n!")||s.equals("(")||s.equals(")");
}
//state 0 start
private void inputState0( String s )
{
if ( isDigit(s)||s.equals("+/-")||s.equals(".") )
{
state = 2;
textField.setText("0");
inputState2(s);
}
if ( isOperator(s) )
{
op1 = "0";
operator = s;
state = 4;
}
if ( s.equals("1/x") )
{
textField.setText(errMsg);
state = 1;
}
}
//state 1 error
private void inputState1( String s )
{
if ( isDigit(s)||s.equals("+/-")||s.equals(".") )
{
textField.setText("0");
state = 0;
inputState0(s);
}
else
{
state = 0;
textField.setText("0");
}
}
//state 2 op1 reading,op1 is being input
private void inputState2( String s )
{
if ( isDigit(s) )
{
String text = textField.getText();
if ( text.equals("0") )
text = s;
else
text = text + s;
textField.setText(text);
}
if ( s.equals(".") )
{
String text = textField.getText();
if ( !text.contains(".") )
{
text = text + s;
textField.setText(text);
}
}
if ( s.equals("+/-") )
{
String text = textField.getText();
if ( text.charAt(0) == '-' )
text = text.substring(1);
else
text = "-" + text;
textField.setText(text);
}
if ( isOperator(s)||s.equals("1/x") )
{
state = 3;
op1 = textField.getText();
inputState3(s);
}
if ( s.equals("=") )
{
state = 3;
op1 = textField.getText();
}
if ( s.equals("C") )
textField.setText("0");
if ( s.equals("Backspace") )
{
String text = textField.getText();
if ( text.length() == 1 )
textField.setText("0");
else
textField.setText( text.substring(0, text.length()-1) );
}
}
//state 3 op1 read only, only op1 was input ,op2 = operator = null
private void inputState3( String s )
{
if ( isDigit(s)||s.equals(".") )
{
op1 = "";
textField.setText("0");
state = 2;
inputState2(s);
}
if ( s.equals("+/-") )
{
state = 2;
op1 = "";
inputState2(s);
}
if ( isOperator(s) )
{
operator = s;
state = 4;
if (operator.equals("x^2")|| operator.equals("x^3")||operator.equals("sin")
||operator.equals("cos")||operator.equals("tan")||operator.equals("sqrt")
||operator.equals("n!"))
{
inputState6(s);
}
}
if ( s.equals("1/x") )
{
Float fOp1 = new Float(op1);
if ( fOp1.floatValue() ==0.0 )
{
state = 1;
//error
textField.setText(errMsg);
}
else
{
float f = 1.0f/fOp1.floatValue();
op1 = String.valueOf(f);
textField.setText(op1);
}
}
if ( s.equals("C") || s.equals("Backspace") )
{
state = 0;
textField.setText("0");
}
}
//state 2, op1 and operator are read, op2 = null
private void inputState4( String s )
{
if ( isDigit(s)||s.equals("+/-")||s.equals(".") )
{
textField.setText("0");
state = 5;
inputState5(s);
}
if ( isOperator(s))
operator = s;
if ( s.equals("1/x") )
{
state = 3;
operator = "";
inputState3(s);
}
if ( s.equals("C") || s.equals("Backspace") )
{
state = 0;
textField.setText("0");
}
}
//state5,op2 reading,in reading of op2
private void inputState5( String s )
{
if ( isDigit(s) )
{
String text = textField.getText();
if ( text.equals("0") )
text = s;
else
text = text + s;
textField.setText(text);
}
if ( s.equals(".") )
{
String text = textField.getText();
if ( !text.contains(".") )
{
text = text + s;
textField.setText(text);
}
}
if ( s.equals("+/-") )
{
String text = textField.getText();
if (text.charAt(0) == '-' )
text = text.substring(1);
else
text = '-' + text;
textField.setText(text);
}
if ( isOperator(s) )
{
op2 = textField.getText();
Float f1, f2;
f1 = new Float(op1);
f2 = new Float(op2);
float fop1, fop2;
fop1 = f1.floatValue();
fop2 = f2.floatValue();
if ( operator.equals("+") )
fop1 = fop1 + fop2;
else if ( operator.equals("-") )
fop1 = fop1 - fop2;
else if ( operator.equals("*") )
fop1 = fop1 * fop2;
else if ( operator.equals("/") )
{
if ( fop2 != 0.0f )
fop1 = fop1 / fop2;
else
{
state = 1;
textField.setText(errMsg);
return;
}
}
else
{
System.out.println("Unknown operator error!");
state = 1;
textField.setText(errMsg);
return;
}
//here we got good calculating result
op1 = String.valueOf(fop1);
textField.setText(op1);
operator = s;
state = 4;
}
if ( s.equals("1/x") )
{
op1 = textField.getText();
state = 3;
inputState3(s);
}
if ( s.equals("=") )
{
op2 = textField.getText();
Float f1, f2;
f1 = new Float(op1);
f2 = new Float(op2);
float fop1, fop2;
fop1 = f1.floatValue();
fop2 = f2.floatValue();
if ( operator.equals("+") )
fop1 = fop1 + fop2;
else if ( operator.equals("-") )
fop1 = fop1 - fop2;
else if ( operator.equals("*") )
fop1 = fop1 * fop2;
else if ( operator.equals("/") )
{
if ( fop2 != 0.0f )
fop1 = fop1 / fop2;
else
{
state = 1;
textField.setText(errMsg);
return;
}
}
else if ( operator.equals("x^y") )
fop1 = (float) Math.pow( fop1, fop2 );
else
{
System.out.println("Unknown operator error!");
state = 1;
textField.setText(errMsg);
return;
}
//here we got good calculating result
op1 = String.valueOf(fop1);
textField.setText(op1);
state = 3;
}
if ( s.equals("C") )
{
state = 0;
textField.setText("0");
}
if ( s.equals("Backspace") )
{
String text = textField.getText();
if ( text.length() == 1 )
textField.setText("0");
else
textField.setText( text.substring(0, text.length()-1) );
}
}
//state6, new calculation
private void inputState6( String s )
{
Float f1;
f1 = new Float(op1);
float fop1;
fop1 = f1.floatValue();
if ( operator.equals("sqrt") )
{
if ( fop1 0 )
{
textField.setText(errMsg);
return;
}
else
fop1 = (float) Math.sqrt( fop1 );
}
else if ( operator.equals("x^2") )
fop1 = fop1 * fop1;
else if ( operator.equals("x^3") )
fop1 = fop1 * fop1 * fop1;
else if ( operator.equals("sin") )
fop1 = (float) Math.sin( fop1 );
else if ( operator.equals("cos") )
fop1 = (float) Math.cos( fop1 );
else if ( operator.equals("tan") )
fop1 = (float) Math.tan( fop1 );
else if( operator.equals("n!") )
fop1 = this.fN(fop1);
op1 = String.valueOf(fop1);
textField.setText(op1);
}
}
java优先级计算器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java算术运算符优先级、java优先级计算器的信息别忘了在本站进行查找喔。