Visualizzazione dei risultati da 1 a 4 su 4

Discussione: esercizioMatrice

  1. #1

    esercizioMatrice

    ciao a tutti,potreste darmi una mano?? sono alle prese con questo esercizio:
    scrivere un metodo duplicati che riceve una matrice di interi M e restituisce true se M presenta almeno una riga i cui elementi compaiono esattamente 2 volte,false altrimenti.
    il codice che ho fatto io è il seguente
    public static boolean Duplicati (int [][]M){ boolean riga_trovata=false;
    for(int i=0;i<M.length;i++){
    boolean trovato=true;
    for(int j=0;j<M[0].length;j++){
    if(ElementiUguali(M[i][j],i,M)!=2&&!riga_trovata){
    trovato=false;
    break;
    }
    if(trovato){
    riga_trovata=true;

    }

    }
    }
    return riga_trovata;
    }
    public static int ElementiUguali(int x,int indice,int [][]M){
    int conta=0;
    for(int j=0;j<M[0].length;j++){
    if(M[indice][j]==x){
    if(j!=indice){
    conta++;
    }}}
    return conta;
    }


    public static void main(String []args){
    int [][]M={{13,7,-3,22,8,2},{3,17,17,21,3,21},{3,17,3,51,4,1},{8,21,-3,22,16,22},{2,0,0,6,2,6},{2,0,9,6,8,8}};

    boolean c=Duplicati(M);
    System.out.print(c);
    }
    }

    La matrice inserita è un esempio del testo. il metodo restituisce true in quanto ci sono 2 righe che presentano elementi duplicati. facendo una prova e cioè eliminando entrambe le righe,il risultato viene ugualmente true e dovrebbe venire false xke non c'è nessuna riga che contiene duplicati. il risultato dovrebbe venire false anche se nella riga x esempio c'è anche un solo elemento che non ha il duplicato . cosa sbaglio???

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Innanzitutto ti chiedo a cosa serve dentro al metodo ElementiUguali() il controllo:

    if(j!=indice)...

    indice è la riga della matrice, e in questo caso j è il contatore della colonna, quindi come risultato ottieni che conta non si incrementa quando l'elemento cercato si trova sulla diagonale della matrice, era quello che volevi?

    Comunque l'errore principale è nel metodo Duplicati (a proposito ti consiglio di seguire la notazione convenzionale di java: i nomi dei metodi e delle variabili dovrebbero iniziare con la minuscola, in un recente post [
    http://forum.html.it/forum/showthrea...readid=2932288] il nostro moderatore LeleFT ha fatto un riassunto utile nel messaggio 8, dacci un'occhiata):

    se il primo elemento della riga appare esattamente due volte, trovato è uguale a true, quindi entri nell'if e setti anche riga_trovata a true (e quando riga_trovata è true giustamente non controlli più le righe successive, ma invece di porlo come condizione nell'if sarebbe molto più sensato ritornare true nel metodo appena trovi una riga con tutti duplicati).

    Quindi riga_trovata deve diventare true solo se tutti gli elementi della riga sono stati trovati esattamente due volte, e questo lo ottieni semplicemente posizionando il blocco if(trovato).... fuori dal ciclo interno, cioè nel ciclo esterno, quello che riguarda le righe.







    Ultima modifica di Ansharja; 15-11-2015 a 10:26

  3. #3
    public static boolean Duplicati (int [][]M){
    boolean riga_trovata=false;
    for(int i=0;i<M.length;i++){
    boolean trovato=true;
    for(int j=0;j<M[0].length;j++){
    if(!ElementiUguali(M[i][j],M[i])&& trovato){
    trovato=false;

    }}
    if(trovato){
    riga_trovata=true;



    }
    }
    return riga_trovata;
    }
    public static boolean ElementiUguali(int x,int A[]){
    int conta=0;
    for(int i=0;i<A.length;i++){
    if(A[i]==x){

    conta++;
    }}
    if(conta==2){
    return true;
    }
    return false;


    }


    ho fatto cosi ed esce :-)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Sì così dovrebbe andare.
    Comunque oltre ai consigli già dati, ricordati le prossime volte di inserire il tuo codice tra i tag [CODE] e [ /CODE] , altrimenti chi legge deve sempre copiare il codice e sistemarselo.

Tag per questa discussione

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.