Autore Topic: Ciclo For-Each Arraylist  (Letto 678 volte)

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Ciclo For-Each Arraylist
« il: 22 Settembre 2017, 14:10:19 CEST »
0
Ciao,
ho inserito nella mia applicazione un ciclo for-each che somma tutti valori contenuti in un Arraylist, la mia domanda è:

E' possibile attraverso questo ciclo fare iniziare la somma dal secondo valore e non dal primo?

Codice (Java): [Seleziona]
public double sumMassaVuoto() {
        double sumMassaVuoto = 0;
        for (Double massaVuoto : getMassaVuoto()) {
            sumMassaVuoto += massaVuoto;
        }
        return sumMassaVuoto;
    }

Come alternativa avrei fatto così:

Codice (Java): [Seleziona]
public double sumMassaVuoto() {
        double sumMassaVuoto = 0;
        for (int i = 1; i<getMassaVuoto().size(); i++) {
            sumMassaVuoto += getMassaVuoto().get(i);
        }
        return sumMassaVuoto;
    }

ma se possibile userei il for-each o se avete altri consigli.
Grazie.

Offline berpao

  • Utente junior
  • **
  • Post: 116
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Ciclo For-Each Arraylist
« Risposta #1 il: 22 Settembre 2017, 17:59:16 CEST »
0
Ciao, beh per il discorso di usare il for-each potresti usare una variabile booleana come semaforo del tipo

Codice (Java): [Seleziona]
public double sumMassaVuoto() {
        double sumMassaVuoto = 0;
        boolean isFirst=true;
        for (Double massaVuoto : getMassaVuoto()) {
            if (isFirst) {
               isFirst=false;
               continue;
            }

            sumMassaVuoto += massaVuoto;
        }
        return sumMassaVuoto;
    }

 non l'ho testato ma credo che così possa funzionare.

Un suggerimento che posso darti invece è che non è molto ottimizzato il fatto di chiamare ad ogni ciclo la funzione getMassaVuoto() (sia per il ciclo for-each che il ciclo for). Io chiamerei fuori dal ciclo la funzione salvando il risultato in una variabile e poi userei quella variabile nel ciclo, una cosa del tipo:

Codice (Java): [Seleziona]
ArrayList listValues=getMassaVuoto();
for (Double massaVuoto : listValues) {
....
}

In questo modo la funzione la chiami solo una volta...
Ciao
P

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Ciclo For-Each Arraylist
« Risposta #2 il: 22 Settembre 2017, 18:12:33 CEST »
0
Puoi anche utilizzare un Iterator restituito da listIterator(int index).

Ma non c'è motivo per non usare ciclo for normale, che tra l'altro è anche più veloce.
L'ArrayList dietro le quinte non è altro che un normale array (dinamico), quindi nessun problema ad utilizzare il ciclo for normale che utilizzeresti per un normale array.
« Ultima modifica: 22 Settembre 2017, 18:14:48 CEST da iClaude »

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:Ciclo For-Each Arraylist
« Risposta #3 il: 22 Settembre 2017, 21:32:36 CEST »
0
Ciao, beh per il discorso di usare il for-each potresti usare una variabile booleana come semaforo del tipo

Codice (Java): [Seleziona]
Un suggerimento che posso darti invece è che non è molto ottimizzato il fatto di chiamare ad ogni ciclo la funzione getMassaVuoto() (sia per il ciclo for-each che il ciclo for). Io chiamerei fuori dal ciclo la funzione salvando il risultato in una variabile e poi userei quella variabile nel ciclo, una cosa del tipo:

[code=java]
ArrayList listValues=getMassaVuoto();
for (Double massaVuoto : listValues) {
....
}

In questo modo la funzione la chiami solo una volta...
Ciao
P

Puoi anche utilizzare un Iterator restituito da listIterator(int index).

Ma non c'è motivo per non usare ciclo for normale, che tra l'altro è anche più veloce.
L'ArrayList dietro le quinte non è altro che un normale array (dinamico), quindi nessun problema ad utilizzare il ciclo for normale che utilizzeresti per un normale array.

Ottimo! grazie mille per i suggerimenti  ;-)

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:Ciclo For-Each Arraylist
« Risposta #4 il: 25 Settembre 2017, 18:49:34 CEST »
0

Un suggerimento che posso darti invece è che non è molto ottimizzato il fatto di chiamare ad ogni ciclo la funzione getMassaVuoto() (sia per il ciclo for-each che il ciclo for). Io chiamerei fuori dal ciclo la funzione salvando il risultato in una variabile e poi userei quella variabile nel ciclo, una cosa del tipo:

Codice (Java): [Seleziona]
ArrayList listValues=getMassaVuoto();
for (Double massaVuoto : listValues) {
....
}

In questo modo la funzione la chiami solo una volta...
Ciao
P

Ho seguito il tuo suggerimento ma da tipi incompatibili, mi spiego, nel ciclo for da errore tra la variabile Double massaVuoto e l'Arraylist listValues.

Offline berpao

  • Utente junior
  • **
  • Post: 116
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Ciclo For-Each Arraylist
« Risposta #5 il: 26 Settembre 2017, 08:12:42 CEST »
0
Ciao, non credo di aver capito, sostituire la chiamata alla funzione con la variabile non dovrebbe aver causato il problema, a meno che non ci sia qualche altro tipo di errore. Provi a postare il codice che ti da l'errore così diamo un occhio?
P

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:Ciclo For-Each Arraylist
« Risposta #6 il: 27 Settembre 2017, 18:24:42 CEST »
0
Ciao, non credo di aver capito, sostituire la chiamata alla funzione con la variabile non dovrebbe aver causato il problema, a meno che non ci sia qualche altro tipo di errore. Provi a postare il codice che ti da l'errore così diamo un occhio?
P

Ciao, intendevo dire che mi restituisce questo (immagine).

Offline tonno16

  • Utente storico
  • *****
  • Post: 1233
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Ciclo For-Each Arraylist
« Risposta #7 il: 27 Settembre 2017, 20:58:55 CEST »
0
Ma che tipo torna getMassaVuoto() ?

Offline DCodeOS

  • Utente junior
  • **
  • Post: 84
  • Respect: +20
    • Mostra profilo
  • Sistema operativo:
    macOS Sierra
Re:Ciclo For-Each Arraylist
« Risposta #8 il: 27 Settembre 2017, 22:56:07 CEST »
0
Prova a specificare il tipo di ArrayList
Codice (Java): [Seleziona]
ArrayList<Double> listValues = getMassaVuoto();
┻━┻ ︵ヽ(°□°ヽ) Develop w/ ( ( ObjC || Swift ) && Java[ "Android" ] ) (╯°□°)╯︵ ┻━┻

Offline berpao

  • Utente junior
  • **
  • Post: 116
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Ciclo For-Each Arraylist
« Risposta #9 il: 28 Settembre 2017, 07:54:45 CEST »
0
Prova a specificare il tipo di ArrayList
Codice (Java): [Seleziona]
ArrayList<Double> listValues = getMassaVuoto();
Quoto (scusate, ho scritto il codice al volo e non me ne sono accorto)  O:-)
P

Offline SF

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2Laser
  • Sistema operativo:
    Windows 7
Re:Ciclo For-Each Arraylist
« Risposta #10 il: 02 Ottobre 2017, 18:23:16 CEST »
0
Prova a specificare il tipo di ArrayList
Codice (Java): [Seleziona]
ArrayList<Double> listValues = getMassaVuoto();

Quoto (scusate, ho scritto il codice al volo e non me ne sono accorto)  O:-)
P

Grazie mille gentilissimi, funziona!  ;-)