Ir ao conteúdo

Matrizes iguais >(


Gustavo MPO

Posts recomendados

Postado

Bom pessoal, estou fazendo um algorítmo aqui e me deparei com um problema que até agora não achei solução.

Preciso fazer alterações nas células de uma matriz as quais dependem do conteúdo de outras células, ou seja, as alterações tem de serem feitas ao mesmo tempo.

Para isso, criei uma matriz "temporária" para armazenar as alterações e quando terminado, faço a cópia para a matriz original.

char matrizTemp[][] = matrizOriginal;

O problema é que assim que a matriz temporária é alterada, imediatamente a matrizOriginal também é (acompanhei pelo debug e é exatamente na mesma instrução)

Algo como:

public static int alteracaoMatriz(char[][] matriz, int x, int y){
matrizTemp[x][y] = 'a';
}

Como vêem, essa alteração é feita em uma função separada, onde a matrizOriginal[][] nem é lida, pois pertence ao método Main.

No inicio pensei que estivesse copiando a matriz temporaria para a original antes de acabar o loop, assim a original também se modificaria, mas essa instrução é a última do código, além de que, como havia dito, pelo debug a alteração de ambas matrizes ocorre na linha descrita acima.

Alguém tem uma ideia do que pode ser?

Obrigado

  • mês depois...
Postado
Bom pessoal, estou fazendo um algorítmo aqui e me deparei com um problema que até agora não achei solução.

Preciso fazer alterações nas células de uma matriz as quais dependem do conteúdo de outras células, ou seja, as alterações tem de serem feitas ao mesmo tempo.

Para isso, criei uma matriz "temporária" para armazenar as alterações e quando terminado, faço a cópia para a matriz original.

char matrizTemp[][] = matrizOriginal;

O problema é que assim que a matriz temporária é alterada, imediatamente a matrizOriginal também é (acompanhei pelo debug e é exatamente na mesma instrução)

Algo como:

public static int alteracaoMatriz(char[][] matriz, int x, int y){
matrizTemp[x][y] = 'a';
}

Como vêem, essa alteração é feita em uma função separada, onde a matrizOriginal[][] nem é lida, pois pertence ao método Main.

No inicio pensei que estivesse copiando a matriz temporaria para a original antes de acabar o loop, assim a original também se modificaria, mas essa instrução é a última do código, além de que, como havia dito, pelo debug a alteração de ambas matrizes ocorre na linha descrita acima.

Alguém tem uma ideia do que pode ser?

Obrigado

Manuuuu isto acontece por q os arrays são variáveis do tipo Reference .

Pelo o que eu entendi para você fazer o que você deseja c vai ter que usar 2 arrays....

abraços

Postado

Nessa parte você tá pegando a referência da matriz, como disse o vix.

char matrizTemp[][] = matrizOriginal;

Você não tá criando uma cópia dela, tá apenas criando um link entre as duas. Acho que o jeito é passar os dados na força bruta, com um for.

Cria uma funçãozinha simples, tipo:


void copiarMatriz(matriz &A, matriz & {
for(x=0 ...)
for(y=0 ...) {
A[x][y] = B[x][y];
...
}
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!