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.
Spiego: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; }
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.

Rispondi quotando