Soluzione 3.2

Ecco una possibile soluzione. Osservare con attenzione i tre livelli di decisioni annidate che realizzano l'ordinamento delle tre stringhe.
import java.util.Scanner;

public class StringComparator
{
    public static void main(String[] args)
    {  
	Scanner in = new Scanner(System.in);
	System.out.println("Inserire tre stringhe, una per riga");

	String s1 = in.nextLine();
	String s2 = in.nextLine();
	String s3 = in.nextLine();

	String min;   //variabili non inizializzate. Al termine dell'esecuzione
	String mid;   //conterranno rispettivamente la stringa minima, quella 
	String max;   //intermedia e quella massima
	
	if (s1.compareTo(s2) <= 0)
	    {  
		if (s1.compareTo(s3) <= 0)
		    {  
			min = s1;
			if (s2.compareTo(s3) <= 0)
			    {  
				mid = s2;
				max = s3;
			    } 
			else
			    {
				mid = s3;
				max = s2;
			    }
		    } 
		else //in questo caso s3 e` "piu` piccola" di s1 e quindi di s2
		    {
			min = s3;
			mid = s1;
			max = s2;
		    }
	    } 
	else  //in questo caso s2 e` "piu` piccola" di s1
	    { 
		if (s2.compareTo(s3) <= 0)
		    {  
			min = s2;
			if (s1.compareTo(s3) <= 0)
			    {
				mid = s1;
				max = s3;
			    } 
			else
			    {
				mid = s3;
				max = s1;
			    }
		    } 
		else //in questo caso s3 e` "piu` piccola" di s2 e quindi di s1
		   {
		       min = s3;
		       mid = s2;
		       max = s1;
		   }
	    }

	System.out.println("Le stringhe ordinate sono:");
	System.out.println(min);
	System.out.println(mid);
	System.out.println(max);
    }
}