Confrontare liste di dimensioni diverse che contengono interi

di il
19 risposte

Confrontare liste di dimensioni diverse che contengono interi

Mannaggia a questi numeri…

Non riesco a confrontare due liste di interi con diverse dimensioni. In passato ho sempre risolto/aggirato questo problema utilizzando delle stringhe a discapito delle prestazioni, ma adesso avrei proprio la necessità di capire come risolvere questa cosa.

Come dicevo, con le stringhe mi bastava iterare la lista verificando poi se conteneva un determinato numero intero ? s_tringa.contins(numero_intero). Invece con gli interi non mi riesce, ho fatto diverse prove (sia con array[] che con arrayList<Integer>) ma senza ottenere il risultato sperato.

L’esempio classico è il seguente:
La prima lista o array, contiene questa cinquina [5,66,3,47,88], mentre la seconda può contenere svariate cinquine, ma per semplificare facciamo finta contenga solo dieci numeri [33,45,5,18,85,66,88,1,63,77], ora come faccio a confrontare la prima lista(5n) con la seconda lista(10n) in modo da verificare se effettivamente la seconda lista contiene almeno 2 numeri identici alla prima lista?

Lista1
[5,66,3,47,88]

Lista2
[33,45,5,18,85
66,88,1,63,77]

La riposta potrebbe essere «Usa un ciclo for annidato!», oppure «Creati un metodo ricorsivo!», bene! Inutile dirvi che non sono in grado, altrimenti non sarei qui.

La ricorsione la abbandono senza rimpianti perché mi provoca un gran mal di testa. Per quanto riguarda il for annidato, non riesco a confrontare lista1[indice0] con lista2[0,1,2,3,4,5] stopparla, incrementare di 5 e confrontare il resto…

lista1[0] ? lista2[0]
lista1[0] ? lista2[1]
lista1[0] ? lista2[2]
lista1[0] ? lista2[3]
lista1[0] ? lista2[4]
lista1[1] ? lista2[0]

Sì , trattandosi di liste avrei dovuto scrivere get[0], get[1], ma questo è solo un esempio.

Se non sono ancora stato abbastanza chiaro, il mio problema è che non riesco a confrontare le singole cinquine, in pratica è la stessa identica cosa di un confronto vincite in base ai numeri giocati, però un po’ più complicato perché non devo confrontare due cinquine ma 1vs10,20,30, eccetera.

19 Risposte

  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    andbin ha scritto:


    Quale è esattamente la difficoltà che hai incontrato nell'uso di un doppio ciclo "annidato"?? Hai provato? Se sì, mostra il codice. Se no, prova ed esponi gli eventuali dubbi.
    Ciao, certo che ho già provato,
    quello che non mi riesce è confrontare blocchi di cinquine, in pratica riesco solo a confrontare tutti i numeri della lista1(cinquina) con tutti i numeri della lista2(esempio:100 numeri). Ma a me non serve sapere che i numeri contenuti nella singola cinquina sono presenti un po’ dappertutto nei 100 numeri.
  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Prendendo come esempio le liste, ho scritto una schifezza del genere...
    
    lista2 = new ArrayList<>();
    lista1 = new ArrayList<>();
    bd = new StringBuilder();
    
    for (int i = 1, t = 0; i <= 90; i++, t++) {	//popolo la lista con 90 numeri		
    	lista1.add(t, i);
    }	
    //li mescolo per non lasciarli in ordine crescente	
    Collections.shuffle(lista1);
    //mostro a video la lista
    System.out.println(lista1.toString()+"\n");
    for(int i = 0; i < 5; i++) { //la cinquina
    	lista2.add(lista1.get(randomizzo())); //inserisco 5 numeri a caso
    }
    //mostro la lista sullo schermo
    System.out.println(lista2.toString()+"\n");
    	
    //invoco il metodo che dovrebbe occuparsene		
    for(int i = 0; i < lista1.size(); i++) {
        confronta(lista1.get(i));	
    }
    //questo è un brutto esempio di metodo, che ho comunque modificato, ma non importa
    private static void confronta(int nm) {
    
    		Iterator<Integer> it = lista2.iterator();
    		while (it.hasNext()) {
    			Integer n = it.next();
    			if (c <= 5) {
    				if (n.equals(nm)) {
    					bd.append(n + " ");
    				}
    				c++;
    			}
    		}
    		c = 1;
    	}
    
  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Mi serve la soluzione non un altro problema, quelli me li creo già da solo.
  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Con gli array invece ho fatto così:
    
    static Integer[] archivio;
    static Integer[] cinquina;
    	
    static final int col = 5;
    static final int row = 90;
    
    archivio = new Integer[90];
    cinquina = new Integer[] {1,38,88,2,5}; //ho deciso di inserirli subito
    
    for (int i = 1, t = 0; i <= 90; i++, t++) {
    	archivio[t] = randomizzo();//lo invoco 90 volte per numeri random			
    }
    
    /* ARRAY */
    System.out.println(Arrays.toString(archivio));
    System.out.println(Arrays.toString(cinquina) +"\n");
    		
    for(int r = 0; r < row; r++) {
    	for(int c = 1; c < col; c++) {	
    		if(cinquina[c-1] == archivio[r])
    			System.out.print(archivio[r]+" ?" + "\t");
    		else
    			System.out.print(archivio[r] + "\t");
    		r++;
    	}
    	if(cinquina[4] == archivio[r])
    	  System.out.println(archivio[r]+" ?");
    	else
    	  System.out.println(archivio[r]);
    }
    
    e ottengo questo deludente risultato:

    archivio [52, 57, 17, 28, 70, 60, 8, 14, 65, 7, 77, 35, 83, 26, 68, 8, 80, 61, 68, 79, 26, 19, 50, 63, 33, 72, 59, 78, 67, 38, 64, 84, 74, 34, 5, 59, 38, 37, 26, 78, 54, 85, 26, 85, 29, 24, 37, 47, 87, 19, 30, 8, 19, 15, 20, 74, 18, 83, 1, 69, 57, 50, 13, 77, 40, 36, 34, 15, 22, 72, 54, 73, 68, 46, 45, 44, 72, 21, 15, 57, 57, 19, 56, 54, 50, 55, 72, 7, 2, 1]

    cinquina [57, 46, 15, 20, 13]

    52 57 17 28 70
    60 8 14 65 7
    77 35 83 26 68
    8 80 61 68 79
    26 19 50 63 33
    72 59 78 67 38
    64 84 74 34 5
    59 38 37 26 78
    54 85 26 85 29
    24 37 47 87 19
    30 8 19 15 20
    74 18 83 1 69
    57 ? 50 13 77 40
    36 34 15 ? 22 72
    54 73 68 46 45
    44 72 21 15 57
    57 ? 19 56 54 50
    55 72 7 2 1
  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Sì, questo è ovviamente solo una bozza, non sto utilizzando dati reali, quindi che ci siano doppioni o meno è indifferente.

    Mi hai fatto questo esempio:
    for (Integer v1 : lista1) {
        if (lista2.contains(v1)) {
            // il valore v1 è presente in ENTRAMBE le liste, stampa/conteggia ...
        }
    }
    ...mi piace, ma non riesco a gestire le benedette cinquine, però ripensandoci magari con un if(contatore % 5 != 0) aggiungi...
    devo provare non lo so. Hai capito che non riesco a fargli considerare solo gruppi di 5 numeri?
  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Andrea, devo verificare se una delle diverse cinquine contenga almeno un ambo. Comunque, lasciamo perdere gli array, il codice che mi hai consigliato... vorrei modificarlo per le mie esigenze (non pensare che non l'abbia già fatto, il fatto è, che non ci sono riuscito).

    Allora:
    int p = 1;
    		for (Integer v1 : lista1) {
    			if (lista2.contains(v1)) {
    				if (p % 5 != 0) {
    					// il valore v1 è presente in ENTRAMBE le liste, stampa/conteggia ...
    					bd.append(v1).append(" "); //mi dovrebbe appendere i numeri solo se questo pezzo di lista fa parte di una cinquina
    					p++;
    				}				
    			}
    		}
    		System.out.println(bd);
  • Re: Confrontare liste di dimensioni diverse che contengono interi

    andbin ha scritto:


    E questo archivio cosa dovrebbe essere?? Un "archivio" di un tot di cinquine?? E se così fosse, ti sembra sensato/utile avere tante cinquine messe "piatte" così in un unico array??
    In effetti no, non mi sembra per nulla utile né sensato.
    Probabilmente se avessi voluto utilizzare quel metodo, sarebbe stato meglio usufruire deile matrici, avrò sbagliato qualche congiuntivo, ma chissenefrega!
  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Sì, voglio sapere se 2 numeri si sono già ripetuti nelle cinquine passate. Forse adesso ti è più chiaro, ah, ma tu non sei in grado di leggermi nel pensiero?

    Dai a parte gli scherzi, se mi dici come posso verificare solo le cinquine ti lascio in pace per almeno un mese lo giuro!

    ######???????????????????????????????????????######
  • Re: Confrontare liste di dimensioni diverse che contengono interi

Devi accedere o registrarti per scrivere nel forum
19 risposte