Originariamente inviato da andbin
codice:
public class CombinazioniTastiera
{
    private static String[] alphabet = { "", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ" };

    public static void main (String[] args)
    {
        String number = "3342398";

        int len = number.length ();

        int[] digits = new int[len];
        String[] letters = new String[len];

        for (int i = 0; i < len; i++)
        {
            digits[i] = Integer.parseInt (String.valueOf (number.charAt (i)));
            letters[i] = alphabet[digits[i]];
        }

        int[] indexes = new int[len];
        int carry;

        do {
            for (int i = 0; i < len; i++)
                System.out.print (letters[i].charAt (indexes[i]));

            System.out.println ();

            carry = 1;

            for (int i = 0; i < len; i++)
            {
                if (letters[i].length () > 0)
                {
                    indexes[i] += carry;
                    if (indexes[i] >= letters[i].length ())
                        indexes[i] = 0;
                    else
                        carry = 0;
                }
            }
        } while (carry == 0);
    }
}
Che non solo è molto più corto ma ha un grande vantaggio: funziona per un qualunque numeri di digit!!!
Potrei mettere String number = "33423983245645735"; e funziona lo stesso.
Ti ringrazio però vorrei capire perchè quella condizione non funziona come dovrebbe... hai qualche idea? o_O