Certo che si può fare. Come capita spesso, quando vedo quesiti di questo tipo cerco anche io di "esercitarmi" e provo a scrivere del codice.Originariamente inviato da Hermiod
Ho capito l'idea e mi sembra ottima ma non mi torna il fatto che si possa fare con un solo ciclo senza "cablare" l'elaborazione.
Bene, ho scritto una classe che si occupa solo di gestire queste combinazioni, con un costruttore che riceve il String[][] (e fa anche una serie di validazioni sull'array) e con un metodo next() che restituisce in String[] il prossimo "gruppo". Tutto generico e "pilotato" interamente dai dati nell'array in input. Il mio sorgente è venuto di 54 righe...
Supponi di avere 3 righe, quindi avrai un array int[] di lunghezza 3, inizialmente sarà { 0, 0, 0 }Originariamente inviato da Hermiod
questa cosa dell'incremento dell'indice sarebbe in realtà il valore da inserire nella locazione di comb? Ogni volta che mi sposto di locazione, dopo aver inserito il valore, devo ripartire nuovamente dal fondo?!
Io per fare queste cose in genere tengo una variabile boolean di "carry" (riporto), inizialmente a true (perché deve fare "riporto" di 1 già sull'indice meno significativo).
Poi basta fare un ciclo for, ripeto, ne basta uno per far progredire l'array di int dalla combinazione numerica corrente a quella successiva. Parti dall'ultimo elemento, fino verso il primo, se il valore è minore di 2 (se vuoi generalizzarlo, non cablare 2, basati sulla lunghezza della riga i-esima) incrementi e metti carry a false e fai in modo che il ciclo finisca subito.
Se il valore è 2, azzeri il valore e non fai altro, il ciclo prosegue con l'indice più a sinistra e siccome il carry è ancora true, si ripeterà il test.
Se terminato il ciclo il carry è true, vuol dire che ha fatto "riporto" dall'indice più significativo e quindi la sequenza è terminata e il prossimo next() dovrà restituire null (se scegli questo design come ho fatto io).


Rispondi quotando