Ti ringrazio per il suggerimento ma io peeferisco non usare la variabile booleana come flag di errore ma preferisco andare a testare semplicemente il valore della variabile NrArabo e NrRomano, anche se la tua soluzione è corretta, ripeto di ringrazio ancora comunque!! Ne approfitto ancora anche perchè è sorto un altro piccolo problema, cioè la routine che converte da numero romano ad arabo funziona quasi correttamente inquanto quando devo convertire un nuemro romano composto da 2 cifre ad esempio 4=IV , 9=IX etc. ho sempre il fatitico errore come riportato nell'esempio sottostante:

Numero Arabo: 4
4 = IV
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 2
at java.lang.String.charAt(String.java:460)
at Romani.calcolaNumeroArabo(Romani.java:228)
at TestRomani.main(TestRomani.java:30)

C:\j2sdk1.4.1_01\bin>java TestRomani
Classe di test per la classe Numeri Romani

Numero Arabo: 3999
3999 = MMMCMXCIX
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 9
at java.lang.String.charAt(String.java:460)
at Romani.calcolaNumeroArabo(Romani.java:228)
at TestRomani.main(TestRomani.java:30)


In seguito ti riporto il listato della classe romani:

/** classe che gestisce i numeri romani */
public class Romani {

/************************************************ le variabili di istanza **********************************************/
private String NrRomano="";
private int NrArabo;
/************************************************** *** i costruttori ************************************************** */

/** costruisce un oggetto di tipo Romani String Nr.Romano
@param n di tipo int, è il numero arabo da convertire
*/
public Romani(int n) {

if((n>0)&&(n<4000))
NrArabo = n;
else
//condizione di errore
NrRomano = "";
}//Romani

/** costruisce un oggetto di tipo Romani String Nr.Romano
@param s di tipo String, è il numero romano da convertire
*/
public Romani(String s) {
if(isRomano(s)) //se il numero romano è stato scritto correttamente
NrRomano=s;
else
//condizione di errore
NrArabo=-1;
}//Romani

/************************************************** *** i metodi di accesso *********************************************/

/** @return il riferimento ad un oggetto di tipo String che corrisponde
al numero romano il quale rappresentata dall’oggetto ricevente */
public String getNumeroRomano() {
return NrRomano;
}//getNumeroRomano

/** @return il riferimento ad un oggetto di tipo int che corrisponde
al numero arabo il quale rappresentata dall’oggetto ricevente */
public int getNumeroArabo() {
return NrArabo;
}//getNumeroArabo

/************************************************** ******** il metodo di utilita’ **************************************/

/** @return il riferimento ad un oggetto di tipo String che rappresenta
lo studente corrispondente all’oggetto ricevente */
public String toString() {
return NrArabo+" = "+NrRomano;
}//toString

/************************************************** ******* i metodi relazionali ****************************************/

/**@return il numero romano dell’oggetto ricevente
@error restituisce una stringa vuota laddove si è configurato un errore nell'inserimento dei dati
*/
public String calcolaNumeroRomano(){
int[] VettArabo; //identifica il numero arabo scomposto in cifre
int count=0; //determina la lunghezza del vettore
int quoziente,i; //buffer

/*dividere il numero arabo per 10, conteggiando il numero di divisioni, fino a quando il quoziente non è pari
a zero, in modo tale da ricavare l'ordne del vettore e scindere il numero in cifre*/
quoziente=NrArabo;
do{
quoziente=quoziente/10;
count++;
}while(quoziente!=0);

//instanzio il vettore
VettArabo = new int[count];

//divido il numero in cifre mettendo alla cifra più significativa le migliaia e in quella meno significativa le unità
for(i=(VettArabo.length-1);i>=0;i--){
VettArabo[i] = NrArabo%10;
NrArabo/=10;
}//for

//Conversione
for(i=0;i<VettArabo.length;i++){
if(count==4){ //migliaia
if(VettArabo[i]==1)
NrRomano=NrRomano+"M";
else if(VettArabo[i]==2)
NrRomano=NrRomano+"MM";
else if(VettArabo[i]==3)
NrRomano=NrRomano+"MMM";
}//if count=4
else if (count==3){ //centinaia
if(VettArabo[i]==1)
NrRomano=NrRomano+"C";
else if(VettArabo[i]==2)
NrRomano=NrRomano+"CC";
else if(VettArabo[i]==3)
NrRomano=NrRomano+"CCC";
else if(VettArabo[i]==4)
NrRomano=NrRomano+"CD";
else if(VettArabo[i]==5)
NrRomano=NrRomano+"D";
else if(VettArabo[i]==6)
NrRomano=NrRomano+"DC";
else if(VettArabo[i]==7)
NrRomano=NrRomano+"DCC";
else if(VettArabo[i]==8)
NrRomano=NrRomano+"DCCC";
else if(VettArabo[i]==9)
NrRomano=NrRomano+"CM";
}//if count=3
else if (count==2){ //decine
if(VettArabo[i]==1)
NrRomano=NrRomano+"X";
else if(VettArabo[i]==2)
NrRomano=NrRomano+"XX";
else if(VettArabo[i]==3)
NrRomano=NrRomano+"XXX";
else if(VettArabo[i]==4)
NrRomano=NrRomano+"XL";
else if(VettArabo[i]==5)
NrRomano=NrRomano+"L";
else if(VettArabo[i]==6)
NrRomano=NrRomano+"LX";
else if(VettArabo[i]==7)
NrRomano=NrRomano+"LXX";
else if(VettArabo[i]==8)
NrRomano=NrRomano+"LXXX";
else if(VettArabo[i]==9)
NrRomano=NrRomano+"XC";
}//if count=2
else if (count==1){ //unità
if(VettArabo[i]==1)
NrRomano=NrRomano+"I";
else if(VettArabo[i]==2)
NrRomano=NrRomano+"II";
else if(VettArabo[i]==3)
NrRomano=NrRomano+"III";
else if(VettArabo[i]==4)
NrRomano=NrRomano+"IV";
else if(VettArabo[i]==5)
NrRomano=NrRomano+"V";
else if(VettArabo[i]==6)
NrRomano=NrRomano+"VI";
else if(VettArabo[i]==7)
NrRomano=NrRomano+"VII";
else if(VettArabo[i]==8)
NrRomano=NrRomano+"VIII";
else if(VettArabo[i]==9)
NrRomano=NrRomano+"IX";
}//if count=1
count--;
}//for
return NrRomano;
}//calcolaNumeroRomano

/*@param n di tipo String, rappresenta il la sequenza da controllare se è un numero romano scritto correttamente
@return true se scritto correttamente, false altrimenti*/
public boolean isRomano(String n){
int i=0;
boolean romano = true;
if(n.length()!=0){
//verifica se in n ci sono solo simboli appartenenti all'alfabeto dei numeri romani
while((i<n.length())&&(romano)){
if(!(n.substring(i,i+1).equals("I") || n.substring(i,i+1).equals("V") || n.substring(i,i+1).equals("X") || n.substring(i,i+1).equals("L") || n.substring(i,i+1).equals("C") || n.substring(i,i+1).equals("D") || n.substring(i,i+1).equals("M")))
romano = false;
i++;
}//while
}//if
return romano;
}//isRomano

/*@return il numero arabo dell’oggetto ricevente*/
public int calcolaNumeroArabo(){
int i=0;

//Conversione
while(i<NrRomano.length()-1){

if(NrRomano.substring(i,i+1).equals("M")) //migliaia
NrArabo+=1000;
else if (NrRomano.substring(i,i+1).equals("C")) //centinaia

if(NrRomano.substring(i,i+2).equals("CD")){ //400
NrArabo+=400;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else if(NrRomano.substring(i,i+2).equals("CM")){ //900
NrArabo+=900;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else
NrArabo+=100;

else if (NrRomano.substring(i,i+1).equals("D"))
NrArabo+=500;
else if (NrRomano.substring(i,i+1).equals("X")) //decine

if(NrRomano.substring(i,i+2).equals("XL")){ //40
NrArabo+=40;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else if(NrRomano.substring(i,i+2).equals("XC")){ //90
NrArabo+=90;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else
NrArabo+=10;

else if (NrRomano.substring(i,i+1).equals("L"))
NrArabo+=50;
else if (NrRomano.substring(i,i+1).equals("I")) //unità

if(NrRomano.substring(i,i+2).equals("IV")){ //4
NrArabo+=4;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else if(NrRomano.substring(i,i+2).equals("IX")){ //9
NrArabo+=9;
i++; //salta un carattere in quanto un numero può essere composto da due cifre
}else
NrArabo+=1;

else if (NrRomano.substring(i,i+1).equals("V"))
NrArabo+=5;

i++; //incrementa posizione successiva
}//while

//Qui si controlla l'ultimo carattere fuori dal while.
//Non controlliamo i caratteri doppi in quanto non ce ne possono
//essere

if(NrRomano.charAt(i)==('M')) //migliaia
NrArabo+=1000;
else if (NrRomano.charAt(i)==('C')) //centinaia
NrArabo+=100;

else if (NrRomano.charAt(i)==('D'))
NrArabo+=500;
else if (NrRomano.charAt(i)==('X')) //decine
NrArabo+=10;
if (NrRomano.charAt(i)==('L'))
NrArabo+=50;
if (NrRomano.charAt(i)==('I')) //unità
NrArabo+=1;
else if (NrRomano.charAt(i)==('V'))
NrArabo+=5;

return NrArabo;
}//calcolaNumeroArabo

}//Romani{}


nonchè la classe di test:

public class TestRomani {
/* classe di test per la classe Studente */
public static void main (String[] args) {

Romani NR; // numero romano
String risposta = "s",tmp; // per leggere le risposte dell’utente
int n;//numero arabo da convertire

/* visualizzazione della finalita’ della classe */
System.out.println("Classe di test per la classe Numeri Romani");
System.out.println();


/* ciclo di test */
while (risposta.equals("s")) {

//conversione da arabo a romano
System.out.print("Numero Arabo: ");
n = Input.readInt();

NR = new Romani(n);
tmp = NR.calcolaNumeroRomano();
if(tmp=="") //si è verificata la condizione di errore
System.out.println("Errore nell'inserimento dei dati.");
else
System.out.println(n+" = "+tmp);

//conversione da romano ad arabo
NR = new Romani(tmp);
n = NR.calcolaNumeroArabo();
if(n==-1)
System.out.println("Errore nell'inserimento dei dati.");
else
System.out.println(tmp+" = "+n);

/* nuova interrogazione dell’utente e lettura della sua risposta */
System.out.print("Vuoi Inserire un nuovo Numero? [s/n] ");
risposta = Input.readString();
System.out.println();
}//while
}//main
}//TestRomani{}


Aiutami cortesemente ke sto uscendo pazzo con sto programma !!!