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

    [Java] Ordinare una stringa alfabeticamente

    Salve a tutti!

    Sto provando a scrivere un metodo in Java che prende una stringa e ritorna una nuova stringa composta dai caratteri della prima in ordine alfabetico. Ad esempio, se la stringa è "ciao", allora la stringa risultante sarà "acio". Ecco il metodo che ho scritto:

    codice:
    public static String sort(String word) {
            String result = "";
            for (int i = 0; i < word.length(); i++) {
                char min = word.charAt(i);
                for (int j = i + 1; j < word.length(); j++) {
                    if (word.charAt(j) < min)
                        min = word.charAt(j);
                }
                result += min;
            }
            return result;
        }
    Ho realizzato una sorta di selection sort che seleziona il carattere minimo della sottostringa considerata fino a quel momento e lo concatena alla stringa che sarà restituita alla fine.
    Il problema è che il metodo non funziona. Se torniamo all'esempio, per "ciao" mi stampa "aaao". Qualcuno può spiegarmi perché?

    Grazie in anticipo!

  2. #2
    il metodo non funziona perchè per i primi 3 cicli del secondo for la lettera minima è sempre "a". Il tuo metodo funzionerebbe le caso scambiasse le posizioni dei caratteri nella stringa di partenza.

    potevi notare il tutto facendoti un output del metodo:

    esempio del ciao:

    primo ciclo del for esterno:
    carattere estratto "c";
    ciclo interno:
    carattere minimo rispetto a "c" è il carattere "a" ( sulla sotto-stringa "ciao");;

    result = "a".

    secondo ciclo del for esterno:
    carattere estratto "i";
    ciclo interno:
    carattere minimo rispetto a "i" è il carattere "a" ( sulla sotto-stringa "iao");

    result = "aa".

    terzo ciclo del for esterno:
    carattere estratto "a";
    ciclo interno:
    carattere minimo rispetto a "a" è il carattere "a" (sulla sotto-stringa "ao");

    result = "aaa".

    quarto ciclo del for esterno:
    carattere estratto "o";
    ciclo interno:
    carattere minimo rispetto a "o" è il carattere "o" (sulla sotto-stringa "o");

    result = "aaao".

  3. #3
    Grazie, mi hai fatto capire perché non va! Dovrei trovare il modo di eliminare il carattere minimo della sottostringa dopo averlo aggiunto alla stringa nuova.

    Grazie ancora!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se lo si volesse fare usando solo i metodi del framework basterebbe fare 3 passi semplicissimi:
    - dal String si ottiene un char[] (toCharArray() )
    - Si ordina l'array char[] con il sort() di java.util.Arrays
    - Si ricrea un String con l'apposito costruttore.

    Se non si può o non si vuole usare il sort() già fatto si può implementare l'algoritmo di ordinamento, da zero, con del proprio codice. Va usato un apposito "algoritmo di ordinamento", uno tra quelli "noti" e ne esistono a bizzeffe, tra cui il più semplice è il bubblesort.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie andbin, è proprio la soluzione che ho implementato e funziona a meraviglia! Ho trasferito la stringa in un array di caratteri, ho ordinato quello usando l'algoritmo bubble sort e ho creato una nuova stringa composta dai caratteri dell'array ordinati.

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.