Ho un problema con la esecuzione di questo pezzo di programma. In compilazione tutto ok, ma in esecuzione mi da StringIndexOutOfRange -1 ma come logica mi sembra tutto corretto.
codice:
String obama="3 3|3 1$1 G.1 B.1 T$2 S.1 E$";
int n_row;
int n_col;
int cont=0;
int controllor=0;
int controlloc=0;
n_row = Integer.valueOf(obama.substring(0, obama.indexOf(" "))); // Estrapolo numero di righe
n_col = Integer.valueOf(obama.substring(obama.indexOf(" ")+1, obama.indexOf("|"))); //Estrapolo numero di colonne
Piece[] board = new Piece[(n_row*n_col)]; // Creo l'array contenente le caselle
String temp = obama.substring(obama.indexOf("|")+1,obama.length()); // Estrapolo percorso
System.out.println("###"+temp+"###\n");
////////////////////CONTROLLO\\\\\\\\\\\\\\\\\\\\\
String cut=temp;
int cont_c=0;
int cont_r=0;
while(cut!=null){
String cut2 = cut.substring(0,cut.indexOf("$"));
cut = cut.substring(cut.indexOf("$")+1,cut.length());
while(cut2!=null){
String cut3= cut2.substring(0,cut2.indexOf(" "));
cont_r+= Integer.valueOf(cut3);
cut2 = cut2.substring(0,cut2.indexOf("."));
}
if(cont_r!=n_row){
System.out.println("Configurazione errata");
return;
}
cont_c++;
}
if(cont_c!=n_col){
System.out.println("Configurazione errata");
return;
}
Spiego:
La prima parte (quella prima del |) è diciamo la grandezza della matrice, ogni $ indica riga a capo e (ad esempio il primo) 3 1 significa che ci saran 3 caselle da 1, cioè che dopo deve andare acapo, nella riga successiva.
E così tutto, il primo è il numero di caselle che si creano con il secondo elemento.
Questo serve per controllare che realmente son state date le dimensione esatte e che la tabella non sia sballato.
Spero di essere stato chiaro.