我目前处于Java计算器程序的中间,一切似乎都正常工作,但我需要更多的功能。在Java计算器程序中分配变量[处理分配和变量]
截至目前,用户可以输入一个数学表达式,程序将解决它。但是,我希望程序为变量(如x,y或z)分配数值。
样品输入/输出可以是:
输入表达式:x =5分之10
=> 2
输入表达式:x
=> 2
public class Calculator
{
String expstring;
int cursor;
double x;
double y;
double z;
public Calculator()
{
expstring = null;
x = 0;
y = 0;
z = 0;
}
public Calculator(String instring)
{
expstring = instring;
cursor = 0;
}
public void setExpression(String estring)
{
expstring = estring;
cursor = 0;
}
public float evalExp()
{
if (expstring == null)
{
System.err.println("There is no expression to evaluate.");
System.err.println("Call setExpression() before calling getResult().");
return 0;
}
cursor = 0;
float result = evalTerm();
while (nextOperator('+') || nextOperator('-'))
{
char operator = getOperator();
float term = evalTerm();
if (operator == '+')
result = result + term;
if (operator == '-')
result -= term;
else
System.err.println("Invalid operator: " + operator);
}
return result;
}
private float evalTerm()
{
float result = getOperand();
while (nextOperator('*') || nextOperator('/'))
{
char operator = getOperator();
float term = getOperand();
if (operator == '*')
result = result * term;
if (operator == '/')
result /= term;
else
break;
}
return result;
}
private float getOperand()
{
if (cursor >= expstring.length())
return 0;
String opstring = "";
char nextchar = expstring.charAt(cursor);
if (nextchar == '-')
{
opstring = opstring + '-';
cursor++;
nextchar = expstring.charAt(cursor);
}
/** if (nextchar == 'x')
{
x =
}
*/
while (cursor < expstring.length() && !isOperator(nextchar))
{
opstring = opstring + nextchar;
cursor++;
if (cursor < expstring.length())
nextchar = expstring.charAt(cursor);
}
return Float.parseFloat(opstring);
}
private char getOperator()
{
char operator = expstring.charAt(cursor);
cursor++;
return operator;
}
private boolean nextOperator(char op)
{
if (cursor < expstring.length() && expstring.charAt(cursor) == op)
return true;
else
return false;
}
private boolean isOperator(char c)
{
String opset = "+*-/";
return (opset.indexOf(c) >= 0);
}
}
这是我迄今为止所做的工作,但我不确定如何将其实现到代码中......变量和赋值的处理可以作为特殊情况嵌入到上面的逻辑结构中,或者可以单独完成评估表达式之前/之后的逻辑。您的计算器类将需要一个字段来存储每个变量(x,y和z)的值。在赋值中,第一个操作数是一个变量名,第一个操作符是=。必须评估=右边的表达式的值,然后可以将该值存储在对应于该变量的字段中。如果x,y或z出现在=右侧的表达式中,则可以在相应的字段中找到它的当前值。这些变量可以用获取下一个操作数的代码中的值替换,也可以在评估之前通过表达式单独插入变量值。
任何帮助,煽动性链接或建议将是伟大的!
我是编程界新人,很想学习。
我会将所有这一切都添加到getOperand()方法呢? – khoops66 2012-02-05 22:31:09