「java优先级计算器」java算术运算符优先级

博主:adminadmin 2023-01-22 20:30:10 273

本篇文章给大家谈谈java优先级计算器,以及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优先级计算器的信息别忘了在本站进行查找喔。