4
I’m doing an exercise where I need to convert a typed Roman number, and the program returns a decimal number.
My algorithm:
import java.util.Scanner;
public class NumerosRomanos {
public static void main (String args []) {
System.out.println ("Digite um Número em Romanos, para saber qual é esse Número em Decimais");
Scanner sc = new Scanner (System.in);
String numeroRomanoInicial = sc.nextLine();
String numeroRomano = numeroRomanoInicial.toUpperCase();
System.out.println(verificarNumerosRomanos(numeroRomano));
}
public static int verificarNumerosRomanos (String numeroRomano) {
int digitoRomano = 0;
int digitoRomanoemconjunto = 0;
for (int i=0; i<numeroRomano.length(); i++) {
digitoRomano = numeroRomano.charAt(i);
switch (digitoRomano) {
case 'I': digitoRomano += 1;
break;
case 'V': digitoRomano += 5;
break;
case 'X': digitoRomano += 10;
break;
case 'L': digitoRomano += 50;
break;
case 'C': digitoRomano += 100;
break;
case 'D': digitoRomano += 500;
break;
case 'M': digitoRomano += 1000;
break;
default: System.out.println("Dígito Romano Errado.");
}
}
int soma = 0;
for (int i = 0; i<numeroRomano.length(); i++) {
char dr = numeroRomano.charAt(i);
char drSeguinte = numeroRomano.charAt(i+1);
if (dr == 'I' && drSeguinte == 'V') {
digitoRomanoemconjunto += 4;
} else
if (dr == 'I' && drSeguinte == 'X') {
digitoRomanoemconjunto += 9;
}
else
if (dr == 'X' && drSeguinte == 'L') {
digitoRomanoemconjunto += 50;
} else
if (dr == 'X' && drSeguinte == 'C') {
digitoRomanoemconjunto += 90;
} else
if (dr == 'C' && drSeguinte == 'D') {
digitoRomanoemconjunto += 400;
} else
if (dr == 'C' && drSeguinte == 'M') {
digitoRomanoemconjunto += 900;
}
}
soma += digitoRomano + digitoRomanoemconjunto;
return soma;
}
}
Generates error of StringIndexOutOfBoundsException
.
How to correct this error?
Can add the full error stack to the question as well?
– user28595
Did the answer solve your question? Do you think you can accept it? See [tour] if you don’t know how you do it. This would help a lot to indicate that the solution was useful to you. You can also vote on any question or answer you find useful on the entire site.
– Maniero