Ajuda Com Matriz

5 respostas
Ederson_Lima

Oi pessoal, tenho um exercício para resolver da cadeira de Estrutura de Dados, mas não consigo ver onde está o erro no código que tentei fazer!!! Gostaria da ajuda de vocês para resolver isso! :?

package Lista02;

public class Exercicio10 {
	public static void main(String[] args) {
		int valor[][] = { { 1, 2, 3, 4, 5, 6 }, { 7, 8, 9, 10, 11, 12 },
				{ 13, 14, 15, 16, 17, 18 } };
		int valor2[][] = new int[valor[0].length][valor.length];
		int a = 0;
		int b = 0;
		int j = 0;

		for (int i = 0; i < valor.length; i++) {
			for (j = 0; j < valor[i].length; j++) {
				if (j == 3) {
					b++;
					a = 0;
				}
				valor2[a][b] = valor[i][j];
				a++;
			}
			b++;
		}
		for (int k = 0; k < valor2.length; k++) {
			for (int l = 0; l < valor2[k].length; l++) {

				System.out.print(valor2[k][l]);
			}
			System.out.println("");
		}
	}

}

5 Respostas

M

Ederson, o próprio enunciado do exercício gera dúvidas.
Confrontando o enunciado com seu código cheguei a conclusões diferentes.
Me parece que quem elaborou o exercício escreveu uma coisa e desenhou outra.
Você poderia fornecer alguns esclarecimentos?
1-) o primeiro array é unidimensional ou é um array 3 x 6? Sempre será 3 x 6?
2-) o segundo parece mais um array bidimensional, mas o retorno do método está considerando um array de uma dimensão.

Independente das respostas, teste o código abaixo
public class MatrizTransposta01 {
	public static void main(String[] args) {
		int valor[][] = { { 1, 2, 3, 4, 5, 6 }, { 7, 8, 9, 10, 11, 12 },
				{ 13, 14, 15, 16, 17, 18 } };

		// impressão
		System.out.println("Matriz original");
		int i=0, j=0;
		for(int[] dimensao1 : valor){
			for(int dimensao2 : dimensao1){
				System.out.print("\t"+ valor[i][j] + ", ");
				j++;
			}
			i++; j=0;
			System.out.println();
		}

		ordenaMatriz(valor);
	}

	private static void ordenaMatriz(int[][] valor) {
		
		int i = 0, j = 0;
		
		// constróe a primeira dimensão 
		int ordenada[][] = new int[valor.length][];
		
		// constróe a segunda dimensão
		for(int[] dimensao2 : ordenada){
			ordenada[i] = new int[valor[i].length];
			i++;
		}
		
		// popula o array desejado
		i=0;j=0;
		int x=0, z=0;
		for(i=0; i < ordenada.length; i++){
			x=0;
			for(j=0; j < ordenada[i].length; j++){
				ordenada[x][z] = valor[i][j];
				if (x == (ordenada.length - 1)){
					x = 0;
					z++;
				}else{
					x++;
				}
			}
		}
		
		// impressão
		System.out.println("\nMatriz reordenada");
		i=0; j=0;
		for(int[] dimensao1 : ordenada){
			for(int dimensao2 : dimensao1){
				System.out.print("\t"+ ordenada[i][j] + ", ");
				j++;
			}
			i++; j=0;
			System.out.println();
		}
	}	
}
Boa sorte!
Ederson_Lima

Opa, falew mesmo mspereira, acho que seja pelo enunciado mesmo que não estava entendendo em como faze-la.

Desculpa perguntar, pois sou novo ainda com java, mas, qual a diferença dos for ( ; ; ) e for ( : )

for(int[] dimensao1 : valor)

Mais uma vez agredeço, abraços…

Giulliano

Ederson Lima:
Opa, falew mesmo mspereira, acho que seja pelo enunciado mesmo que não estava entendendo em como faze-la.

Desculpa perguntar, pois sou novo ainda com java, mas, qual a diferença dos for ( ; ; ) e for ( : )

for(int[] dimensao1 : valor)

Mais uma vez agredeço, abraços…

A partir do java 5 foi adicionado o “for each” (Objetc obj : objetcs) onde lê-se “Para cada Objeto obj de objects”. Eles são mais rápidos, mais confiáveis e recomenda-se o uso deles a partir do java 5 a menos que vc queira remover ou adicionar itens à lista percorrida.

M

Tem um post aqui. E um tutorial aqui.

Boa sorte!

Ederson_Lima

Opa, valeu pelos esclarecimentos, vou procurar usar mais esse tipo de for!!!

Abraço.

Criado 5 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 5
Participantes 3