Я в настоящее время нахожусь в центре программы калькулятора 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 присутствует в выражении справа от =, его текущее значение можно найти в соответствующем поле. Переменные могут быть заменены их значениями в коде, который получает следующий операнд, или значения переменных могут быть вставлены в отдельный проход через выражение перед его оценкой.
Любая помощь, подстрекательские ссылки или предложения будут великолепны!
Я новичок в программировании и хотел бы узнать.