Salve dato il programma , che dovrebbe leggere 4 righe di stringhe da input dove ogni riga è del tipo :
A B N M J I O P ... oppure minuscole
viene suddivisa in token in base agli spazi, e le prime 4 lettere vengono immesse nella i-esima riga di una matrice 4x4(B1) e le altre 4 sempre nella i-esima riga in(B2) un altra matrice 4x4(le lettere in eccesso non vengono tenute in considerazione, nemmeno le righe in eccesso) fino a riempirle!... volendo evitare alcuni casi sbagliati di lettura da input ho inserito una classe fatta da me per gestire le eccezioni ,penso che il problema sia proprio questo, infatti commentando l'if segnalato nel metodo ricorsivo della classe che segue il programma fa quanto detto. Magari è una cavolata ma è da ieri che ci esco pazzo
premetto non sono molto pratico a gestire le eccezioni...
help me 
se non commento l'if:
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
codice:
public class LeggiPreparaM {
private final int D=4;
private String riga;
private char B1[][];
private char B2[][];
private StringTokenizer st;
private Scanner in_Str=new Scanner(System.in);
private int R;
private int indR;
public LeggiPreparaM() {
riga=""; B1=new char[D][D]; B2=new char[D][D]; st=null; R=0; indR=0;
}
public void setIndR(int indR) {
this.indR = indR;
}
public void LeggiRigheM() throws ErroreRigaDiInput{
int R=0;
System.out.println("INSERISCI RIGHE************************************++");
while(true){
riga=in_Str.nextLine();
if( riga.equals("#") ) break;
st= new StringTokenizer(riga," ");
AssegnaRiga(R,0,B1);
AssegnaRiga(R,0,B2);
System.out.println();
R++;
}
}
public void AssegnaRiga(int R,int C1,char B[][]) throws ErroreRigaDiInput{
if(C1==D) {
return ;
}
if(st.nextToken().length()>=2 )/////////<<<<<<<<<---
throw new ErroreRigaDiInput();/////////<<<<<<<<<----
if(R<4)
B[R][C1]=st.nextToken().toUpperCase().charAt(0);
AssegnaRiga(R, C1+1,B);
}
public void StampaMatrici(){
System.out.println("STAMPA DELLE MATRICI!!!");
for(int r=0 ; r<4 ; r++){
for(int c=0 ; c<4 ; c++)
System.out.println( B1[r][c]);
System.out.println();
}
for(int r=0 ; r<4 ; r++)
for(int c=0 ; c<4 ; c++)
System.out.println( B2[r][c]);
}
////////////////////////////////////////////////////////////////////////
public class AVVIO_bG {
public static void main(String args[]){
LeggiPreparaM L= new LeggiPreparaM();
boolean cicla;
do{
try {
L.LeggiRigheM();
cicla=false;
} catch (ErroreRigaDiInput E)
{
cicla=true;
E.GuidaImmissioneDati();
}
}while(cicla);
L.StampaMatrici();
System.out.println("STOP ");
}
/////////////////////////////////////////////////////////////////////////////////////
public class ErroreRigaDiInput extends Exception{
public ErroreRigaDiInput() {
}
public void ErroreLetterePriveDiSpazio(){
System.out.println("ERRORE DI INSERIMENTO ");
}
public void GuidaImmissioneDati(){
System.out.println("IMMETTERE I DATI NEL SEGUENTE MODO !!");
}
}