Ordenar uma Matriz de String

1 resposta Resolvido
java
J

Olá Pessoal!

Tenho uma matriz de String com 4 linhas e 3 colunas. Como faço para colocar estes Strings em forma crescente?
Fiz utilizando Arrays.sort, mas não funcionou de forma correta.

Abaixo está o codigo:

public static void main(String args[]) {

String nome[][] = new String[4][3];

String x = “”, n;
//inicio do laço for para gravar os nomes
    for (int l = 0; l < 4; l++) {
        //inicio do laço for interno
        for (int c = 0; c < 3; c++) {
            n = JOptionPane.showInputDialog("Digite um nome para a linha " + l + "ª e para " + c + "ª coluna") + " ";
            nome[l][c] = n;
            x += nome[l][c];
        }//fim do laço for externo
        x += "\n";
    }//fim do laço for para gravar os nomes

    JOptionPane.showMessageDialog(null, x, "Nomes Digitados pelo Usuario", JOptionPane.INFORMATION_MESSAGE);

    //inicio do laço for para ordenar os nomes de forma crescente
    for (int l = 0; l < 4; l++) {
        //inicio do laço for interno
        for (int c = 0; c < 3; c++) {
            Arrays.sort(nome);
        }//fim do laço for externo
    }//fim do laço for para ordenar os nomes de forma crescente

    //inicio do laço for para imprimir os nomes ordenados de forma crescente
    for (int l = 0; l < 4; l++) {
        //inicio do laço for interno
        for (int c = 0; c < 3; c++) {
            x += nome[l][c];
        }//fim do laço for externo
        x += "\n";
    }//fim do laço for para imprimir os nomes de forma crescente

    JOptionPane.showMessageDialog(null, x, "Nomes Digitados pelo Usuario de Forma Crescente", JOptionPane.INFORMATION_MESSAGE);

}

Abaixo está o erro do console no netBeans:

Exception in thread main java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.Comparable

at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)

at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)

at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)

at java.util.Arrays.sort(Arrays.java:472)

at estruturadedados.Exercicio8rQ7.main(Exercicio8rQ7.java:38)

Java Result: 1

1 Resposta

A
Solucao aceita

A instrução Arrays.sort(nome); não vai servir, pois você passa uma matriz mas a instrução está ajustada para trabalhar com um vetor.

Implementação alternativa dentre outras possíveis:

public static void main(String[] args) {
        String[][] matriz = {
            {"3", "4", "7"},
            {"4", "5", "0"},
            {"2", "9", "1"},
            {"8", "3", "4"}
        };
        
        System.out.println("Sem ordenação:\n" + Arrays.deepToString(matriz));

        //vou usar o vetor abaixo para ordenar a matriz
        String[] ordenar = new String[matriz.length * matriz[0].length];
        int contador = 0;
     
        //ordenação parcial da matriz
        for (String[] linha : matriz) {
            Arrays.sort(linha);
            System.arraycopy(linha, 0, ordenar, contador, matriz[0].length);
            contador += matriz[0].length;
        }

        System.out.println("\nOrdenação de linha:\n" + Arrays.deepToString(matriz));

        Arrays.sort(ordenar);

        //ordenação completa da matriz
        for (int linha = 0; linha < matriz.length; linha++) {
            for (int coluna = 0; coluna < matriz[0].length; coluna++) {
                matriz[linha][coluna] = ordenar[indexOnAnyArray(linha, coluna, matriz[0].length)];
            }
        }
        System.out.println("\nOrdenando toda a matriz:\n" + Arrays.deepToString(matriz));
    }

    private static int indexOnAnyArray(int linha, int coluna, int colunas) {
        return linha * colunas + coluna;
    }
Criado 24 de agosto de 2017
Ultima resposta 24 de ago. de 2017
Respostas 1
Participantes 2