Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8

    confronto delle righe in una matrice

    salve , mi sono appena iscritto, quindi saluti tutti.
    mi chiamo Guglielmo, e volevo chiedere se qualcuno poteva aiutarmi a trovare la soluzione a questo problema:

    ho un metodo che riceve una matrice di int come parametro, controlla se sono presenti almeno due righe identiche.
    Il metodo deve terminare preferibilmente appena in grado di fornire il
    risultato con certezza e restituire un boolean.

    credo che la soluzione sia con 3 cicli annidati, ma non riesco a focalizzare bene il concetto del terzo ciclo.


    for(int i=0; i<matrice.length; i++){
    for(int j=0; j<matrice[i].length; j++){
    for(int k=0; k<matrice[i].length; k++){
    }
    }
    }

    cosa dovrei mettere nel terzo ciclo?
    scusate ma sono alle prime armi con la programmazione.

  2. #2
    La prima cosa che mi viene in mente è:
    1) scorri la matrice e salvi ogni riga sotto forma di stringa in una lista
    2) verifichi se la lista contiene stringhe ripetute

    Consiglio: per la costruzione di ogni stringa usa un oggetto della classe StringBuffer in modo tale da non sprecare memoria.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    La prima cosa che mi viene in mente è: 1) scorri la matrice e salvi ogni riga sotto forma di stringa in una lista 2) verifichi se la lista contiene stringhe ripetute Consiglio: per la costruzione di ogni stringa usa un oggetto della classe StringBuffer in modo tale da non sprecare memoria.
    ti ringrazio per la celerità della risposta, però vorrei risolvere il problema senza utilizzare oggetti di altre classi e/o utilizzare un'array di appoggio per salvare le righe.

  4. #4
    Originariamente inviato da gujelmo
    ti ringrazio per la celerità della risposta, però vorrei risolvere il problema senza utilizzare oggetti di altre classi e/o utilizzare un'array di appoggio per salvare le righe.
    Ottimo. Confermo che ti bastano 3 cicli per fare il tutto.

    Il primo ti serve per prendere l'i-esima riga della matrice,
    il secondo per prendere la j-esima riga, dove j = i + 1
    il terzo per confrontare la riga i con la riga j.

    Consiglio: nel terzo ciclo usa un flag di controllo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    il secondo per prendere la j-esima riga, dove j = i + 1
    con i+1 non mi dovrebbe andare in eccezione di outOfBound?

  6. #6
    Originariamente inviato da gujelmo
    con i+1 non mi dovrebbe andare in eccezione di outOfBound?
    Ipotizza che N è la dimensione della matrice (numero righe) e utilizza la classica indicizzazione matematica (no informatica):
    i arriverà fino ad N - 1, mentre j arriverà fino ad N.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    hai un pò di codice da potermi far vedere? che io non riesco proprio a visualizzare il terzo ciclo..

    grazie

  8. #8
    Te lo scrivo in pseudo-codice, così traducendo il codice te lo studi con attenzione e capisci l'esericizio:
    ipotizzo che M sia la matrice/array bidimensionale preso in input e che la variabile rows indichi il numero di righe all'interno di essa:
    codice:
    current[] = null;
    temp[] = null;
    i = 0;
    
    for each (i < rows - 1)
    begin
        current = M[i];
        j = i + 1;
        for each  (j < rows)
            begin
               temp = M[j]
               equals = true;
               k = 0;
               for each k < current.length
                  begin
                       if( current[k] != temp[k] )
                          begin
                             equals = false;
                             break;
                          end
                       k = k + 1;
                  end
                if( equals ) return true;
                j = j + 1;
            end
        i = i + 1;
    end
    
    return false;
    In java le matrici in sostanza possono essere rappresentate come array di array, quindi la logica dell'algoritmo non cambia.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    sto provando con questo

    codice:
    public static boolean contieneRigheIdentiche(int[][]matrice){ 
      boolean flag=false; 
      int c=0; 
      for(int i=0; i<matrice.length; i++){ 
         for(int j=1+i; j<matrice.length; j++){ 
             for(int k=0; k<matrice[i].length; k++){ 
                  if(matrice[i][k]==matrice[j][k]) 
                      c++; 
                  if (c==matrice[i].length){
                  flag=true; 
                   c=0; 
                   return flag;
                  }
              }
         }
     } 
    return false; 
    }

    al primo if in pratica ho usato c per contare quante volte i confronti tra le righe sono positivi ( quindi valori uguali)
    al secondo if confronto se c è uguale al numero delle colonne, se è uguale vuol dire che sono tutti confronti andati a buon fine.
    però ho dei problemi sull'azzeramento di c... dov'è che dovrei farla ripartire da zero?


    mi potresti dire un modo migliore per confrontare?
    grazie ancora

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    sembra che ci sia riuscito,ho posto c=0 nel secondo ciclo e sembra che funzioni

    sono contento,
    comunque mi potresti consigliare un altro metodo per effettuare un confronto di questo genere?

    ti ringrazio infinitamente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.