Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Java] Ordinare vettore in base a città e ottenere numero abitanti

    Salve, non riesco a capire una cosa di questo problema: dopo aver caricato due vettori paralleli contenenti il cognome e il comune di residenza di un alunno, ordinare i due vettori in base alle città e infine visualizzare il numero di residenti per ogni città. Non riesco a capire come contare il numero di residenti per ogni città, il resto del problema l'ho già risolto. Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Una possibile soluzione consiste nell'ordinare in ordine alfabetico il vettore dei comuni, quindi scorrerlo e contare quante occorrenze vi sono di ciascun comune (l'ordinamento preventivo ti consente di fare il conteggio con una sola passata del vettore).

    Algoritmicamente parlando:
    Dopo aver ordinato l'array, inizio a scorrerlo dalla prima posizione e inizializzo un contatore a 1.
    Memorizzo il valore del primo elemento in una variabile (diciamo "comune").
    Scorro il vettore e finchè l'i-esimo elemento è uguale al valore della variabile "comune" incremento il contatore.
    Appena trovo un elemento diverso, stampo (o memorizzo in una seconda struttura dati) il valore del contatore (che a questo punto mi dirà quanti residenti vi sono in quel comune), memorizzo il nuovo valore trovato nella variabile "comune", resetto il contatore a 1 e riparto.


    Ciao.
    "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

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Una possibile soluzione consiste nell'ordinare in ordine alfabetico il vettore dei comuni, quindi scorrerlo e contare quante occorrenze vi sono di ciascun comune (l'ordinamento preventivo ti consente di fare il conteggio con una sola passata del vettore).

    Algoritmicamente parlando:
    Dopo aver ordinato l'array, inizio a scorrerlo dalla prima posizione e inizializzo un contatore a 1.
    Memorizzo il valore del primo elemento in una variabile (diciamo "comune").
    Scorro il vettore e finchè l'i-esimo elemento è uguale al valore della variabile "comune" incremento il contatore.
    Appena trovo un elemento diverso, stampo (o memorizzo in una seconda struttura dati) il valore del contatore (che a questo punto mi dirà quanti residenti vi sono in quel comune), memorizzo il nuovo valore trovato nella variabile "comune", resetto il contatore a 1 e riparto.


    Ciao.
    Grazie mille!!!

  4. #4
    Se faccio così è giusto?
    codice:
    String comune="";
             
    for(int i=0;i<5;i++)
             {
                 
    int cont=0;
                 
    comune=v1[i];
                 
    for(int j=0;j<5;j++)
                 {
                     
    if(comune.equals(v1[j]))
                     {
                         
    cont++;
                     }
                 }
                 System.out.println(comune+"-> "+cont);
                           
             }
    Ultima modifica di LeleFT; 16-09-2015 a 17:30 Motivo: Sistemata formattazione codice

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    No, quel codice non va bene perchè stampi il numero di residenti per ciascun comune, tante volte quante compare quel comune nel vettore...

    Devi usare un for solo...


    Ciao.
    "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

  6. #6
    Cavolo, non so perché ma sto per impazzire... per favore aiutatemi

  7. #7
    Se faccio così è giusto?
    codice:
    String comune="";
      int cont=0;
      for(int i=0;i<5;i++)
      {
           comune=v1[i];
        if(comune.equals(v1[i]))
        {
         cont++;
        }
        else
        {
         cont=0;
        }
      }
         System.out.println(comune+"-> "+cont);

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    No.
    Ad ogni ciclo, come prima cosa, setti "comune" con il valore dell'elemento corrente, quindi la if successiva sarà per forza di cose verificata.

    Devi settare la variabile "comune" all'inizio, fuori dal ciclo for e successivamente (all'interno del ciclo) solo quando l'elemento corrente non è più uguale.


    Ciao.
    "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

  9. #9
    Quindi così è giusto?
    codice:
    int j=0;
      String comune=v1[j];
      int cont=0;
      for(int i=0;i<5;i++)
      {
        if(comune.equals(v1[i]))
        {
         cont++;
        }
        else
        {
         System.out.println(comune+"-> "+cont);
         cont=0;
         comune=v1[i];
        }
      }

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quasi... quando resetti il contatore (dentro al for) dovresti impostarlo a 1 (visto che l'elemento corrente rappresenta 1 abitante e non ci passerai più sopra).
    Poi dovresti effettuare un'ulteriore stampa DOPO il ciclo for per poter visualizzare anche i dati dell'ultimo comune considerato.


    Per il resto mi pare corretto.

    Ciao.
    "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

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.