2015-01-25 3 views
0

Для моего текущего кода я создаю калькулятор слов, где слова вводятся для представления чисел, а вычисления выполняются внутри кода. Требования - ввести в консоль два номера и оператор. Я смог разобрать вход на три части, первое число, оператор и второе число.Изменение слова на цифры Java

Мой вопрос: как я должен обращаться, когда я конвертирую слово в цифровую форму? Например, если пользователь, введенный:

семьсот восемьдесят восемь плюс девяносто-пять

Как я могу превратить это в 788 и 95, так что я могу сделать вычисления в коде? Мой вход должен доходить до 1000.

Это часть моего кода для деления ввода.

import java.util.Scanner; 
public class TextCalc2 { 
public static void main (String[] args) { 
Scanner input = new Scanner(System.in); 
String in = input.nextLine(); 
in = in.toLowerCase(); 
while (!in.equals("quit")) { 
    if (in.contains("plus")){ 
     String number1 = in.substring(0, in.indexOf("plus") - 1); 
     String number2 = in.substring(in.indexOf("plus") + 5, in.length()); 
     String operator = in.substring(in.indexOf("plus"),in.indexOf("plus") + 5); 
     System.out.println(number1); 
     System.out.println(operator); 
     System.out.println(number2); 
    } 
} 
+0

У вас должны быть специальные правила для того, что считается приемлемым. Например. «семьдесят один», но вы не принимаете «семьдесят один»? Честно говоря, я бы просто запрограммировал подростков, двадцать, тридцать, четыреста и т. Д., А затем выберет эти слова. Довольно легко определить число до 1000. – Jared

+3

Используйте это aproach: http://stackoverflow.com/questions/3911966/how-to-convert-number-to-words-in-java. Но используйте метод equals для нахождения правильного числа в массиве. – bsferreira

+0

Должно быть «-» между десятками и теми. Я решил еще раз проанализировать цифры, используя number1.contains («сотни»), но я понял, что будет много разных комбинаций, и для создания одного набора потребовалось бы несколько строк. Мне было интересно, есть ли более простой способ сделать это. – LGPiggyDomo

ответ

0

Прежде всего, возникают проблемы в том, как вы разбиваете вход (вы жестко закодировали операцию). Я бы предложил разбивать ваш вход на «» (пробел), а затем анализировать каждую часть входа отдельно.

У вас будут разные типы слов на вашем входе, один - это однозначное число, двузначное число, операции и «сто».

Тогда вы должны найти, к какому классу относится слово первого слова вашего ввода, если оно имеет «-», оно будет двузначным числом, иначе загляните в другие категории и найдите его, пока не найдете его. Затем, основываясь на категории, решите, что вы должны делать с ней, если ее одна цифра, замените ее ее эквивалентом. если его двойная цифра разделится, а затем замените каждую цифру, если ее операция сохранит ее и вырезает ваш входной массив оттуда, чтобы вы разделили первое значение и второе, и если его сто умножить предыдущую одиночную цифру на 100.

После этих шагов синтаксического анализа у вас будет что-то вроде этого {"700", "88"}, {"95"} и плюс операция. теперь его легко преобразовать каждую строку в ее целочисленное значение, используя метод анализа, а затем применить операцию.

Кстати, было бы проще использовать Enum для ваших констант и просто использовать их порядковое значение. Также используйте комментарий, который сделал Джаред для двухзначных значений.

Сообщите мне, если у вас есть вопросы.

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