Ciao ragazzi, il professore ci ha spiegato un tipo di programma con cicli annidati, chiamato "selection sort" che, nelle sue dispense, ha detto si imposta così:
for (int i =0; i <9; i ++) {
// cerca il minimo nelle posizioni tra i e 10...
int posmin =i; // ... portandosi dietro l’indice
for (int j=i ; j <10; j ++) {
if ( valori [j]< valori [ posmin ])
posmin = j;
}
// scambia il minimo con l’elemento in posizione i
int tmp = valori [i ];
valori [ i] = valori [ posmin ];
valori [ posmin ] = tmp ;
}
L'esercizio che io ho da fare sembrerebbe semplice: consiste nel fare la medesima cosa con stringhe anzichè con numeri. Il punto è che con questo codice praticamente (credo) identico:
import java.util. Scanner;
public class StringSelectionsort {
public static void main(String[] args) {
String [] parole= new String [5];
Scanner input=new Scanner(System.in);
System.out.println("Inserisci cinque parole");
for (int i=0; i<5; i++) {
parole [i]= input.next();
}
System.out.println ("Le parole in ordine alfabetico");
for (int i=0; i<4; i++) {
int posmin=i;
for (int j=i; j<5; j++) {
if (parole[j].compareTo(parole [i])<0);
posmin=j;
}
String tmp= parole [i];
parole [i]= parole [posmin];
parole [posmin]= tmp;
System.out.println(tmp);
}
// TODO Auto-generated method stub
}
}
Mi ordina lessicograficamente tutte le parole, tranne l'ultima (la quinta che inserisco). Ho provato cambiando il valore degli indici, ma, o va in errore oppure ripete due volte una stessa parola. Sapete dirmi dove sta l'errore? Vi ringrazio, in anticipo.