Problema java
Alcuni insiemi di parole hanno proprietà interessanti; in particolare, le parole possono essere scritte nelle celle di un quadrato nxn in modo tale che tutte le parole possono essere lette sia orizzontalmente sia verticalmente. Allo stesso tempo, la parola sulla prima riga deve essere presente sulla prima colonna, quella della seconda riga essere anche sulla seconda colonna e così via per ogni parola presente sulla riga i deve essere presente sulla colonna i. Un esempio di un tale insieme è dato da S = {"DATE", "FIND", IDEA", NEXT"}. Questo insieme può essere inserito nella seguente griglia quadrata:
F I N D
I D E A
N E X T
D A T E
Queste griglie sono dette quadrati di parole.
Data una griglia 4 x 4, con una lettera maiuscola dell'alfabeto latino in ciascuna cella, determinare se questa griglia rappresenta un quadrato di parole.
Creo l'array a che mi rappresenta una matrice quadrata $4x4$, poi attraverso il Lettore che è un oggetto che mi permette di leggere da input un singolo carattere ricevo l'input, solo che siccome devo alternare carattere alfabetico-spazio, anche lo spazio mi viene riconosciuto come carattere ovviamente e quindi la dimensione dell'array $4x4$ sarebbe troppo piccola, allora ho pensato di leggere il primo carattere ed assegnarlo all'array, e poi il secondo carattere non assegnarlo a nessuna variabile, in modo tale che viene letto lo spazio, ma la dimensione dell'array rimane giusta. Solo non funziona...
F I N D
I D E A
N E X T
D A T E
Queste griglie sono dette quadrati di parole.
Data una griglia 4 x 4, con una lettera maiuscola dell'alfabeto latino in ciascuna cella, determinare se questa griglia rappresenta un quadrato di parole.
a = new char[4][4]; for (i=0; i<4; i++) { for (j=0; j<4; j++) { a[i][j] = Lettore.in.leggiChar(); Lettore.in.leggiChar(); } }
Creo l'array a che mi rappresenta una matrice quadrata $4x4$, poi attraverso il Lettore che è un oggetto che mi permette di leggere da input un singolo carattere ricevo l'input, solo che siccome devo alternare carattere alfabetico-spazio, anche lo spazio mi viene riconosciuto come carattere ovviamente e quindi la dimensione dell'array $4x4$ sarebbe troppo piccola, allora ho pensato di leggere il primo carattere ed assegnarlo all'array, e poi il secondo carattere non assegnarlo a nessuna variabile, in modo tale che viene letto lo spazio, ma la dimensione dell'array rimane giusta. Solo non funziona...
Risposte
Ti do un consiglio: non usare valori numerici per crearti l'array multidimensionale. Fissa una variabile per esempio n=4 e la usi al posto dei numeri.
Inoltre ci sono cose che non sono chiare.
Cosa fa Lettore.in.LeggiChar()? Se è un metodo che hai creato tu postalo altrimenti non ci capisco nulla.
S è un array di stringhe?
Perché se è cosi devi usare il metodo split in modo che la stringa vengo suddivida.
In ultimo credo che non ti funziona perché devi convertire la parola in char
Inoltre ci sono cose che non sono chiare.
Cosa fa Lettore.in.LeggiChar()? Se è un metodo che hai creato tu postalo altrimenti non ci capisco nulla.
S è un array di stringhe?
Perché se è cosi devi usare il metodo split in modo che la stringa vengo suddivida.
In ultimo credo che non ti funziona perché devi convertire la parola in char
Così com'è non abbiamo modo di capire quale possa essere il problema. Lettore.in.leggiChar non è infatti una funzione standard di Java. Il fatto che ci debbano essere degli spazi tra i singoli caratteri è richiesto dal professore, dalla funzione leggiChar o altro?
Partendo dal presupposto che le parole vadano scritte senza spazi, ed in ordine, puoi utilizzare il seguente codice, che se ho visto bene funziona correttamente:
Ciao.
/** * * @author curie88 */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here String[] str1 = {"FIND","IDEA","NEXT","DATE"}; int k = 0; int i = 0; int j = 0; while ( i <= 3 ) { if ( j <= 3 ) { char c1 = str1[i].charAt(j); char c2 = str1[j].charAt(i); if ( c1 == c2 ) { k += 1; j += 1; } else { i = 4; } } else if ( j == 4 ) { j = 0; i += 1; } } if (k == 16) { System.out.println("OK, la matrice è un quadrato di parole."); } else { System.out.println("La matrice <NON> è un quadrato di parole."); } } }
Ciao.