Não estou conseguindo imprimi a matriz abaixo de forma ordenada(crescente):
package estruturadedados;
import javax.swing.JOptionPane;
public class ordenaMatriz {
//inicio do metodo construtor
public static void main(String args[]) {
int num[][] = new int[4][4];
int troca[][] = new int[4][4];
//int trocou[][] = new int[4][4];
String n;
//inicio do laço para guardar valores
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
n = JOptionPane.showInputDialog("Digite um numero inteiro");
num[i][j] = Integer.parseInt(n);
}
}
System.out.println("Numeros Digitados pelo Usuario!");
//inicio do laço para exibir valores
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.printf("%5d", num[i][j]);
}
System.out.println();
}
System.out.println();
System.out.println("Numeros em ordem crescente:");
//inicio do laço para ordenar valores. Mas não consigo colocar de forma ordenada
//ele imprime o foi digitado pelo usuário, abaixo está o laco que era para fazer a ordenação
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if(num[i][j] > num[i][j]+1){
troca[i][j] = num[i][j];
num[i][j] = (num[i][j]+1);
//System.out.println(num[i][j]);
//trocou[i][j] = troca[i][j];
}
System.out.printf("%5d", num[i][j]);
}
System.out.println();
}
}//fim do metodo construtor
}//fim da classe
1 curtida
No último for, você esta tentando fazer uma ordenação por flutuação (Bubble Sort), em uma matriz bidimensional, eu não penso em tentar algo assim.
Neste último for, ao invés de tentar ordenar, coloque os elementos em um vetor comum e o ordene.
Depois, percorra a matriz bidimensional novamente e atribua os valores do vetor a cada coordenada da matriz.
Como o vetor é unidimensional, você vai precisar incrementar uma variável, para percorrer o vetor.
Seria o equivalente a um gráfico tridimensional.
Coordenadas, x e y, para a matriz e z++, para o vetor, sendo z incrementado dentro do 2º for.
1 curtida
Ola addller!
Vamos ver se entendi corretamente. Devo criar um vetor com 16 posições e nele pedir para o usuário digitar os número Inteiros! Depois faço a ordenação em outro vetor, e depois de ordenado faço a matriz num[4][4] recebendo os valores do vetor ordenado! Seria isto?
Nestes termos não seria necessário de outro vetor para ordenar.
O vetor receberia os dados, você o ordenaria com Arrays.sort(vetorUnico).
Depois sobrescreveria a matriz.
É até mais fácil.
Agora o que eu queria passar era:
a) receber os dados da matriz;
b) copiar para um vetor;
c) ordenar o vetor que recebeu os dados da matriz; e
d) sobrescrever a matriz, com os dados do vetor.
O método é este:
private static int[][] ordenacaoFormal(int[][] matriz, int tamanhoMatriz) {
//int[] vetor = new int[Arrays.stream(matriz).mapToInt(linha -> linha.length).sum()];//se usar esta instrução não precisa informar o tamanho da matriz
int[] vetor = new int[tamanhoMatriz];//se usar esta instrução, precisa informar o tamanho da matriz
int cont = 0;
for (int[] linha : matriz) {
for (int coluna = 0; coluna < linha.length; coluna++) {
vetor[cont++] = linha[coluna];//copiando a matriz para o vetor
}
}
Arrays.sort(vetor);//ordenando o vetor
cont = 0;
for (int[] linha : matriz) {
for (int coluna = 0; coluna < linha.length; coluna++) {
linha[coluna] = vetor[cont++];//sobrecrevendo a matriz de forma ordenada
}
}
return matriz;
}
Obrigado addller!
Consegui solucionar baseado em sua ajuda! Ficou da seguinte forma:
//inicio do metodo construtor
public static void main(String args[]) {
int x;
String num;
int numeros[] = new int[16];
//inicio do laço para receber valores digitados pelo usuario
for(int i = 0;i < 16;i++){
num = JOptionPane.showInputDialog(“Digite um Número Inteiro!”);
numeros[i] = Integer.parseInt(num);
}//fim do laço para receber valores digitados pelo usuario
//inicio do laço para mostrar os numeros digitados pelo usuario
System.out.println(“Números Digitados Pelo Usuario!”);
for(int i = 0;i < 16;i++){
if(i == 4 || i == 8 || i == 12 || i == 16)
System.out.println();
System.out.printf("%5d", numeros[i]);
}//fim do laço para mostrar os numeros digitados pelo usuario
//inicio do laço para ordenar os numeros digitados pelo usuario
for (int i = 1; i < numeros.length; i++) {
for (int j = numeros.length - 1; j >= i; j–) {
if (numeros[j-1] > numeros[j]) {
x = numeros[j-1];
numeros[j - 1] = numeros[j];
numeros[j] = x;
}
}
}//fim do laço para ordenar os numeros digitados pelo usuario
System.out.println();
//inicio do laço para mostrar os numeros digitados pelo usuario ordenado
System.out.println(“Números Digitados Pelo Usuario em Ordem Crescente!”);
for(int i = 0;i < 16;i++){
if(i == 4 || i == 8 || i == 12 || i == 16)
System.out.println();
System.out.printf("%5d", numeros[i]);
}//fim do laço para mostrar os numeros digitados pelo usuario ordenado
}//fim do metodo construtor
Valeu!