Confrontare liste di dimensioni diverse che contengono interi

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Incollo una classe test poi quando hai due minuti, se puoi dare un'occhiata... magari mostrandomi come implementare ~santo conta riga~, ovviamente stesso discorso vale per chiunque abbia voglia di darmi una mano.
    
    public class ConfrontoNumeri {
    
    	static StringBuilder bd;
    	static Integer[] archivio;
    	static Integer[] cinquina;
    	static int sp = 0;
    
    	private static int random() {
    		return 1 + (int) (Math.random() * 90);
    	}
    
    	public static void main(String[] args) {
    
    		bd = new StringBuilder();
    
    		// inizializzo l'archivio con 40 numeri (8 cinquine)
    		archivio = new Integer[40];
    		// popolo la cinquina
    		cinquina = new Integer[] { 1, 38, 88, 27, 55 };
    
    		for (int t = 0; t < 40; t++) {
    			// popolo l'archivio con numeri random, 
    			// in questo caso non mi interessano le ripetizioni
    			archivio[t] = random();
    		}
    
    		// Mostro a video l'archivio test
    		int c = 1;
    		for (Integer a : archivio) {
    			if (c % 5 != 0)
    				System.out.print(a + "\t");
    			else
    				System.out.println(a);
    			c++;
    		}
    		// Mostro a video la cinquina test
    		System.out.println();
    		for (Integer cq : cinquina) {
    			System.out.print(cq + "\t");
    		}
    		System.out.println();
    
    		// invoco il metodo per il confronto
    		for (int i = 0, s = 0, col = 0; i < archivio.length; i++, col++) {
    			if (i % 5 == 0) {
    				s++;
    				sp++;
    				// sp è sempre uguale a s quindi è inutile
    			}
    			// per tenere il conto delle colonne
    			if (col > 4) {
    				col = 0;
    			}
    			// al metodo passo numero, riga, colonna dell'array archivio
    			confrontaValori(archivio[i], s, col);
    		}
    
    		if (bd.length() > 0) {
    			System.out.println("\nHo trovato questi numeri:\n" + bd + "\n");
    		}
    	}
    
    	private static void confrontaValori(int aN, int segnaposto, int col) {
    		for (int i = 0; i < cinquina.length; i++) {
    			// vorrei essere in grado di verificare
    			// se 2 o più numeri si trovano nella stessa riga
    			if (cinquina[i].equals(aN) /* && sp == segnaposto [INVECE NON PUO ESSERE CONSIDERATA PERCHÈ SEMPRE TRUE] */) {
    				System.out.println("\nn°:" + cinquina[i] + " ?\triga:" + sp + "\tcol:" + col);
    				bd.append(cinquina[i]).append(" ");
    			}
    		}
    	}
    }
    
    • Questo è un possibile output:

      Archivio
      47 58 8 1 47
      50 51 71 28 81
      43 31 78 10 77
      88 82 45 63 16
      82 81 28 24 57
      69 4 31 89 45
      1 88 30 37 42
      68 5 82 36 44

      Cinquina
      1 38 88 27 55

      Risultato
      n°:1 ? riga:1 col:3
      n°:88 ? riga:4 col:0
      n°:1 ? riga:7 col:0
      n°:88 ? riga:7 col:1

      Ho trovato questi numeri: 1 88 1 88
    Hai notato la presenza di un ambo (1-88) riga 7? [Per chiarezza la riga è inizializzata a 1 invece che 0]
    Ecco, io vorrei salvare direttamente quell'ambo o terno, eccetera, la cosa importante è che sia >= 2.
  • Re: Confrontare liste di dimensioni diverse che contengono interi

  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Grazie, adesso ho scoperto che esiste copyOfRange, ma in verità non mi serve a molto, con il codice che ho scritto passavo già le cinquine, magari con un sistema meno elegante, ma la sostanza è la stessa.

    Tu suggerisci di creare un metodo apposito, passando i due array, confrontali con un for-each...

    Probabilmente sono rimbambito da piccolo sarò scivolato dal seggiolone troppe volte, ma il mio problema persiste.

    Non riesco a salvare in maniera separata i vari ambi/terni, così da poterli successivamente visualizzare.

    Anche se facessi quello che mi dici, non cambia nulla, ovviamente trovo i numeri, (da mo', che ho trovato il metodo), ma la separazione dei beni non avviene, insomma queste acque non si separano.

    Attenzione, non sto dicendo che i tuoi consigli siano sbagliati, ci mancherebbe altro, però non riesco a metterli in pratica, e la cosa è molto fastidiosa.

    Io volere vedere:
    riga 12) 2 - 45
    riga 33) 3 - 40 - 88
    ...
    riga 155) 2 - 6
  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Ho risolto, grazie Andrea!
  • Re: Confrontare liste di dimensioni diverse che contengono interi

    Comunque alla fine ho deciso di utilizzare ArrayList, poiché non avevo considerato il problema dell’inizializzazione. La dimensione dell’archivio è variabile, quindi dovrei prima contare le righe e moltiplicarle per 5, si fa prima con l’arraylist, in ogni caso la differenza di prestazioni è impercettibile, facendo una media è un po’ più rapido l’array, ma si tratta comunque di millesimi di secondo.
Devi accedere o registrarti per scrivere nel forum
19 risposte