Ordenar matriz de forma ascendente y descendente

publicado por: Anonymous

tengo una duda acerca de ordenar una matriz de forma ascendente y descendente, he visto el método de la burbuja y también encontré algo sobre la función ‘sort’ pero no se como aplicarla, que debo saber sobre ella? llevo esto ahora ahora pero me tira error

import java.util.Scanner;
import java.util.Arrays;

public class Matriz {
 public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int x;
    int matriz[][];

    System.out.println("Ingrese la dimension de la matriz: ");
    x = sc.nextInt();
    matriz = new int[x][x];

    //Relleno de matriz automatico
    for (int i=0; i<x; i++){ 
        for (int j=0; j<x; j++) {
            matriz[i][j] = (int) (Math.random()*10);
        }
    }

    //Imprimir matriz original
    System.out.println("Matriz original");
    for (int i=0; i<x; i++){ 
        for (int j=0; j<x; j++){ 
            System.out.print(matriz[i][j]+" "); 
        }
        System.out.println(); 
    }

    //Imprimir diagonal principal
    System.out.print("La diagonal principal es:    ["); 
    for (int i=0; i<x; i++) 
        for (int j=0; j<x; j++){ 
            if (i == j) 
                System.out.print(matriz[i][j] +" "); 
        } 
    System.out.println("]");

    //Imprimir diagonal secundaria
    System.out.print("La diagonal secundaria es:    ["); 
    for (int i=x-1; i>=0; i--) 
        for (int j=0; j<x; j++) 
            if (x-1-i == j) 
                System.out.print(matriz[i][j] +" "); 
    System.out.println("]"); 

    Arrays.sort(matriz);
                                      //Esta parte es donde me tira el error
    for(int[] s : matriz)
        System.out.println(s);

    //Matriz ordenada de menor a mayor
    System.out.println("Matriz ordenada de forma ascendente");
    for (int i=0; i<x; i++){ 
        for (int j=0; j<x; j++){ 
            System.out.print(matriz[i][j]+" "); 
        }
        System.out.println(); 
    }
 }
}

El error es:

Ingrese la dimension de la matriz: 
3

9 3 7 
7 1 8 
0 5 6 

La diagonal principal es:    [9 1 6 ]
La diagonal secundaria es:    [0 1 7 ]
Exception in thread "main" java.lang.ClassCastException: [I cannot be cast 
to java.lang.Comparable
at
java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320 
 )
at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.util.Arrays.sort(Arrays.java:1246)
at Matriz.main(Matriz.java:43)
C:UsersJosé PadrónAppDataLocalNetBeansCache8.2executor- 
snippetsrun.xml:53: Java returned: 1
BUILD FAILED (total time: 3 seconds)

solución

Es más fácil visualizar un arreglo de dos dimensiones si lo imaginas cómo uno de una dimensión, pero cada uno de sus elementos contiene otro arreglo.
Por ejemplo, para arreglar tu código puedes hacer esto:

import java.util.*;

public class Matriz{
public static void main(String[] args) {
    int[][] matriz = new int[10][10];

    //añade valores al arreglo
    for (int i = 0; i < matriz.length; i++){ 
        for (int j=0; j< matriz[i].length; j++) {
            matriz[i][j] = (int) (Math.random()*10);
        }
    }

    //accede a cada arreglo dentro de la matriz y lo pasas a la función sort que solo admite arreglos de una dimensión.
    for(int[] i: matriz){
        Arrays.sort(i);
    }
}

}

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *