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

    Problema con gli ordinamenti

    import java.util.Arrays;

    // Ho la seguente lista disordinata:
    String[] mie_stringhe = new String[36];

    mie_stringhe[0]="casa5";
    mie_stringhe[1]="casa4";
    mie_stringhe[2]="casa3";
    mie_stringhe[3]="casa18";
    mie_stringhe[4]="casa6";
    mie_stringhe[5]="casa7";
    mie_stringhe[6]="casa2";
    mie_stringhe[7]="pippo6";
    mie_stringhe[8]="pippo7";
    mie_stringhe[9]="casa1";
    mie_stringhe[10]="pippo5";
    mie_stringhe[11]="casa8";
    mie_stringhe[12]="casa9";
    mie_stringhe[13]="casa10";
    mie_stringhe[14]="casa11";
    mie_stringhe[15]="casa12";
    mie_stringhe[16]="casa14";
    mie_stringhe[17]="pippo1";
    mie_stringhe[18]="pippo4";
    mie_stringhe[19]="pippo8";
    mie_stringhe[20]="pippo9";
    mie_stringhe[21]="pippo2";
    mie_stringhe[22]="pippo3";
    mie_stringhe[23]="pippo10";
    mie_stringhe[24]="pippo15";
    mie_stringhe[25]="casa15";
    mie_stringhe[26]="casa13";
    mie_stringhe[27]="casa16";
    mie_stringhe[28]="pippo18";
    mie_stringhe[29]="casa17";
    mie_stringhe[30]="pippo16";
    mie_stringhe[31]="pippo17";
    mie_stringhe[32]="pippo11";
    mie_stringhe[33]="pippo13";
    mie_stringhe[34]="pippo14";
    mie_stringhe[35]="pippo12";

    Arrays.sort(mie_stringhe);

    // Vorrei che fossero messe in ordine in questo modo...
    // mie_stringhe[0]="casa1";
    // mie_stringhe[1]="casa2";
    // mie_stringhe[2]="casa3";
    // mie_stringhe[3]="casa4";
    // mie_stringhe[4]="casa5";
    // mie_stringhe[5]="casa6";
    // mie_stringhe[6]="casa7";
    // mie_stringhe[7]="casa8";
    // mie_stringhe[8]="casa9";
    // mie_stringhe[9]="casa10";
    // mie_stringhe[10]="casa11";
    // mie_stringhe[11]="casa12";
    // mie_stringhe[12]="casa13";
    // mie_stringhe[13]="casa14";
    // mie_stringhe[14]="casa15";
    // mie_stringhe[15]="casa16";
    // mie_stringhe[16]="casa17";
    // mie_stringhe[17]="casa18";
    // mie_stringhe[18]="pippo1";
    // mie_stringhe[19]="pippo2";
    // mie_stringhe[20]="pippo3";
    // mie_stringhe[21]="pippo4";
    // mie_stringhe[22]="pippo5";
    // mie_stringhe[23]="pippo6";
    // mie_stringhe[24]="pippo7";
    // mie_stringhe[25]="pippo8";
    // mie_stringhe[26]="pippo9";
    // mie_stringhe[27]="pippo10";
    // mie_stringhe[28]="pippo11";
    // mie_stringhe[29]="pippo12";
    // mie_stringhe[30]="pippo13";
    // mie_stringhe[31]="pippo14";
    // mie_stringhe[32]="pippo15";
    // mie_stringhe[33]="pippo16";
    // mie_stringhe[34]="pippo17";
    // mie_stringhe[35]="pippo18";


    Invece mette in ordine in questo modo....
    // mie_stringhe[0]="casa1";
    // mie_stringhe[1]="casa10";
    // mie_stringhe[2]="casa11";
    // mie_stringhe[3]="casa12";
    // mie_stringhe[4]="casa13";
    // mie_stringhe[5]="casa14";
    // mie_stringhe[6]="casa15";
    // mie_stringhe[7]="casa16";
    // mie_stringhe[8]="casa17";
    // mie_stringhe[9]="casa18";
    // mie_stringhe[10]="casa2";
    // mie_stringhe[11]="casa3";
    // mie_stringhe[12]="casa4";
    // mie_stringhe[13]="casa5";
    // mie_stringhe[14]="casa6";
    // mie_stringhe[15]="casa7";
    // mie_stringhe[16]="casa8";
    // mie_stringhe[17]="casa9";
    // mie_stringhe[18]="pippo1";
    // mie_stringhe[19]="pippo10";
    // mie_stringhe[20]="pippo11";
    // mie_stringhe[21]="pippo12";
    // mie_stringhe[22]="pippo13";
    // mie_stringhe[23]="pippo14";
    // mie_stringhe[24]="pippo15";
    // mie_stringhe[25]="pippo16";
    // mie_stringhe[26]="pippo17";
    // mie_stringhe[27]="pippo18";
    // mie_stringhe[28]="pippo2";
    // mie_stringhe[29]="pippo3";
    // mie_stringhe[30]="pippo4";
    // mie_stringhe[31]="pippo5";
    // mie_stringhe[32]="pippo6";
    // mie_stringhe[33]="pippo7";
    // mie_stringhe[34]="pippo8";
    // mie_stringhe[35]="pippo9";

    //Ma il 10 è maggiore di 2 ! o no?

    C'è un metodo per risolvere questa questione ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    L'ordinamento, per le stringhe, è alfabetico e, secondo la tabella ASCII, "10" viene prima di "2" ...

    Dovrai usare un Comparator ... ma ti rimando a chi ti risponderà nella sezione apposita (c'è una sezione per java dove dovresti postare ...).

    Chiedi al moderatore di spostare la tua discussione ...

    P.S. Non serviva postare tutte quelle stringhe per spiegare il "problema" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema con gli ordinamenti

    Originariamente inviato da gaetano123
    Arrays.sort(mie_stringhe);

    //Ma il 10 è maggiore di 2 ! o no?

    C'è un metodo per risolvere questa questione ?
    Il punto cruciale è che il Comparable implementato in String compara le stringhe in modo puramente "lessicografico", confrontando carattere per carattere. Quindi in effetti "casa2" è maggiore di "casa10" perché nella 5° posizione il "2" è maggiore di "1".
    Detto ancora in altro modo, il Comparable predefinito non "vede" che c'è un numero 10 che dovrebbe essere trattato maggiore di 2!!

    Come risolverlo? Implementando un tuo Comparator (che poi passi all'altra versione sort(), non quella che hai usato sopra). La logica del tuo Comparator può essere anche semplice e banalmente, del tipo: date le 2 stringhe, vado a cercare delle sequenze di numeri, quindi spezzo le parti e le confronto in "cascata".

    "casa2" ----> "casa" e "2" (convertito in int 2)
    "casa10" ----> "casa" e "10" (convertito in int 10)

    "casa" e "casa" sono uguali, quindi in questo caso confronto la parte successiva. Un int 10 è maggiore di un int 2.

    Altro esempio:
    "casa2" ----> "casa" e "2" (convertito in int 2)
    "pippo10" ----> "pippo" e "10" (convertito in int 10)

    "casa" è inferiore di "pippo". Non c'è bisogno di confrontare la parte seguente (i numeri).

    La ricerca di una sequenza di cifre decimali si può fare in diversi modi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.