Controllare se tutti gli elementi soddisfano condizione

di il
8 risposte

Controllare se tutti gli elementi soddisfano condizione

Salve a tutti,
ho un HashSet che contiene degli oggetti di tipo Stato; dovrei ad un certo punto verificare se tutti gli elementi appartenenti al set soddisfano una condizione, cioè se hanno una variabile booleana settata a true, in tal caso dovrei eseguire un certo metodo, in caso contrario non devo fare nulla.
Il codice che ho scritto è il seguente:
 for (State stateTransitionResult : resultAllTransitionAutomata) {
                if (stateTransitionResult.isMerge()) {
                    merge = true;
                } else {
                    return false;
                }
            }
ma il tutto non funziona correttamente, in quanto, se l'ultimo elemento non rispetta la condizione, allora funziona, ma se a non rispettare la condizione non è l'ultimo elemento ma il primo del Set, allora la variabile merge verrebbe erroneamente impostata a true.
Come posso implementare in modo corretto il tutto?
Grazie a tutti per la disponibilità

8 Risposte

  • Re: Controllare se tutti gli elementi soddisfano condizione

    giorgetta ha scritto:


    Come posso implementare in modo corretto il tutto?
    È una questione di "logica" (=ragionamento). Appena trovi che un elemento non soddisfa la condizione, allora sai già che il risultato è falso (e tra l'altro non serve continuare la iterazione).
    Solo DOPO la fine del for, allora sai che tutti gli elementi soddisfano la condizione.
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Grazie andbin,
    il tuo è un giusto ragionamento, quindi dovrei settare la mia variabile booleana fuori dal for? e come capisco che sono uscita senza aver concluso l'iterazione?
    Grazie
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Quello che intendeva è che non serve inserirla dentro per esempio , voglio creare un una funzione che mi dica se tutti gli elementi in un array sono pari:

    sto scrivendo in velocità quindi lascia perdere errori banali ma concentrati sul concetto

    public boolean isPari(lista List<int>){
    boolean tuttiPari = true;

    for(int numero : lista) {
    if ((numero%2)!=0){ --> calcola il resto dell'operazione se mi da resto 0 allora è un numero pari.
    tutiPari = false;
    }
    }
    return tuttiPari;
    }


    Questa è un modo di vedere una soluzione. Dal mio punto di vista è la più semplice.
    Ce ne sono altre che ti ottimizzano il codice e i cicli ?
    Si .
    Per esempio puoi mettere una condizione di uscita sul for, non te lo scrivo perché su ste cose bisogna anche un po smanettare

    Spero di esserti stato d'aiuto.
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Grazie jinkuriken94,
    ho appena implementato la tua soluzione, grazie, ma giusto per curiosità, come posso migliorare il codice?
    Grazie ancora
  • Re: Controllare se tutti gli elementi soddisfano condizione

    public static boolean tuttiHannoUnaCondizione(Set<Xyz> set) {
        for (Xyz xyz : set) {
            if (non_soddisfa_condizione) {
                return false;
            }
        }
    
        return true;
    }

    Se ha senso metterlo come metodo di istanza che accede ad una variabile di istanza, chiaramente il parametro non serve.
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Grazie andbin per la soluzione
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Un esempio stupido che mi viene in mente è quando devi cercare un numero in un array diciamo per esempio di 1000 numeri
    è uno spreco di tempo , anche se a noi non cambia niente, fare 999 cicli se il numero che stai cercando lo trovi alla prima posizione.
    quindi un modo molto utile in questi casi è usare un flag d'uscita. In breve quando questo 'flag' cambia valore esce dal ciclo.

    esempio pratico

    boolean trovato = false;
    int i;
    for (i = 0; i < 1000 && !trovato; i++){ -----> !trovato significa che cicla finché trovato rimane a false;
    if (lista == numeroDaCercare) {
    trovato= true;
    }
    }

    int posizione = i;


    fine ho trovato la posizione del numero che stavo cercando , e sono uscito quando l'ho trovato .
    Spero ti sia stato d'aiuto
  • Re: Controllare se tutti gli elementi soddisfano condizione

    Si, grazie mille jinkuriken94
Devi accedere o registrarti per scrivere nel forum
8 risposte