2013-12-01 3 views
0

Я занимаюсь курсом AP Computer Science, и у меня проблема с этим кодом. Мы должны сделать метод , который преобразует строки римской цифры в десятичные значения.Java Beginner - римские цифры до десятичных разрядов БЕЗ переключателя

До сих пор мы только получали инструкции if/else и while. Я видел несколько ответов здесь, используя переключатель, но наш класс еще не дошел. Мне нужен способ сделать это без использования переключателя. Я написал только код, предполагающий, что римские цифры находятся в невозрастающем порядке, но всякий раз, когда используется строка типа «ММ», метод возвращает «0» в качестве значения. Кто-нибудь знает, почему это происходит здесь?

Любые советы по вычитанию цифр также будут оценены.

public int decimalValue (String roman){ 
    //given a Roman Numeral 
    int decimal =0; 
    int a = 0; // a and b used as to check each letter in String roman 
    int b = 1; 

    // Assuming in non-ascending order. Need to make for ascending 
    while ((a <= (roman.length() - 1)) && (b <= roman.length())) { 
     if (roman.substring(0,1) == "M") { 
      decimal = decimal + 1000; 
     } 
     else if (roman.substring(0,1) == "D") { 
      decimal = decimal + 500; 
     } 
     else if (roman.substring(0,1) == "C") { 
      decimal = decimal + 100; 
     } 
     else if (roman.substring(0,1) == "L") { 
      decimal = decimal + 50; 
     } 
     else if (roman.substring(0,1) == "X") { 
      decimal = decimal + 10; 
     } 
     else if (roman.substring(0,1) == "V") { 
      decimal = decimal + 5; 
     } 
     else if (roman.substring(0,1) == "I") { 
      decimal = decimal + 1; 
     } 
     a++; 
     b++; 
     } 

    return decimal; 
    } 
+5

Не сравнить содержимое 'Strings' с помощью' '==. Вместо этого используйте 'equals()'. –

+0

Ваш учитель не позволит вам использовать «переключатель»? Вам должно быть позволено сделать ваш код более приятным: p – keyser

+0

Переключатель хорош! Мы учили коммутатору до того, как и где: –

ответ

3

Несколько вещей:

  1. Вам не нужно два счетных переменных a и b. Одним из них является достаточно
  2. Вы хотели бы проверить символы строки, поэтому следует использовать roman.charAt(a) проверить символ в позиции a в строке
  3. символов (и другие примитивные типы) сравнить с ==, струнные вы должны сравнить с .equals()
  4. Прямо сейчас, с roman.substring(0,1), вы просто проверяете первый символ строки, поэтому вы хотите изменить это на roman.substring(a, a+1) или использовать символы, как я писал в 2. Таким образом, вы будете продолжать проверять один символ за другим.
  5. Вы также должны думать о цифрах, как IX, эти те, которые вы еще не распознают;)
Смежные вопросы