Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Crea un ArrayList di stringhe e trova la stringa più lunga (cioè con il maggior numero di caratteri) nell'elenco.

    Buongiorno,

    sto cercando di cerca la stringa più lunga memorizzata in un arrayList.

    Il codice che ho scritto è il sequente:

    codice:
    import java.util.ArrayList;
    public class Esercizio {
        public static void main(String[] args) {
            ArrayList<String> arr = new ArrayList<String>();
            int max=0,temp=0;
            
            arr.add("Ciao");
            arr.add("Ciao mondo");
            
            int[] a = new int[arr.size()];
            max=a[0];
            for(int i=1;i<a.length-1;i++) {
                
                 if(a[i]>max) {
                     temp=max;
                     max=a[i];
                 }
                 System.out.println(max);
            }
            
            System.out.println("La stringa più grande è "+arr.get(max));
            
        }
    }
    
    
    
    Se si manda in Run il programma viene stampato "Ciao", invece dovrebbe essere stampato "Ciao Mondo".
    Perchè?
    saluti
    tulipan

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da tulipan Visualizza il messaggio
    Buongiorno,

    sto cercando di cerca la stringa più lunga memorizzata in un arrayList.

    Il codice che ho scritto è il sequente:

    import java.util.ArrayList;
    public class Esercizio {
    public static void main(String[] args) {
    ArrayList<String> arr = new ArrayList<String>();
    int max = 0
    int temp = 0;
    String piuLungo = null;


    arr.add("Ciao");
    arr.add("Ciao mondo");


    for(String curr : arr) {
    temp = curr.length();
    if(temp > max) {
    piuLungo = curr;
    max = temp;
    }
    System.out.println(piuLungo);
    }

    System.out.println("La stringa più grande è "+piuLungo);


    }
    }


    [/CODE]

    Se si manda in Run il programma viene stampato "Ciao", invece dovrebbe essere stampato "Ciao Mondo".
    Perchè?
    saluti
    tulipan
    Direi che hai fatto un po' di confusione.

    Riscriverei il codice in questo modo

    codice:
    import java.util.ArrayList;
    public class Esercizio {
    public static void main(String[] args) {
            ArrayList<String> arr = new ArrayList<String>();
    int max = 0
            int temp = 0;
            String piuLungo = null;
    
    arr.add("Ciao");
    arr.add("Ciao mondo");
    
    for(String curr : arr) {
                temp = curr.length();
    if(temp > max) {
                               piuLungo = curr;
                     max = temp;
                 }
                 System.out.println(piuLungo);
            }
    
            System.out.println("La stringa più grande è "+piuLungo);
    
        }
    }
    Ultima modifica di Joe Taras; 22-09-2023 a 11:27

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Comunque, perchè il codice di tulipan non funziona?
    Risposta breve: perchè quel codice fa di tutto, tranne che cercare (e nemmeno ottenere) la stringa più lunga.

    Risposta dettagliata:
    Crei un ArrayList e lo popoli con due stringhe. OK
    Poi crei un array "a" di due elementi ( arr.size() ). OK
    Poi valorizzi la variabile max con il primo elemento dell'array (array che nessuno ha valorizzato, quindi tutti gli elementi sono a 0). MAH
    Poi fai un ciclo for sull'array "a" (che, ripeto, contiene tutti i valori a 0), partendo però dal secondo elemento (perchè??). MAH + MAH
    Nel ciclo for confronti a[i] (che è sempre 0) con il valore di "max", che è 0. Quindi non troverai mai un valore che vada a sostituire l'attuale valore di "max".
    Supponendo per assurdo che nell'array "a" ci siano le lunghezze delle stringhe (e abbiamo visto che non è così, perchè da nessuna parte sei andato a calcolarle), alla fine del ciclo for nella variabile "max" avresti la lunghezza della stringa più lunga (sopponiamo 6, ovvero la lunghezza di "Ciao mondo").
    Che fai ora? Vai a prelevare dall'ArrayList la stringa in posizione "max" ( arr.get(max) ), ovvero 6... in un ArrayList di 2 stringhe. NO!

    Se anche avessi calcolato le lunghezze delle stringhe (cosa che non hai fatto) e le avessi memorizzate nell'array "a" (cosa che non hai fatto), qui avresti avuto una bella ArrayIndexOutOfBoundsException perchè non puoi ottenere l'elemento in posizione 6 di una lista che ne ha solo 2.

    Fine spiegazione lunga.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Comunque, perchè il codice di tulipan non funziona?
    Risposta breve: perchè quel codice fa di tutto, tranne che cercare (e nemmeno ottenere) la stringa più lunga.

    Risposta dettagliata:
    Crei un ArrayList e lo popoli con due stringhe. OK
    Poi crei un array "a" di due elementi ( arr.size() ). OK
    Poi valorizzi la variabile max con il primo elemento dell'array (array che nessuno ha valorizzato, quindi tutti gli elementi sono a 0). MAH
    Poi fai un ciclo for sull'array "a" (che, ripeto, contiene tutti i valori a 0), partendo però dal secondo elemento (perchè??). MAH + MAH
    Nel ciclo for confronti a[i] (che è sempre 0) con il valore di "max", che è 0. Quindi non troverai mai un valore che vada a sostituire l'attuale valore di "max".
    Supponendo per assurdo che nell'array "a" ci siano le lunghezze delle stringhe (e abbiamo visto che non è così, perchè da nessuna parte sei andato a calcolarle), alla fine del ciclo for nella variabile "max" avresti la lunghezza della stringa più lunga (sopponiamo 6, ovvero la lunghezza di "Ciao mondo").
    Che fai ora? Vai a prelevare dall'ArrayList la stringa in posizione "max" ( arr.get(max) ), ovvero 6... in un ArrayList di 2 stringhe. NO!

    Se anche avessi calcolato le lunghezze delle stringhe (cosa che non hai fatto) e le avessi memorizzate nell'array "a" (cosa che non hai fatto), qui avresti avuto una bella ArrayIndexOutOfBoundsException perchè non puoi ottenere l'elemento in posizione 6 di una lista che ne ha solo 2.

    Fine spiegazione lunga.
    Grazie per aver dettagliato il mio "hai fatto un po' di confusione"

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.