在Java计算器程序中分配变量[处理分配和变量]



我目前正在执行Java计算器程序,一切似乎都正常工作,但我想要更多的功能。

到目前为止,用户可以输入一个数学表达式,程序会解决它。然而,我希望程序能为x、y或z等变量分配数值。

样本输入/输出可以是:

输入表达式:x=10/5

                    => 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出现在=右侧的表达式中,则可以在相应的字段中找到其当前值。变量可以在获取下一个操作数的代码中替换为其值,也可以在对表达式求值之前将变量值插入到单独的传递中。

任何帮助、煽动性链接或建议都将非常棒

我是编程界的新手,很想学习

而不是行return Float.parseFloat(opstring);您可以验证opstring是否以数字开头,类似

if (Character.isDigit(opstring.charAt(0)))
    return Float.parseFloat(opstring);
else
    return variables.get(opstring); // add additional test for null value!

您可以将类中的变量容器声明为

final Map<String,Float> variables=new HashMap<String,Float>();

并在解析器遇到类似var=expr的语句时初始化它们variable.put(名称、值);

我不知道这个答案是否对你有用,因为我不能很好地理解这个问题,但这里有一些建议:

  • 要将变量作为输入并打印其值,可以使用带有String键和Double值的HashMap(java.util.HashMap)。这可以用于按变量名查找变量的值。通过解析表达式并查找值,可以将相同的映射用于复杂表达式,如x+y*z。

  • 对于解析,您可以使用String类的方法,如indexOf、substring()等。还可以考虑使用StringTokenizer类,该类可以使用分隔符(+、-、*、/),并将表达式拆分为标记。

最新更新