He estado tratando de solucionar este error por un tiempo, pero no puedo solucionarlo. El propósito del programa a continuación es utilizar el ordenamiento de burbujas para ordenar alfabéticamente una matriz de nombres. Por ejemplo, si los nombres son ["Bob Joe", "Bob Frank" y "Bob Johnson"], la matriz ordenada correctamente sería ["Bob Frank", "Bob Joe", "Bob Johnson"].

El principal desafío que estoy teniendo es comparar cualquier nombre pasado de 2 cadenas.charAt (0). Si solo comparo los caracteres de 2 cadenas en 1 punto de índice específico, mi código funciona. Sin embargo, si trato de hacer que la comparación se mueva más allá del índice 0 si el índice 0 de ambas cadenas es igual entre sí, mi programa ya no funciona.

El código se describe a continuación.

public static void sortAlpha (String names[])
    {
        for (int i = 0 ; i < names.length - 1 ; i++)
        {
            for (int a = 0 ; a < names.length - 1 - i ; a++)
            {

                int length1 = names [a].length ();
                int length2 = names [a + 1].length ();

                int min = 1; 

                if (length1 > length2)
                {
                    min = length2;
                }
                else
                {
                    min = length1;
                }

                for (int b = 0 ; b < min ; b++)
                {

                    if ((int) names [a].toLowerCase ().charAt (b) > (int) names [a + 1].toLowerCase ().charAt (b))
                    {
                        String tempName = names [a];

                        // sort:
                        names [a] = names [a + 1];
                        names [a + 1] = tempName;

                        break;
                    }

                }

            }
        }
    }

Si simplemente el valor mínimo predeterminado es 1, el código se ejecuta y hace el trabajo previsto. Sin embargo, si el valor mínimo permanece dinámico, el programa no funciona. Estoy tratando de discernir por qué esto es así y cuál es la solución. ¡Cualquier ayuda sería apreciada!

-1
brownmamba 27 may. 2020 a las 17:59

3 respuestas

La mejor respuesta

Mira esto.

   public static void sortAlpha(String names[]) {
      for (int i = 0; i < names.length - 1; i++) {
         for (int a = 0; a < names.length - 1 - i; a++) {
            int lengthLeft = names[a].length();
            int lengthRight = names[a + 1].length();
            int minLength = lengthLeft > lengthRight ? lengthRight : lengthLeft;
            for (int b = 0; b < minLength; b++) {
               int letterLeft = (int) names[a].toLowerCase().charAt(b);
               int letterRight = (int) names[a + 1].toLowerCase().charAt(b);
               if (letterLeft > letterRight) {
                  String tempName = names[a];
                  // sort:
                  names[a] = names[a + 1];
                  names[a + 1] = tempName;
                  break;
               } else if (letterLeft == letterRight) {
                  // if the letters are the same go for the next letters
                  continue;
               } else {
                  // if it's already in the right position - stop.
                  break;
               }
            }
         }
      }
   }
0
Kostakiiiis 27 may. 2020 a las 15:47

Simplemente puede usar compareTo () y una variable temporal para comparar y almacenar

Scanner sc = new Scanner(System.in);
String n[]= new String[5];
System.out.println("Enter the String");
for(int k = 0;k<5;k++) {
    n[k] = sc.nextLine();
}
String temp;
System.out.println("sorted order:");
for (int j = 0; j < n.length; j++) {
   for (int i = j + 1; i < n.length; i++) {
     if (n[i].compareTo(n[j]) < 0) {
        temp = n[j];
        n[j] = n[i];
        n[i] = temp;
    }
}
System.out.println(n[j]);
0
Alec 27 may. 2020 a las 20:47

Utilice este

for (int i = 0; i < count; i++) 
        {
            for (int j = i + 1; j < count; j++) { 
                if (str[i].compareTo(str[j])>0) 
                {
                    temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                }
            }
        }
0
Nagaraj S Kharvi 27 may. 2020 a las 16:00