Witam, mam problem z programem konwertującym liczby rzymskie na arabskie i odwrotnie. Konkretnie, to gdy wpiszę liczbę arabską to działa dobrze, lecz jeśli rzymską to wyskakuje mi nieprawidłowa dana. Wiem, że problem może być spowodowany ****rzym!=arab2rzym(parametr) ****, ale nie wiem dlaczego przez to. Jeśli usunę ten wyjątek to większość przypadków działa, no ale nie wszystkie. Byłby ktoś w stanie pomóc z tym?
public class RzymArab
{
private static String[] rzymskie = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
private static int[] arabskie = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
private static boolean isInt(String line)
{
boolean isInt=true;
try
{
Integer.parseInt(line);
}
catch(NumberFormatException ex)
{
isInt=false;
}
return isInt;
}
public static int rzym2arab (String rzym) throws RzymArabException
{
int parametr=0;
int tmp=0;
for(int i=0; i<rzymskie.length; i++)
{
while(rzym.startsWith(rzymskie[i], tmp))
{
parametr=parametr+arabskie[i];
tmp=tmp+rzymskie[i].length();
}
}
if( rzym!=arab2rzym(parametr) || parametr>3999 )
throw new RzymArabException("Nieprawidłowa dana");
return parametr;
}
public static String arab2rzym (int arab) throws RzymArabException
{
if(arab<1 || arab>3999)
throw new RzymArabException("Nieprawidłowa dana");
StringBuilder parametr = new StringBuilder("");
for(int i=0; i<arabskie.length; ++i)
{
while(arab>=arabskie[i])
{
parametr.append(rzymskie[i]);
arab=arab-arabskie[i];
}
}
return parametr.toString();
}
public static void main(String[] args)
{
for(String t: args)
{
try
{
if(isInt(t))
{
int n=Integer.parseInt(t);
System.out.println(arab2rzym(n));
}
else
{
System.out.println(rzym2arab(t));
}
}
catch(RzymArabException e)
{
System.out.println(e.getMessage());
continue;
}
}
}
}
class RzymArabException extends Exception
{
public RzymArabException(String message)
{
super(message);
}
}