Я сделал полностью функционирующий метод, который будет захватывать переменную строку, такую как Икс или вар, для уравнения следующим образом:
// Equation Variable Getter
public String getVar(){
String variable = "";
for (int i = 0; i < getEquation().length(); i++){
if ((getEquation().charAt(i) >= 65 && getEquation().charAt(i) <= 90)
|| (getEquation().charAt(i) >= 97 && getEquation().charAt(i) <= 122)){
variable += getEquation().charAt(i);
}
}
//System.out.println(variable);
return variable;
}
Пытаясь решить такое уравнение, как х = х или число = число, я разделил стороны на массив и обрезал пробелы, как и любое другое уравнение, которое я тестировал. Проблема заключалась в сравнении двух сторон. Естественно, я использовал оператор if и сравнил их так:
if (sides[0].contains(getVar()) && sides[1].contains(getVar()){
// statements used to solve equation format co*var = co*var
}
При использовании этого на х = х и вар = вар оператор if никогда не выполнялся. При дальнейшем расследовании я обнаружил, что код действительно обошел его, потому что оба условия в утверждении были ложными. Этого не должно было случиться, поскольку для таких строк, как х = х и вар = вар, обе содержали переменную Икс.
Что-то не так с оператором if?
Я бы отправил метод с оператором if, но сам метод состоит почти из 200 строк, что очень длинно и большинство частей работает само по себе и не имеет отношения к вопросу выше.
Вы правы, размещение 200 строк кода было бы плохой идеей. Сейчас самое подходящее время для обучения созданию Короткий, автономный, правильный (компилируемый), пример.
если в вашем уравнении больше переменных, как getVar()
узнает, какую из них взять? Ваша текущая реализация просто объединяет все буквенные символы из getEquation()
в одну длинную строку, поэтому x=x
будет обрабатываться в xx
.
@cyberbrain Большое спасибо за обнаружение ошибки! Метод getVar() действительно работает таким образом, поэтому мне приходится перегружать метод, чтобы он принимал строковый параметр, который был бы одной из сторон, чтобы оператор if прошел и решил уравнение, как задумано.
Во-первых, я должен поблагодарить людей, которые помогли найти решение этой проблемы. По-видимому, на самом деле была проблема с методом getVar(), получающим двойные переменные из строк уравнения с несколькими экземплярами переменной.
Что я сделал, чтобы решить эту проблему, так это перегрузил метод getVar(), чтобы он принимал и использовал строковые параметры, чтобы я мог получить переменную только с одной стороны уравнения.
Методsolve(), который содержит оператор if, работал для решения уравнений, которые имели бы 1 или более переменных с каждой стороны. Таким образом, в тех случаях, когда только одна сторона будет содержать переменную, оба метода getVar() все равно будут использоваться, чтобы избежать Индексаутофбаундсексцептион.
Добро пожаловать в Stack Overflow. Нам будет проще с минимальный воспроизводимый пример.