mattiac2210 ha scritto:
Non ho capito il perchè si arriva ad una soluzione del genere. Vi posto la consegna e la soluzione.
La soluzione postata mi pare tecnicamente corretta. Quali sono i dubbi? Il concetto è semplice: bisogna innanzitutto fare le prove da A verso B e poi il contrario per verificare che siano davvero simili. Questo è il motivo per cui ci sono due for principali.
Preso un valore di A, quando sai che NON è presente in B? Banalmente solo
dopo che il for interno ha esaminato tutti i valori in B.
Tu questo l'hai gestito con un test "in mezzo" al ciclo if (j == b.length - 1) ovvero se non c'è stata uguaglianza prima e sono all'ultimo elemento, allora evidentemente il valore non è stato trovato.
Ripeto: tecnicamente risulta corretto. Io personalmente l'avrei risolto in altro modo: con il
continue con label!
Se a[i] == b[j] si mette un continue con "etichetta" per far continuare
immediatamente il ciclo esterno. Poi DOPO il ciclo interno si mette un return false fisso, perché se arriva lì vuol dire che appunto non ha trovato nulla.
Questa soluzione tra l'altro non necessiterebbe di usare gli indici, quindi si potrebbe fare con il for-each di Java 5.
Cioè:
atob:
for (int va : a) {
for (int vb : b) {
if (va == vb) {
continue atob;
}
}
return false; // se arriva qui NON ha trovato corrispondenza
}
E idem similare per l'altro verso (b to a).