Следующий класс содержит метод fromRomanToArabic()
в этом методе. Я пытаюсь преобразовать арабский номер в римский номер. метод должен действовать следующим образом:Указатель строки из связанной ошибки
- взять пользователя строку из объекта
- itterate через строку
- просуммировать значения, связанные с персонажами. Если число, связанное с символами, больше предыдущего, вычитайте значение символа из суммы.
вот мой код:
package romantoarabicnums;
import javax.swing.JOptionPane;
public class RomanToArabicNums {
private static String userString;
private static int userNumber;
private static char letter;
private static int letterNum;
public RomanToArabicNums (String s) throws NumberFormatException {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'M' ||s.charAt(i) == 'D' ||s.charAt(i) == 'C' ||s.charAt(i) == 'X' ||
s.charAt(i) == 'V' ||s.charAt(i) == 'I' ||s.charAt(i) == 'L') {
userString += s.charAt(i);
}
else {throw new NumberFormatException("Only M,C,D,X,V and I allowed");}
}
}
public RomanToArabicNums (int num) throws NullPointerException {
if (num >= 1 && num <= 3999) {
RomanToArabicNums.userNumber = num;
}
else {throw new NumberFormatException("numbers between 1 and 3999 only!");}
}
public RomanToArabicNums (char let, int num) {
RomanToArabicNums.letter = let;
RomanToArabicNums.letterNum = num;
}
public static void main(String[] args) {
RomanToArabicNums r2 = new RomanToArabicNums("MCMXCV");
System.out.println("the arabic number is: " + r2.fromRomanToArabic());
}
/* convert Roman characters to Arabic numbers */
public int fromRomanToArabic() {
int sum = 0;
for (int i = 0; i <= userString.length(); i++) {
/**/
if (userString.charAt(i) == 'M') {
sum += 1000;
}
/**/
if (userString.charAt(i) == 'D') {
if (userString.charAt(i + 1) == 'M') {
sum -= 500;
} else {
sum += 500;
}
}
/**/
if (userString.charAt(i) == 'C') {
if (userString.charAt(i + 1) == 'M' || userString.charAt(i + 1) == 'D') {
sum -= 100;
} else {
sum += 100;
}
}
/**/
if (userString.charAt(i) == 'L') {
if (userString.charAt(i + 1) == 'M' || userString.charAt(i + 1) == 'D'
|| userString.charAt(i + 1) == 'C') {
sum -= 50;
} else {
sum += 50;
}
}
/**/
if (userString.charAt(i) == 'X') {
if (userString.charAt(i + 1) == 'M' || userString.charAt(i + 1) == 'D'
|| userString.charAt(i + 1) == 'C' || userString.charAt(i + 1) == 'L') {
sum -= 10;
} else {
sum += 10;
}
}
/**/
if (userString.charAt(i) == 'V') {
if (userString.charAt(i + 1) == 'M' || userString.charAt(i + 1) == 'D'
|| userString.charAt(i + 1) == 'C' || userString.charAt(i + 1) == 'L'
|| userString.charAt(i + 1) == 'X') {
sum -= 5;
} else {
sum += 5;
}
}
/**/
if (userString.charAt(i) == 'I') {
if (userString.charAt(i + 1) == 'M' || userString.charAt(i + 1) == 'D'
|| userString.charAt(i + 1) == 'C' || userString.charAt(i + 1) == 'L'
|| userString.charAt(i + 1) == 'X' || userString.charAt(i + 1) == 'V') {
sum -= 1;
} else {
sum += 1;
}
}
}
return sum;
}
}
Примечание: Я думаю, что ошибка происходит из-за количества строк элементов является менее, что шаги в петля для петли
Возможный дубликат [string index out of bound exception, String index out the range] (http://stackoverflow.com/questions/28777630/string-index-out-of-bound-exception-string-index-out -of-range) – xenteros
В чем причина добавления функциональности преобразования арабского языка в римский класс под названием RomanToArabicNums? – xenteros