Проверка того, содержат ли обе строки выражения переменную

Я сделал полностью функционирующий метод, который будет захватывать переменную строку, такую ​​​​как Икс или вар, для уравнения следующим образом:

// 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?

Добро пожаловать в Stack Overflow. Нам будет проще с минимальный воспроизводимый пример.

Ole V.V. 07.05.2022 06:24

Я бы отправил метод с оператором if, но сам метод состоит почти из 200 строк, что очень длинно и большинство частей работает само по себе и не имеет отношения к вопросу выше.

Lucas Rodriguez 07.05.2022 15:32

Вы правы, размещение 200 строк кода было бы плохой идеей. Сейчас самое подходящее время для обучения созданию Короткий, автономный, правильный (компилируемый), пример.

Ole V.V. 07.05.2022 15:35

если в вашем уравнении больше переменных, как getVar() узнает, какую из них взять? Ваша текущая реализация просто объединяет все буквенные символы из getEquation() в одну длинную строку, поэтому x=x будет обрабатываться в xx.

cyberbrain 09.05.2022 18:38

@cyberbrain Большое спасибо за обнаружение ошибки! Метод getVar() действительно работает таким образом, поэтому мне приходится перегружать метод, чтобы он принимал строковый параметр, который был бы одной из сторон, чтобы оператор if прошел и решил уравнение, как задумано.

Lucas Rodriguez 09.05.2022 18:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, я должен поблагодарить людей, которые помогли найти решение этой проблемы. По-видимому, на самом деле была проблема с методом getVar(), получающим двойные переменные из строк уравнения с несколькими экземплярами переменной.

Что я сделал, чтобы решить эту проблему, так это перегрузил метод getVar(), чтобы он принимал и использовал строковые параметры, чтобы я мог получить переменную только с одной стороны уравнения.

Методsolve(), который содержит оператор if, работал для решения уравнений, которые имели бы 1 или более переменных с каждой стороны. Таким образом, в тех случаях, когда только одна сторона будет содержать переменную, оба метода getVar() все равно будут использоваться, чтобы избежать Индексаутофбаундсексцептион.

Другие вопросы по теме

Функция, которая принимает массив целых чисел и возвращает массив строк со всеми элементами, преобразованными в строки
Строки CONCAT в виде снежинок со значениями DISTINCT
Добавьте переменную «i» к имени переменной C#
Добавить строку и целое число из одной строки строки, сгенерированной распознавателем речи, в 2 отдельных списка
Строки версии для «System.Version» слишком длинные (или короткие) в PowerShell
Я попытался получить пользовательский ввод, а затем сравнить его с чем-то, и у меня возникла проблема
Как проверить, является ли строка, переданная в качестве аргумента, изменяемой строкой
Преобразование короткой строки DateTime с датой и временем в DateTime
Дублированный кодировщик JavaScript, попробуйте использовать indexOf, но вывод по-прежнему неверен
Разделите 600 столбцов на 2 новых столбца для каждого со старыми и новыми именами столбцов в векторах