Matriz

5 respostas
M

Oi,

Alguém me poderia indicar uma maneira de obter a soma de cada linha e de cada coluna de uma matriz em java? Sei que tenho que utilisar uma variavel auxiliar para a soma. Mas até agora só tou conseguindo percorrer e mostrar o conteudo da matriz....

Aqui vai o método mostrar:

public static void Mostrar()
	{
		for(int i = 0; i < M.length; i++)
		{
			for(int j = 0; j < M[i].length; j++)
			{
				
				System.out.print ("M[" +i+ "] [" +j+ "] = " +M[i][j] + " ");  
				System.out.println (); 
			}
		}
	}
Como expliquei em cima o que eu pretendo é obter para cada linha a soma de seus elementos, idem para cada coluna.

Alguém me poderia dar uma luz? :roll:

Obrigado

5 Respostas

M

Se você fizer um:

if(linha == 0) soma = M[i][j];
Você consegue somar a primeira linha da matriz.

Bom, aí ta a dica.

GabrielCardelli

Pensei em responder isso.
Mais imagina o cara ter que somar

30 linhas de uma matriz? poe ai os ifs.

Talvez você possa ao msm tempo que executa
Você vai somando e ao final de cada linha COM UM IF você zera a variavel

tpw (finalLine == ex.length());

Abc

M

Por isso eu disse que foi só uma dica. :slight_smile:

Lavieri

conciderando o tamanho de "j" uma constante em uma matriz[i][j], vc pode fazer

int[] somaI = new int[matriz.length];
int[] somaJ = new int[matriz[0].length];

for (int i = 0; i < matriz.length; i++) {
   for(int j = 0; i < matriz.length; j++) {
      somaI[i] += matriz[i][j];
      somaJ[j] += matriz[i][j];
   }
}

for (int i = 0; i < somaI.length; i++)
    System.out.println("Soma da linha " + i + ": " + soma[i]);

for (int j = 0; j < somaJ.length; j++)
    System.out.println("Soma da coluna " + j + ": " + soma[j]);

caso a quantidade de linhas colunas seja variável de uma linha pra outra, vc poderá usar Collection, ou usar a rotina abaixo para encontrar o numero maximo de colunas da matriz

int jLength
for (int i = 0; i < matriz.length;i++)
   jLength = matriz[i].length > jLength ? matriz[i].length : jLength;

int[] somaI = new int[matriz.length];
int[] somaJ = new int[jLength];

//... o restante do código permaneceria igual
Gerson_da_S_Lima

dá uma olhada nessa classe que eu fiz, tem várias operações entre matrizes.

/**@author Gerson da Silva Lima
 * e-mail: [email removido]
 * */

public class Matriz {

	//Tipo matriz
	private int matriz[][];
	
	//Contrutor que cria uma matriz com x colunas e y linhas,
	//com valor 0 para cada posição;
	public Matriz(int cols, int rows) {
		this.matriz = new int[cols][rows];
	}
	
	//Contrutor que cria uma matriz a partir de uma outra passada
	//como parâmetro
	public Matriz(int matriz[][]) {
		this.matriz = matriz;
	}
	
	
	//Método que recebe uma matriz como parâmetro, soma com a matriz que o chamou
	//e retorna uma matriz resultado
	public Matriz soma(Matriz m) {
		if(verificaSomaSubtracao(m)) {
			Matriz resultado = new Matriz(this.matriz.length, this.matriz[0].length);
			
			for(int l = 0; l < this.matriz.length; l++) {
				for(int c = 0; c < this.matriz[0].length; c++) {
					resultado.matriz[l][c] = this.matriz[l][c] + m.matriz[l][c];
				}
			}
			return resultado;
		} else {
			System.out.println("Imposível fazer operação entre as matrizes!");
			return null;
		}
	}
	
	//Método que recebe uma matriz como parâmetro, subtrai com a matriz que o chamou
	//e retorna uma matriz resultado
	public Matriz subtrai(Matriz m) {
		if(verificaSomaSubtracao(m)) {
			Matriz resultado = new Matriz(this.matriz.length, this.matriz[0].length);
			
			for(int l = 0; l < this.matriz.length; l++) {
				for(int c = 0; c < this.matriz[0].length; c++) {
					resultado.matriz[l][c] = this.matriz[l][c] - m.matriz[l][c];
				}
			}
			return resultado;
		} else {
			System.out.println("Imposível fazer operação entre as matrizes!");
			return null;
		}
	}
	
	//Método que recebe uma matriz como parâmetro, multiplica com a matriz que o chamou
	//e retorna uma matriz resultado
	public Matriz multiplicaPorOutraMatriz(Matriz m) {
		if(verificarMultiplicacao(m)) {
			Matriz resultado = new Matriz(this.matriz.length, m.matriz[0].length);
			for(int lr = 0; lr < this.matriz.length; lr++) {
				for(int lc = 0; lc < this.matriz.length; lc++) {
					for(int c = 0; c < this.matriz[0].length; c++) {
						resultado.matriz[lc][lr] += (this.matriz[lc][c] * m.matriz[c][lr]);
					}
				}
			}
			return resultado;
		} else {
			System.out.println("Imposível fazer operação entre as matrizes!");
			return null;
		} 
	}
	
	//Método que recebe um escalar como parâmetro e multiplica-o com a matriz que o chamou
	//e retorna uma matriz resultado
	public Matriz multiplicaPorEscalar(int escalar) {
		Matriz resultado = new Matriz(this.matriz.length, this.matriz[0].length);
		for(int l = 0; l < this.matriz.length; l++) {
			for(int c = 0; c < this.matriz[0].length; c++) {
				resultado.matriz[l][c] = this.matriz[l][c] * escalar;
			}
		}
		return resultado;
	}
	
	//Verifica se é possível fazer soma e subtração
	public boolean verificaSomaSubtracao(Matriz m) {
		return this.matriz.length == m.matriz.length && this.matriz[0].length == m.matriz[0].length;
	}
	
	//Verifica se é possível fazer multiplicação
	public boolean verificarMultiplicacao(Matriz m) {
		return this.matriz.length == m.matriz[0].length && this.matriz[0].length == m.matriz.length;
	}
	
	//método que imprime a matriz
	public void imprime() {
		for(int l = 0; l < this.matriz.length; l++) {
			for(int c = 0; c < this.matriz[0].length; c++) {
				System.out.print(this.matriz[l][c] + "\t");
			}
			System.out.println();
		}
		System.out.print("\n\n");
	}
	
	public static void main(String[] args) {
		
		//Inteiro escalar
		int escalar = 3;

		//Matrizes com três linhas e três colunas
		Matriz mat1 = new Matriz(new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
		Matriz mat2 = new Matriz(new int[][]{{9, 8, 7}, {6, 5, 4}, {3, 2, 1}});
		
		//Matrizes 3x2 e 2x3
		Matriz mat3 = new Matriz(new int[][]{{1, 2, 3}, {4, 5, 6}});
		Matriz mat4 = new Matriz(new int[][]{{1, 2}, {4, 5}, {7, 8}});
		
		//Teste de Soma
		System.out.println("Matriz 1:");
		mat1.imprime();
		System.out.println("Matriz 2:");
		mat2.imprime();
		System.out.println("Matriz 1 + Matriz 2");
		mat1.soma(mat2).imprime();
		
		//Teste de Subtração
		System.out.println("Matriz 1:");
		mat1.imprime();
		System.out.println("Matriz 2:");
		mat2.imprime();
		System.out.println("Matriz 1 - Matriz 2");
		mat1.subtrai(mat2).imprime();
		
		//Teste de Multiplicação
		System.out.println("Matriz 3:");
		mat3.imprime();
		System.out.println("Matriz 4:");
		mat4.imprime();
		System.out.println("Matriz 3 x Matriz 4");
		mat3.multiplicaPorOutraMatriz(mat4).imprime();

		//Teste de Multiplicação por um escalar
		System.out.println("Matriz 1:");
		mat1.imprime();
		System.out.println("Escalar: " + escalar);
		System.out.println("Matriz 1 x " + escalar);
		mat1.multiplicaPorEscalar(escalar).imprime();
		
		System.out.println("Matriz 3:");
		mat3.imprime();
		System.out.println("Escalar: " + escalar);
		System.out.println("Matriz 3 x " + escalar);
		mat3.multiplicaPorEscalar(escalar).imprime();
	}
}
Criado 4 de abril de 2009
Ultima resposta 5 de abr. de 2009
Respostas 5
Participantes 5