[ Resolvido ] Problema de lógica na matriz

Bom dia, olivercld!

Adoro ficar aqui resolverndo problemas desse tipo e parei para ver o seu das diagonais, apesar do sono eu resolvi e deixei sua classe mais genérica, possibilitando trabalhar com qualquer matriz quadrada, veja o resultado:

[code]import javax.swing.JOptionPane;

public class Matriz_bidimen {
static int num_lin = 4, num_col = 4;
public static void main(String[] args) {
int matO[][] = new int[num_lin][num_col];
// int matB[][] = new int[10][10];

	// int cont = 0;  
	int temp;  
	String mensagem = " ", texto = "";  
	int linha, coluna;  

	JOptionPane.showMessageDialog(null, "Matriz : ");  

	for (linha = 0; linha < num_lin; linha++)  
		for (coluna = 0; coluna < num_col; coluna++) {  
			// cont++;  
			// matO[linha][coluna] = cont;  

			matO[linha][coluna] = Integer.parseInt(JOptionPane  
					.showInputDialog(null, " DIGITE VALORES DA MAT["  
							+ linha + "] [" + coluna + "] : "));  

			// mensagem = mensagem + "\n valores" + matO[linha][coluna];  
			// JOptionPane.showMessageDialog(null, mensagem);  

		}  
	// apresentando a matriz		
	for (linha = 0; linha < num_lin; linha++){
		texto = texto +"\n";
		for (coluna = 0; coluna < num_col; coluna++) {  

			mensagem = mensagem + "\n mat[" + linha + "][" + coluna  
			+ "] : " + matO[linha][coluna];
			texto = texto +" "+ matO[linha][coluna];

		}  }
	JOptionPane.showMessageDialog(null, mensagem);
	mensagem = "";  
	JOptionPane.showMessageDialog(null, texto);
	texto="";

	// troca a diagonal secundaria pela primaria  
	for (linha = 0; linha < num_lin; linha++)  
		for (coluna = 0; coluna < num_col; coluna++) {  
			if (linha + coluna == (num_col-1)) {  
				temp = matO[linha][(num_col-1)-linha];
				//System.out.println(linha+""+coluna+": "+temp);
				matO[linha][(num_col-1)-linha] = matO[linha][linha];
				matO[linha][linha] = temp;
			}  
		}
	// apresentando a matriz   
	for (linha = 0; linha < num_lin; linha++){
		texto = texto +"\n";
		for (coluna = 0; coluna < num_col; coluna++) {  

			mensagem = mensagem + "\n mat[" + linha + "][" + coluna  
			+ "] : " + matO[linha][coluna];
			texto = texto +" "+ matO[linha][coluna];

		}  }
	JOptionPane.showMessageDialog(null, mensagem);  
	JOptionPane.showMessageDialog(null, texto);
}

}[/code]

OBS: basicamente trabalhei em cima do seu código, e usei variaveis para setar o alcance da matriz deixando o código mais abrangente, não ficando limitado a matriz 10x10.

Espero que isso ajude… o que diz respeito a tua dúvida seria essa parte do código:

// troca a diagonal secundaria pela primaria for (linha = 0; linha < num_lin; linha++) for (coluna = 0; coluna < num_col; coluna++) { if (linha + coluna == (num_col-1)) { temp = matO[linha][(num_col-1)-linha]; //System.out.println(linha+""+coluna+": "+temp); matO[linha][(num_col-1)-linha] = matO[linha][linha]; matO[linha][linha] = temp; } }

Abraço e bons estudos!

EDIT, na verdade APPEND (lol):

Salve, olivercld!

Voltei! Bom, fiz a parte de trocar a 3º linha pela 9º coluna, mas ao final surge a grande questão no indice 2,8 fica o valor da 3º linha ou o da 9º coluna? hehe, vou te mostrar o antes e depois e vc vai entender melhor, caso já não tenha entendido:


ANTES DA TROCA[color=white]…[/color]DEPOIS DA TROCA

Veja na imagem que ilustra depois da troca, de acordo com os calores que usei, no índice sublinhado de vermelho, qual valor deveria existir: 2 ou 8?

A pergunta surge pois antes de ser feita a troca, o valor da intersessão era 2, porém depois da troca dois valores disputam o indice: 2 ou 8?

Se fosse para trocar linha n por coluna n não haveria esse probleminha. Faça uma análise e se possível tire essa dúvida com teu professor.

De qualquer forma segue o código que trata da troca:

// troca linha 3 com coluna 9 for(int indice = 0; indice < num_col; indice++ ){ temp = matO[2][indice]; matO[2][indice] = matO[indice][8]; matO[indice][8] = temp; }

Aguardo sua análise para possível modificação do código.

Abraço!

e ai, velho! ve so, temos um outro amigo ai que ta ajudando. =)
sobre teu problema com as diagonais, pessoalmente gostei dessa forma aqui que eu fiz :

o metodo mostraMatriz eu nao coloquei porque é aquele que eu ja te passei, ne? ele serve pra td quanto e tipo de matriz. Eu nao olhei muito o metodo do nosso amigo, porque eu ia procurar escrever uma matriz pequena aqui e ver o que faz matO[linha][(num_col-1)-linha] = matO[linha][linha];

eu num gosto mt dessas formulas assim n… =(
basicamente ta explicado o que eu faço quando vou trocar as diagonais, ficou mt facinho e o cara entende logo de cara, acho que ficou massa.

Sou de Pernambuco.

public static void main(String[] args) {

        /*
         * Gostei dessa solução aqui que eu encontrei, ve se tu aprova ai :
         */

        final int TAMANNHO = 3;
        int mat[][] = new int[TAMANNHO][TAMANNHO];

        // uso uma variavel pra dar os valores pra matriz
        int valoresPraMatriz = 0;
        for (int i = 0; i < TAMANNHO; i++) {
            for (int j = 0; j < TAMANNHO; j++) {
                mat[i][j] = valoresPraMatriz++;
            }
        }

        // mostro a matriz e uma pula umas linhas pra prox. matriz n ficar colada com ela qnd for mostrar
        mostraMatriz(mat, TAMANNHO, TAMANNHO);
        System.out.println("\n\n");


        /*
         * a unica parte que precisamos pensar é aqui, ento vamos botar nosso tico e teco p funfar :
         * nao e necessario pegar a propria diagonal, porque seus elementos n vao ser trocados por nenhum
         * entao começamos o "i" pela segunda linha (e começarmos pela primeira nao da erro, mas ele nao faz NADA. entao pra que usar a linha1???)
         * Se tu colocar na ponta do lapis, vai ser que a diagonal inferior é quando i > j
         * Ainda na ponta do lapis, vai ver que uma diagonal (inferior) tu usa matriz[i][j] e a outra funciona como matriz[j][i]
         * Sabe o que isso quer dizer? é que nem grafico de coordenadas polares meu amigo, depois que o cara encontra um o outro é só espelhar
         * Em outras palavras, se tu tem a inferior (que eh facil demais de conseguir) o outro tu tb ja tem, entao so precisa UM for
         * Olha ai, que coisa maravilhosa! huahuahuahuha Sem complicação, sai na hora que nem caldo de cana na barraca!
         * Espero ter ajudado!
         */
        int temp = 0;
        for (int i = 1; i < TAMANNHO; i++) {
            for (int j = 0; j < TAMANNHO; j++) {

                if (i > j) { // Se i > j, to numa diagonal inferior
                    temp = mat[i][j];
                    mat[i][j] = mat[j][i];
                    mat[j][i] = temp;
                } else {
                    /*
                     * Se ele nao aende ao conjunto que a gente procura, entao ele volta
                     * pro cabeçalho do FOR. aqui nao é nem tao necessario, porque nao tenho mais nada pra baixo
                     * mas, se tivesse, seria interessante nao precisar passar pelo codigo, ja que eu n tinha q usar...
                     * mesmo que sejam expressoes condicionais e elas nao executem codigo que eu n preciso, ficar
                     * testando coisas come processamento. 
                     */
                    continue;
                }

            }
        }

        mostraMatriz(mat, TAMANNHO, TAMANNHO);

    }

saída :

012
345
678

036
147
258

pelo que entendi era isso que vc queria, ne? Ve ai se to certo, se entendi direito. Eu nao testei mt nao, mas pelo que vejo funciona bem. Eu nao testei mais porque to com preguiça de mudar o metodo mostraMatriz pra deixar numeros maiores (com 2 caracteres ou mais) bonitinhos. Como ele foi feito pra numeros com um caractere, se numeros grandes forem usados ele deixa as coisas meio tortas. é só tu testar que numero maximo ele escreve e ai colocar mais espaços huauhauuha.

Se tu quiser alterar o tamanho da matriz so muda a constante TAMANHO e pronto. Ve ai se tu aprova! me add no msn : computacaoUnicap@hotmail.com

Bom dia, gpmdf2!

Ele quer mais ou menos isso mesmo, porém você fez a troca da linha e da coluna com indice iguais, ou seja, linha 2 e coluna 2, porém no caso dele, ele vai ter que trocar a linha 3 pela coluna 9, não mantendo a mesma intersessão e isso gera o problema que eu coloquei na edição da minha última postagem.

0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 1 0 1 2 3 4 0 1 2 1 4 2 2 2 2 2 === lin 2 por col 4 ===> 2 2 2 1 2 ou 2 2 2 1 2 ? 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 4 4 4 4 4 4 4 4 1 4 4 4 4 1 4

Entende o problema de trocar linha por coluna de índices diferentes? Se fosse linha e coluna com índices iguais não haveria esse problema pois os números envolvidos seriam sempre iguais.

Abraço!

oi, Vingdel

o que ele pediu :

exemplo uma 3x3  
  
00 01 02  
10 12 13  
20 22 23  
  
quero pegar os valores acima da principal esses  01 02  13  
                                                                             
inverter(trocar)  
por valores abaixo da principal                            10 20   22  
                                                                              
pegar os valores da de cima trocar com a debaixo as triangulares                

entao pra mim, se ele disse que quer pegar os numeros 01 02 13 , que estao no triangulo acima da diagonal principal

e trocar pelo triangulo que tem abaixo (10 20 22), entao ele quer isso que mostrei…

fiz o que eu entendi que ele pediu. =/ Deixa ele explicar melhor pra ver o que e que ele quer mesmo, entao…

o que eu fiz foi pegar o triangulo de cimda da diagonal e botar pra baixo e o de baixo botar pra cima…

foi isso que entendi do pedido… deixa ver uma explicação melhor do problema, relaxa, senta ai, come uns salgadinhos e vamo tocar um pouco de guitarra! hauhuahua

Valeu!!!

[quote=gpmdf2]o que eu fiz foi pegar o triangulo de cimda da diagonal e botar pra baixo e o de baixo botar pra cima…

foi isso que entendi do pedido… deixa ver uma explicação melhor do problema, relaxa, senta ai, come uns salgadinhos e vamo tocar um pouco de guitarra! hauhuahua

Valeu!!! [/quote]

Opa, foi mal então, você já está mais a frente do que eu. Eu tava falando da segunda parte do que ele tem que fazer, troca linha com coluna essa de inverter os triângulhos seria a proxima fase, mas antes tem que ser decidido o dilema dos dois valores na troca da linha pela coluna. Leia o que eu escrevi atentamente para você entender.

OBS.: Na minha opinião, o exercício foi mal formulado… Eu anularia essa questão em concurso… hehehe

Abraço!

galera toda ajuda e bem vinda, estou aqui implementando odigo que ja tenho ok ja ja eu posto aqui da dando alguns erros jaja eu posto e o que falaram esta certo agora estou trabalhando na troca da 3 linha que em java parte do 0 entao vou fazer if(linha == 2) que e a terceira linha e trocar pela 9º coluna, depois disso e igual que o gpmdf2 falou de trocar a triangular superior com a diagonal inferior de maneira alguma quero a diagonal principal apena valores acima dela e valores abaixo dela e trocar e como o gpmdf2 fez, a de troca de linha por coluna e exatamente o que o amigo Vingdel fez, tu esta certo e exatamnte que eu quero fazer
entao deixa eu implementar no codigo que ja tenho aqui e ao final posto aqui o codigo blz

brothers e uma emoçao eim voçes me ajudando owww :lol: hehe calma ai ja eu posto codigo que tneho aqui.

testam essa matriz esta fazendo exatamente a troca de diagonais, tive ajuda claro sozinho nao conseguia. aqui vai o codigo


public class EstruturaMatriz {
	private int dimensao = 0;
	
	public EstruturaMatriz(int dimensao){
		this.dimensao = dimensao;
		int[][] matriz = new int[dimensao][dimensao];
	}
	
	public int[][] trocaLinhasColunas(int[][] matriz){
		int[][] matrizAux = new int[dimensao][dimensao];
		
		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {
				matrizAux[coluna][linha] = matriz[linha][coluna];
			}
		}
		return matrizAux;
	}
	
	public int[][] trocaDiagonais(int[][] matriz){
		int[][] matrizAux = new int[dimensao][dimensao];
		
		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {
				matrizAux[linha][coluna] = matriz[linha][coluna];
			}
		}
		int linha1 = 0;
		int coluna1 = 0;
		int l = dimensao - 1;
		int c = 0;
		for (int linha = 0; linha < dimensao; linha++) {
			matrizAux[l][c] = matriz[linha1][coluna1];
			linha1++;
			coluna1++;
			l--;
			c++;
		}
		int lin1 = dimensao-1;
		int col1 = 0;
		int li = 0;// nao entendi aqui ainda
		int co = 0;
		for (int coluna = 0; coluna < dimensao; coluna++) {
			matrizAux[li][co] = matriz[lin1][col1];
			lin1--;
			col1++;
			li++;
			co++;
		}
		return matrizAux;
	}
	
	public void imprimeMatriz(int[][] matriz){
		System.out.println("Matriz: ");
		for (int linha = 0; linha < matriz.length; linha++)
		{
			System.out.print("| ");
			for (int coluna = 0; coluna < matriz.length; coluna++) {
				System.out.print(matriz[linha][coluna]+"   ");
			}
			System.out.print(" |");
			System.out.println();
		}
		System.out.println(" |");
	}
}

agora a main principal onde chamo da classe estrutura da matriz

import java.util.Scanner;

public class Matriz {

	public static void main(String[] args) {
		Scanner digite = new Scanner(System.in);
		System.out.println("Digite a dimensão da Matriz: ");
		int dimMatriz = digite.nextInt();
		int[][] matriz = new int[dimMatriz][dimMatriz];
		EstruturaMatriz estMatriz = new EstruturaMatriz(dimMatriz);
		
		//leitura dos valores e armazenamento na matriz
		for (int linha = 0; linha < dimMatriz; linha++) {
			for (int coluna = 0; coluna < dimMatriz; coluna++) {
				System.out.println("Digite valor da matriz na posicao ["
						+ (linha+1) + "][" + (coluna+1) + "]: ");
				matriz[linha][coluna] = digite.nextInt();
			}
		}
		System.out.println("leitura dos valores e armazenamento na matriz");
		estMatriz.imprimeMatriz(matriz);
		
		System.out.println("troca diagonais");
		int[][] matrizResultado = estMatriz.trocaDiagonais(matriz);
		//estMatriz.imprimeMatriz(estMatriz.trocaDiagonais(matriz));
		estMatriz.imprimeMatriz(matrizResultado);
		
		System.out.println("troca linhas por colunas");
		estMatriz.imprimeMatriz(estMatriz.trocaLinhasColunas(matriz));
	}
}

AGORA e que vem os erros eu continuei implementando pra fazer a troca de linha com coluna depois troca das triangulares como os amigos me explicaram so que continua dando erros toscos aqui vai o mesmo codigo so que com implementação a mais as duas classes a estrutura e a main
aqui estão os erros:


public class EstruturaMatriz {
	private int dimensao = 0;

	public EstruturaMatriz(int dimensao) {
		this.dimensao = dimensao;
		int[][] matriz = new int[dimensao][dimensao];
	}

	// troca linhas por colunas --> transposta
	public int[][] trocaLinhasColunas(int[][] matriz) {
		int[][] matrizAux = new int[dimensao][dimensao];

		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {
				matrizAux[coluna][linha] = matriz[linha][coluna];
			}
		}
		return matrizAux;
	}

	// troca das diagonais secundaria pela principal
	public int[][] trocaDiagonais(int[][] matriz) {
		int[][] matrizAux = new int[dimensao][dimensao];

		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {
				matrizAux[linha][coluna] = matriz[linha][coluna];
			}
		}
		int linha1 = 0;
		int coluna1 = 0;
		int l = dimensao - 1;
		int c = 0;
		for (int linha = 0; linha < dimensao; linha++) {
			matrizAux[l][c] = matriz[linha1][coluna1];
			linha1++;
			coluna1++;
			l--;
			c++;
		}
		int lin1 = dimensao - 1;
		int col1 = 0;
		int li = 0;//
		int co = 0;
		for (int coluna = 0; coluna < dimensao; coluna++) {
			matrizAux[li][co] = matriz[lin1][col1];
			lin1--;
			col1++;
			li++;
			co++;
		}
		return matrizAux;
	}// fim do metodo troca diagonais

	// troca 3 linha com 9º coluna
	public int[][] troca3Linha8Coluna(int[][] matriz) {
		int[][] matrizAux = new int[dimensao][dimensao];
		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {

				matrizAux = matriz[2][coluna];// dando erro 
				matriz[2][coluna] = matriz[coluna][8];
				matriz[coluna][8] = matrizAux;// dando erro

			}

		}
		return matrizAux;
	}

	// troca triangular superior com triangular inferior
	public int[][] trocatriangularsuperior(int[][] matriz) {
		int[][] matrizAux = new int[dimensao][dimensao];
		for (int linha = 0; linha < dimensao; linha++) {
			for (int coluna = 0; coluna < dimensao; coluna++) {

				if (linha > coluna) {// estou triangular inferior
                    matrizAux = matriz[linha][coluna];  //erro 
                    matriz[linha][coluna] = matriz[coluna][linha];
                    matriz[coluna][linha] = matrizAux;
				}
				else{  // realmente eu preciso desse else  ? e o continue? 
					
					continue;
				}
			}
		}
		return matrizAux;
		 EstruturaMatriz(matriz, dimensão, dimensão); // neste caso eu nao quero chamala aqui quero chamala na main principal 
	}

	// metodo imprime
	public void imprimeMatriz(int[][] matriz) {
		System.out.println("Matriz: ");
		for (int linha = 0; linha < matriz.length; linha++) {
			System.out.print("| ");
			for (int coluna = 0; coluna < matriz.length; coluna++) {
				System.out.print(matriz[linha][coluna] + "   ");
			}
			System.out.print(" |");
			System.out.println();
		}
		System.out.println(" |");
	}
}
import java.util.Scanner;

public class Matriz {

	public static void main(String[] args) {
		Scanner digite = new Scanner(System.in);
		System.out.println("Digite a dimensão da Matriz: ");
		int dimMatriz = digite.nextInt();
		int[][] matriz = new int[dimMatriz][dimMatriz];
		EstruturaMatriz estMatriz = new EstruturaMatriz(dimMatriz);

		// leitura dos valores e armazenamento na matriz
		for (int linha = 0; linha < dimMatriz; linha++) {
			for (int coluna = 0; coluna < dimMatriz; coluna++) {
				System.out.println("Digite valor da matriz na posicao ["
						+ (linha + 1) + "][" + (coluna + 1) + "]: ");
				matriz[linha][coluna] = digite.nextInt();
			}
		}
		System.out.println("leitura dos valores e armazenamento na matriz");
		estMatriz.imprimeMatriz(matriz);

		// imprime valores da diagonais
		System.out.println("troca diagonais");
		int[][] matrizResultado = estMatriz.trocaDiagonais(matriz);
		// estMatriz.imprimeMatriz(estMatriz.trocaDiagonais(matriz));
		estMatriz.imprimeMatriz(matrizResultado);
		
		

		// recebe o metodo troca 3 linha pela nona coluna
		System.out.println("troca linha por coluna");
		int[][] matrizResultado = estaMatriz.troca3Linha8Coluna(matriz);// ocorre o 
		                          //erro aqui na hora em que chamo o metodo troca 3 linha por coluna
		estMatriz.imprimeMatriz(matrizResultado);

		System.out.println("troca linhas por colunas -->( Transposta )");
		estMatriz.imprimeMatriz(estMatriz.trocaLinhasColunas(matriz));
	}
}


grato pela ajuda: poderiam me dizer oque estou errando neste codigo abaixo, estou fazendo como vcs falaram o primeiro codigo acima esta ok trocando as diagonais eu continuei e claro pra fazer o a troca de 3 linha pela 8 coluna depois triangular superior pla inferior  

cara…

eu to com algumas duvidas… primeiro, o length acho que nao funciona pra pegar o tamanho da matriz. Se nao me engano, java faz matrizes como vetores de vetores.

tentei dar um joptionpane.showmessagedialog (ele faz um popup na tela com alg informacao que se passe pra ele) e ele nao mostrou um numero, mas uma coisa bem doida, acho que ele pega o toString do objeto, entao nao retorna um numero.

tem um jeito facil de fazer o que vc quer, pegar o tamanho, mas eu acho melhor vc pegar a informacao que o usuario te passou, ele te informou isso logo no inicio do programa, ne? entao usa!

segundo no metodo que eu te mostrei pra trocar os triangulos de baixo e de cima :

o que eu mandei :

int temp = 0;
        for (int i = 1; i < TAMANNHO; i++) {
            for (int j = 0; j < TAMANNHO; j++) {

                if (i > j) { // Se i > j, to numa diagonal inferior
                    temp = mat[i][j];
                    mat[i][j] = mat[j][i];
                    mat[j][i] = temp;
                } else {
                    continue;
                }
            }
        }

o que vc colocou :

// troca triangular superior com triangular inferior  
    public int[][] trocatriangularsuperior(int[][] matriz) {  
        int[][] matrizAux = new int[dimensao][dimensao];  
        for (int linha = 0; linha < dimensao; linha++) {  
            for (int coluna = 0; coluna < dimensao; coluna++) {  
  
                if (linha > coluna) {// estou triangular inferior  
                    matrizAux = matriz[linha][coluna];  //erro   
                    matriz[linha][coluna] = matriz[coluna][linha];  
                    matriz[coluna][linha] = matrizAux;  
                }  
                else{  // realmente eu preciso desse else  ? e o continue?   
                      
                    continue;  
                }  
            }  
        }  
        return matrizAux;  
         EstruturaMatriz(matriz, dimensão, dimensão); // neste caso eu nao quero chamala aqui quero chamala na main principal   
    }  

vc pode me explicar por que vc trocou o meu inteiro “temp” por uma matriz??? tipo… vc ta tentando atribuir um INTEIRO matriz[linha][coluna] a uma matriz (matrizAux)
Assim realmente vai dar erro.

eu recomendo que vc de uma olhada nas alterações que vc fez e veja o que a dando erro, porque se a gnt mandou os codigos, a gente fez alguns testes unitarios (testes bem especificos) antes de te mandar. Se nao ta funcionando acho que é por causa de alterações pequenas assim… Nao tem como nao funcionar. Procura direitinho ai as coisa que vc alterou e arruma que funfa! vc tem que prestar atenção no que ta fazendo!

ah, o continue eu tinha explicado quando te mandei. se vc tivesse mais coisas pra baixo, o continue te ajuda, pq ja que nao tem nada mais pra fazer, nao precisa continuar nessa iteração do for. mas como nao tem nada, realmente ai nao precisa. Foi so uma dica, saca? resumindo, eu acho que ta tudo funcionando, sim. vc so precisa ver o que vc alterou e prestar atencao no que ta fazendo. lembre que em programação uma linha faz mt diferença;

tu mudasse algumas coisas e eu acho que nao prestou me atencao no que tava fazendo.

por exemplo, no metodo de trocar os triangulos de cima pelos de baixo, eu criei uma variavel INT e vc ta usando uma matriz INT[][].

ai vc usa essa matriz no lugar da variavel, indexando ela nao sei como… =/ ai nao rola, ne?

p length de uma matriz acho que nao sai assim como vc ta usando nao, posso ate estar enganado, mas coloquei aqui um JOptionPane.showMessageDialog e ele mostrou uma coisa bem doida.

tem um jeito de fazer isso, pra poder pegar o tamanho da matriz, mas se vc tem a informacao que o usuario deu, pra que isso? tem algum problema em usar direto o que o usuario passou?

ve ai direitinho essas alterações que vc fez e ve se ta batendo com o que foi estudado antes. blz? =)

eita, tinha dado um erro aqui no browser e eu pensei que nao tinha enviado a mensagem anterior

huahuhauhhuauhauhuahuhuaha foi mal! :shock:

Boa Noite, oliver!

Encontei vários equivocos teus e notei que você entendeu pouca coisa do que te explicamos e dos nosso exemplos.

Vamos iniciar pelo início:

  1. A primeira coisa estranha que identifico é que você logo de cara cria uma matriz no método main() e em seguida instancia a classe EstruturaMatriz, que por sua vez em seu construtor cria outra matriz, aí você já possui duas matrizes, coisa que não vejo necessidade.

Seguindo com o estudo do seu código vejo que você trabalha com a matriz criada no main(), porém usando os métodos da classe EstruturaMatriz, creio que você esteja confundido as coisas. Acho legal você dar uma revisada no código nesse instante antes de continuar com a implementação do mesmo.

Te adicionei no MSN, se for possível você ficar online seria mais rápido e dinâmico para tratarmos dos erros.

OBS.: Pessoal, quando forem fazer postagens seguidas, editem a postagem anterior, senão a moderação vai vir pegar no pé de vocês…

Abraço!

foi mal aê, como eu disse, nao sabia que tinha enviado a mensagem porque tinha dado um erro de conexão aqui…

Como eu disse, depois que vi que tinham uns erros no método que enviei, saquei que as modificações é que tinham bugado as coisas. Aí nem olhei mais nada. Mas se ele tem 2 matrizes, então uma ta sem usar. Eu pensei que a classe recebia uma matriz e ele tinha feito só pra poder ter uma classe tipo Utils pra poder manipular a matriz…

Mas aí realmente, tem uma matriz só voando, sem fazer nada…

Se vc prestar mais atenção, vai terminar o que precisa repidinho, oliver!

estou quase conseguindo,

consegui metodo inverter ou trocar a s triangulares agora falta o de trocar a 3 linha apenas com a nona coluna como disseram e meio estranho … bom estou caindo de sono.

valeu galeraaa abraços

esta dando um erro na hora de rodar a matriz
aqui na classe estrutura da matriz na hora que implementei isso naodeu nem um erro e nem na hora de chamar mais depois que digitei os valres da matriz imprimiu a matriz blz, so que na hora de mostrar os restantes dos processos deu erro eu nao entendi porque deu errro

// troca 3 linha com 9º coluna
	public static int[][] trocaComColuna(int[][] matr, int Tam) {
		int temp = 0;
		for (int coluna = 0; coluna < Tam; coluna++) {

			temp = matr[2][coluna];
			matr[2][coluna] = matr[coluna][8];// aqui ta dando erro nao entendi.
			matr[coluna][8] = temp;

		}
		/*
		 * for (int linha = 0; linha < Tam; linha++) { for (int coluna = 0;
		 * coluna < Tam; coluna++) { temp[][] = matriz[linha][coluna];// erro
		 */
		return matr;
	}
// imprime valores trocados da terceira linha com 9 coluna
		System.out.println("troca da linha pela coluna");
		estMatriz.imprimeMatriz(EstruturaMatriz.trocaComColuna(matriz,dimMatriz));// ta dando erro na hora de chamar aqui e la
		

nao deu nem um erro na compilação mais na hora de rodar deu erro na hora de chamar aqui na classe main

[quote=olivercld]esta dando um erro na hora de rodar a matriz
aqui na classe estrutura da matriz na hora que implementei isso naodeu nem um erro e nem na hora de chamar mais depois que digitei os valres da matriz imprimiu a matriz blz, so que na hora de mostrar os restantes dos processos deu erro eu nao entendi porque deu errro

// troca 3 linha com 9º coluna
	public static int[][] trocaComColuna(int[][] matr, int Tam) {
		int temp = 0;
		for (int coluna = 0; coluna < Tam; coluna++) {

			temp = matr[2][coluna];
			matr[2][coluna] = matr[coluna][8];// aqui ta dando erro nao entendi.
			matr[coluna][8] = temp;

		}
		/*
		 * for (int linha = 0; linha < Tam; linha++) { for (int coluna = 0;
		 * coluna < Tam; coluna++) { temp[][] = matriz[linha][coluna];// erro
		 */
		return matr;
	}
// imprime valores trocados da terceira linha com 9 coluna
		System.out.println("troca da linha pela coluna");
		estMatriz.imprimeMatriz(EstruturaMatriz.trocaComColuna(matriz,dimMatriz));// ta dando erro na hora de chamar aqui e la
		

nao deu nem um erro na compilação mais na hora de rodar deu erro na hora de chamar aqui na classe main[/quote]

olivercld, pelo visto você não corrigiu o que eu falei de estar com duas matrizes sem necessidade, os métodos da classe EstruturaMatriz não precisam receber uma matriz como argumento, afinal a matriz está sendo criada dentro da propria classe. Não to entendendo como você ta raciocinando, você ta fazendo muuuita coisa desnecessária. Já estou com o código pronto aqui, o código está criando a matriz, trocando diagonal secundária por primária, trocando linha por coluna e trocando triângulos.

A respeito da troca de linha n por coluna m (linha por coluna com índices diferentes), conversei com um amigo que estuda matemática sobre isso e ele confirmou que isso não é possível, pois gera erro em dois índices da matriz.

Se você quiser o código pronto é só falar que posto aqui.

Abraço!

codigo pra trocar a linha pela coluna, era so o que tava faltando fazer :

        int temp = -1;
        for (int i = 0; i < tamanho; i++) {
                temp = mat[2][i];
                mat[2][i] = mat[i][8];
                mat[i][8] = temp;
       }

eu acho que ja mandaram esse codigo, mas era so o que tava faltando e fiquei com vontade de fazer hehehe. da pra deixar parametrizado, pra nao ter que ser usado so por uma matriz 10x10, mas por qualquer uma.
no caso de falar com o cara da matematica, acho que o exercicio nao requer conhecimento matematico, é só pra estudar como mexer com matrizes, mesmo. entao nao tem problema se perder um valor, é só pra questao de estudo. nao precisa esquentar com isso.

todos os algoritmos tao ai, so que precisa ver ai o que tu ta fazendo, porque os erros gerados tao sendo causados pelas tuas modificações… =/

eu tava vendo essa coisa da matriz, realmente tu usa uma matriz na classe e uma no metodo principal. Entao a da classe fica sem ser usada.

[quote=gpmdf2]codigo pra trocar a linha pela coluna, era so o que tava faltando fazer :

        int temp = -1;
        for (int i = 0; i < tamanho; i++) {
                temp = mat[2][i];
                mat[2][i] = mat[i][8];
                mat[i][8] = temp;
       }

eu acho que ja mandaram esse codigo, mas era so o que tava faltando e fiquei com vontade de fazer hehehe. da pra deixar parametrizado, pra nao ter que ser usado so por uma matriz 10x10, mas por qualquer uma.
no caso de falar com o cara da matematica, acho que o exercicio nao requer conhecimento matematico, é só pra estudar como mexer com matrizes, mesmo. entao nao tem problema se perder um valor, é só pra questao de estudo. nao precisa esquentar com isso.

todos os algoritmos tao ai, so que precisa ver ai o que tu ta fazendo, porque os erros gerados tao sendo causados pelas tuas modificações… =/

eu tava vendo essa coisa da matriz, realmente tu usa uma matriz na classe e uma no metodo principal. Entao a da classe fica sem ser usada. [/quote]

Realmente, gpmdf2, não requer conhecimento matemático pois estamos trabalhando com raciocínio lógico, mas existe a possibilidade de fazer o algorítmo usando as propriedades matemáticas e se a prova real for feita com um algorítmo desse, com certeza todo resultado do olivercld vai estar errado. Essa é minha única preocupação.

Dia desses, encontrei um site que propoe problemas e os visitantes tem que resolver com um algorítmo, no final o site apresenta um código com raciocínio lógico e um outro com propriedades matemáticas sendo aplicadas, achei muito 10.

Abraço!

certo. mais me explica o uso do temp -1; ?? porque esta iniciando ele com - 1.

[list]
olivercld, pelo visto você não corrigiu o que eu falei de estar com duas matrizes sem necessidade, os métodos da classe EstruturaMatriz não precisam receber uma matriz como argumento, afinal a matriz está sendo criada dentro da propria classe.
[/list]

eu ja tirei so que quando eu tiro da erros…