2015-11-05 3 views
0

Я делаю калькулятор Java Fraction для школы, и одна из самых больших проблем, которые возникают у меня, - это синтаксический анализ. Я могу использовать его, когда я использую только числа, но поскольку это калькулятор фракции, мы включаем символы подчеркивания (для смешанных чисел) и обратные косые черты для фракций. Как я смогу использовать метод parse, пока я использую символы, отличные от цифр? Номер смешанного номера: 4_7/8Калькулятор Фракции на Земле: Разбор

+1

do 'String.split' вызывает их, и вы должны уметь оттуда – 3kings

+1

Его легко понять, если вы приведете пример. –

+0

Можете ли вы привести пример использования подчеркивания для смешанного номера? –

ответ

0

Попробуйте определить свой метод синтаксического анализа таким образом: BigDecimal parse(String). На данный момент вы можете просто вернуть null. Затем напишите единичные тесты для различных сценариев, которые необходимо поддерживать. Начните просто. Хотя верно, что вам нужно разбирать «-4_7/8», сначала убедитесь, что вы можете анализировать «7», «8», «-4», «7/8» и, наконец, «-4_7/8" . Обязательно рассмотрите также краевые случаи. Что вы будете делать с «2/-3»? Вы проанализируете это или учтите этот недопустимый ввод? Пример тест может выглядеть следующим образом:

@Test 
public final void verifyParseOne() { 
    assertEquals(new BigDecimal(1), parse("10/10")); 
} 

Затем итеративно «исправить» ваша parse функции, пока он не пройдет все тесты. Подсказка: вы должны попытаться разбить сложные сценарии на более простые, и вы можете сделать это, если ваша функция вызовет себя с другим параметром, чем тот, который был указан, и выполнение некоторых действий по результату. Например. Скажем, ваша функция уже знает, как правильно разобрать «7» и «8», и вы используете ее для создания отдельных объектов BigDecimal для числителя и знаменателя. Как вы можете превратить эти два объекта в один?

ли не читы, вызвав любой из BigDecimal конструкторов, которые принимают char[] или String в качестве аргументов.

Примечание: вам не нужно использовать BigDecimal, вы можете создать аналогичный объект домена для представления чисел. Но это выходит за рамки этого вопроса.

0

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

С этим в руке вы можете разделить строку на значимые части.

Чтобы проанализировать строку, вы можете использовать, как указано в @ 3kings, метод String.split(), это один из способов.

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29

String.split() принимает регулярное выражение как разделитель для разделения на.

Допустим, вы получили вход 1_2/3 и хранить его в переменной с именем inputParts, можно разделить его на _ характер и возвращает массив с 2-х элементов, 1 и 2/3:

String[] inputParts = myInput.split("_"); 

Тогда вам может разделить дробной части и возвращает еще один массив с 2-х элементов, 2 и 3:

String[] fractionParts = inputParts[1].split("/"); 

Вы будете п чтобы получить различные входы, которые вы могли бы получить. Иногда вы можете получить только долю, иногда целую цифру плюс дробь.

Смежные вопросы