Boa tarde pessoal!
Estou tendo um problema de lógica. Tenho a seguinte situação: varias listas, por ex: ListaA 15 posições, ListaB 100 posições, N listas. Necessito gerar todas as combinações possíveis.
ListaA ListaB
Valor A1 ValorB1
Valor A1 ValorB2
Valor A1 ValorB3
…
Tentei utilizando varios laços (for) encadeados, sem sucesso. Gostaria de pedir a ajuda de vcs.
Obs.: O número de listas é dinâmico.
Muito obrigado.
Não entendi o problema.
Como assim o número de listas é dinâmico?
posta o codigo do for encadeado porque é esse o caminho
drsmachado. No exemplo expliquei com as ListaA e ListaB, mas eu posso ter a ListaC, ListaD, e assim por diante.
Sobre o problema, preciso montar as todas as combinações possíveis, isto cada elemento e cada lista.
Algo +/- assim que vc quer?
[code]public class Listas {
public static void main(String[] args) {
for (int a = 1; a <= 15; a++){
for (int b = 1; b <= 100; b++){
System.out.println("ListaA"+a+" ListaB"+b);
}
}
}
}[/code]
So implementar do jeito que vc deseja com arrays.
Olá renatogrosz. Infelizmente não consegui montar o pseudo-código (estrutura) para este problema, este seria meu problema.
Frantic Avenger. Acredito que o seja algo semelhante a isto sim, porém o numero de “for” vai depender do número de listas que tiver, além de que cada lista ter um número diferente de elementos.
mas você precisa explicar melhor o que quer.
no caso de ter 3 listas, seria listaA[0] + listaB[0] + listaC[0]
uma combinação? ou seria algo assim: listaA[0] + listaB[0]
// E depois que foram feitas todas as combinações entre as listas A e B, partimos para uma próxima
listaA[0] + listaC[0]
?
Pensei num solução um tanto quanto complexa.
Vc pode percorrer o último array até o final enquanto todos outros estão na primeira posição;
Penúltimo array incrementa 1 na sua posição e o último array percorre até o final e incrementa penúltimo novamente;
Quando o penúltimo array chegar no final faz o mesmo para o antepenúltimo;
…
Considerei isso, é porque não quis colocar um input no exemplo.
listaA[0] listab[0] listac[0]
listaA[0] listab[0] listac[1]
listaA[0] listab[0] listac[2]
listaA[0] listab[0] listac[3]
listaA[0] listab[0] listac[4]
listaA[0] listab[0] listac[5] //acabou a listaC
listaA[0] listab[1] listac[0]
listaA[0] listab[1] listac[1]
listaA[0] listab[1] listac[2]
listaA[0] listab[1] listac[3]
listaA[0] listab[1] listac[4]
listaA[0] listab[1] listac[5]
Desculpe a dificuldade em explicar o problema.
Quer fazer um produto cartesiano…
Até onde entendi, acho que este código resolve o que você precisa:
Esta mal programado, talvez não seja a melhor solução, mas acho que te atende.
public class Main {
public static void main(String[] args) {
String[] list1 = {"1", "2", "3"};
String[] list2 = {"4", "5", "6"};
String[] list3 = {"7", "8", "9"};
test(list1, list2, list3);
}
public static void test(String[] ... array) {
if(array != null) {
int length = array.length;
for(int index = 0; index < length; index++) {
String[] list = array[index];
int initValue = index + 1;
for(int indexSub = initValue; indexSub < length; indexSub++) {
String[] listSub = array[indexSub];
for(String value : list) {
for(String valueSub : listSub) {
// comparar ou fazer o que deseja com os valores
System.out.println(value + " " + valueSub);
}
}
}
}
}
}
}
Obrigado a todos pelas respostas, acabei limitando o numero de colunas em 5, criando para cada situação (1,2,3, n colunas) estaticamente. Assunto encerrado.