Originariamente inviato da bonobo
{"a","b","c","d"}
mi dia tutte le combinazioni possibili immaginabili di 2,3....n lettere che decido io!!
ad esempio se inserisco 2:
dovrebbe uscire una cosa cosi...
aa ab ac ad
ba bb bc bd
ca cb cc cd
da db dc dd
se inserisco 3:
aaa aab aac aad
aba abc abd abb ...etcetc... :master: ..sto gia andando in confusione!!
Si chiamano "disposizioni con ripetizioni". Il numero totale di sequenze è: n elevato k. Dove n è il numero di elementi e k (la "classe") è il numero di elementi estratti.
Nel tuo primo esempio: 4^2 = 16, nel tuo secondo esempio: 4^3 = 64
Originariamente inviato da bonobo
è una cosa fattibile??o ci sarebbero troppi cicli??
La questione è la seguente. Se k è fisso e prestabilito, il tutto si ridurrebbe a fare k cicli innestati.
Se k è 2 (tuo primo esempio):
codice:
public class Prova {
public static void main(String[] args) {
String[] elem = { "a", "b", "c", "d" };
for (int i = 0; i < elem.length; i++) {
for (int j = 0; j < elem.length; j++) {
System.out.println("sequenza " + elem[ i] + elem[j]);
}
}
}
}
Se k fosse 3, dovresti avere 3 cicli innestati. Cosa intuisci? Che questo "cablare" l'annidamento dei cicli funziona ovviamente solo se sai a priori il valore di k e appunto puoi "cablare" nel sorgente questa struttura di cicli.
Non ti va bene? Ovvio, così non puoi trattare un k arbitrario. Il sorgente è quello ... dovresti cambiarlo!! È una questione "strutturale".
Ma c'è un'altra soluzione, logica, lineare e generica. I tuoi elementi nell'array hanno un indice, nel tuo esempio sopra per 4 elementi, hai indici 0, 1, 2 e 3.
Traduci quelle sequenze di lettere nelle sequenze degli indici:
00
01
02
03
10
11
12
13
20
21
...
...
Che cosa ti sembra? Visto così sembra un banale sistema di numerazione, dove ogni "cifra" va da 0 a 3. Arrivato al 3, se si aggiunge 1, si ritorna a 0 e si incrementa la cifra successiva.
Esattamente come succede nel sistema di numerazione decimale (che invece va fino a 9)!!!
Puoi realizzare una tale progressione degli indici??? Certo che si può fare. Basta avere k variabili numeriche, inizialmente a 0. Incrementi l'indice meno significativo, quando sei al 3 e incrementi di 1, ritorni a 0 e incrementi la successiva cifra. E così via ....
Per ogni sequenza di indici, puoi ovviamente avere la sequenza degli elementi!!!
Il resto lo lascio dedurre e fare a te. Pensaci. Non è difficile .... basta solo ragionare su come realizzare questa progressione degli indici. Ti assicuro che si può fare. E anche bene e in modo estremamente "generico".