[Kendall]
25-03-2011, 15:42
Salve ragazzi, volevo chiedervi un consulto... Mi sto impratichendo di Java e facevo qualche esercizietto proposto... In pratica è un semplice programma di inserimento di una tabella caratteri e ricerca all'interno della stessa... Tutto ok, tranne un particolare.
Quando inserisco nella tabella i caratteri, nonchè poi quando vado ad inserire il carattere da ricercare, mi permette di utilizzare il metodo:
tabella[i][j] = input.next().charAt(0);
e non il metodo
tabella[i][j] = input.nextLine().charAt(0);
In questo secondo caso mi dà il classico errore in fase di esecuzione OutOfBound per la Stringa inserita.
Io però ricordo assolutamente di aver già utilizzato in un altro programmino la versione con nextLine, senza errore alcuno...
Conosco le differenze tra il next, e il nextLine (la prima prende la prima parola, la seconda l'intera riga, spazi inclusi, se non erro), ma non capisco in questo caso perchè dia un simile errore.
Ecco il codice del programma comunque.
import java.util.Scanner;
class Esercizio15 {
public static void main(String argv[]) {
char tabella[][];
char ricerca;
int r, c;
int i, j;
int contatore;
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("Inserire le dimensioni della tabella da compilare:");
do {
System.out.print("Righe = ");
r = input.nextInt();
if (r<2) {
System.out.println("Una tabella deve contenere almeno due righe e due colonne. Riprovare...");
}
} while (r<2);
do {
System.out.print("Colonne = ");
c = input.nextInt();
if (c<2) {
System.out.println("Una tabella deve contenere almeno due righe e due colonne. Riprovare...");
}
} while (c<2);
tabella = new char[r][c];
System.out.println();
System.out.println("Inserire i caratteri nella tabella, seguendo l'ordine indicato a schermo:\n");
for (i=0 ; i<r ; i++) {
for (j=0 ; j<c ; j++) {
System.out.print("Tabella(" + (i+1) + "," + (j+1) + ") = ");
tabella[i][j] = input.next().charAt(0);
}
System.out.println();
}
System.out.println("\n");
System.out.println("TABELLA CARATTERI");
for (i=0 ; i<r ; i++) {
System.out.print("|");
for (j=0 ; j<c ; j++) {
System.out.print(" " + tabella[i][j] + " ");
}
System.out.print("|");
System.out.println();
}
System.out.println();
System.out.print("Inserire il carattere da ricercare: ");
ricerca = input.next().charAt(0);
contatore = 0;
for (i=0 ; i<r ; i++) {
for (j=0 ; j<c ; j++) {
if (tabella[i][j] == ricerca) {
System.out.println("Trovato! Riga " + (i+1) + ", Colonna " + (j+1) + ".");
contatore += 1;
}
}
}
if (contatore == 0) {
System.out.println("Carattere non trovato!");
}
System.out.println();
}
}
Qualche idea?
Quando inserisco nella tabella i caratteri, nonchè poi quando vado ad inserire il carattere da ricercare, mi permette di utilizzare il metodo:
tabella[i][j] = input.next().charAt(0);
e non il metodo
tabella[i][j] = input.nextLine().charAt(0);
In questo secondo caso mi dà il classico errore in fase di esecuzione OutOfBound per la Stringa inserita.
Io però ricordo assolutamente di aver già utilizzato in un altro programmino la versione con nextLine, senza errore alcuno...
Conosco le differenze tra il next, e il nextLine (la prima prende la prima parola, la seconda l'intera riga, spazi inclusi, se non erro), ma non capisco in questo caso perchè dia un simile errore.
Ecco il codice del programma comunque.
import java.util.Scanner;
class Esercizio15 {
public static void main(String argv[]) {
char tabella[][];
char ricerca;
int r, c;
int i, j;
int contatore;
Scanner input = new Scanner(System.in);
System.out.println();
System.out.println("Inserire le dimensioni della tabella da compilare:");
do {
System.out.print("Righe = ");
r = input.nextInt();
if (r<2) {
System.out.println("Una tabella deve contenere almeno due righe e due colonne. Riprovare...");
}
} while (r<2);
do {
System.out.print("Colonne = ");
c = input.nextInt();
if (c<2) {
System.out.println("Una tabella deve contenere almeno due righe e due colonne. Riprovare...");
}
} while (c<2);
tabella = new char[r][c];
System.out.println();
System.out.println("Inserire i caratteri nella tabella, seguendo l'ordine indicato a schermo:\n");
for (i=0 ; i<r ; i++) {
for (j=0 ; j<c ; j++) {
System.out.print("Tabella(" + (i+1) + "," + (j+1) + ") = ");
tabella[i][j] = input.next().charAt(0);
}
System.out.println();
}
System.out.println("\n");
System.out.println("TABELLA CARATTERI");
for (i=0 ; i<r ; i++) {
System.out.print("|");
for (j=0 ; j<c ; j++) {
System.out.print(" " + tabella[i][j] + " ");
}
System.out.print("|");
System.out.println();
}
System.out.println();
System.out.print("Inserire il carattere da ricercare: ");
ricerca = input.next().charAt(0);
contatore = 0;
for (i=0 ; i<r ; i++) {
for (j=0 ; j<c ; j++) {
if (tabella[i][j] == ricerca) {
System.out.println("Trovato! Riga " + (i+1) + ", Colonna " + (j+1) + ".");
contatore += 1;
}
}
}
if (contatore == 0) {
System.out.println("Carattere non trovato!");
}
System.out.println();
}
}
Qualche idea?