2016-02-15 1 views
0

Я делаю калькулятор, и для некоторых вычислений требуется 3 части информации (например, 3 * 4), тогда как другим требуется всего 2 (например, 5!).Как разбить строку на одну или две новые строки

мне удалось разделить вход на 3 части, используя следующий код:

String[] parts = myInput.split(" "); 
String num1 = parts[0]; 
String operation = parts[1]; 
String num2 = parts[2]; 

Но это означает, что, когда я только тип 2 вещи, это не работает.

Как я могу разрешить либо 3, либо 2 вещи в качестве входных данных?

+0

Я думаю, вам нужно будет проверить размер массива и использовать его для определения логики 2 и 3 входа. – user3298823

+1

Что вы ищете, это математический парсер. Взгляните на ответы на этот вопрос: http://stackoverflow.com/questions/114586/smart-design-of-a-math-parser –

+0

Неправильное разделение на пробел. вы должны проверить чартер на чартер и посмотреть, есть ли у вас номер операнда или оператора. что вы будете знать, нужно ли останавливаться (для оператора, например, факториал), или продолжать искать другой операнд. – LeTex

ответ

-1

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

Вы можете использовать parts.length, чтобы узнать много переменных, которые вам были предоставлены, и использовать их для разветвления вашего кода (т. Е. Если инструкция else).

0

Вы не должны предполагать, что вход всегда будет в форме параметра 3. Скорее, возьмите общий ввод, проанализируйте его на основе вариантов использования. В вашем случае, это сводится к двум конкретным случаям использования после принятия вход:

  1. Операторы, которые работают на одном операнде - унарный оператор
  2. Операторы, которые работают на двойной операнд - бинарный оператор

Для каждого случая вы можете определить список разрешенных операторов. Например. '!' будет в случае 1 списка, в то время как «*» будет в случае «2»

Сканирование по строке, поиск позиции оператора. [^ 0-9] (представляет собой шаблон, отличный от чисел). Или просто вы можете сделать тривиальную проверку для оператора (создав свой собственный метод).

После того, как вы это выяснили, проверьте свою строку (необязательно) - например. не имеет смысла иметь два операнда для унарного оператора.

Сделав это, довольно просто проанализировать требуемые операнды, разделив строку на основе оператора. Тогда вычисление довольно тривиально.

Надеюсь, это поможет.