Dimensionamento Dinâmico de Matrizes

12 respostas
L
Olá pessoal, sou novo aqui, preciso da ajuda de vocês, queria saber como posso pedir para que o usuário define o tamanho de uma matriz entrando com o número de linhas e números de colunas ex do código que tentei:

import java.util.Scanner;

public class Teste {
public static void main(String args[]){

Scanner input = new Scanner(System.in);

int l=0,c=0,ordem=0;

System.out.println("Digite as dimensões da matriz A(lxc): ");
l = input.nextInt();
System.out.println("x");
c = input.nextInt();
System.out.println("Matriz A"+l+"x"+c);
int ordem=(l*c);
double mat[][] = new double [l][c];

}
}

Quando executa ele me acusa erro…

Peço a ajuda de vocês.

Obrigado

12 Respostas

manolimars

note que voce declara duas vezes a variavel “ordem”:

int l=0,c=0,ordem=0; 

int ordem=(l*c);
Vini_Fernandes

Cara, veja as seguintes alteracoes:

import java.util.Scanner;
public class Matriz {


public static void main(String args[]){

Scanner input = new Scanner(System.in);

int l=0,c=0;

System.out.println("Digite as dimensões da matriz A(lxc): ");
System.out.println("Digite o numero de linhas: ");
l = input.nextInt();
System.out.println("Digite o numero de colunas: ");
c = input.nextInt();
System.out.println("Matriz A["+l+"]x["+c+"]");

double mat[][] = new double [l][c];


}
}

t+

L

Ok esqueçam da variável ordem na verdade esta errado mesmo consideremos o post acima do nosso amigo, o que falta para que esse código me permita redimensionar o tamanho da matriz de acordo com as linas e colunas digitadas pelo usuário???

Ele não executa aqui, alguns amigos me disseram que somente vou conseguir ver isso com Vector… o problema é que nunca sei Vector.

Preciso ver isso para um trabalho de matematica… detalhe que isso é só o começo depois vou me esforçar aqui para resolver o restante multiplicação de matrizes ,matriz inversa e etc.

Obrigado.

Vini_Fernandes

Cara, a classe Vector nao eh recomendada, portanto, use alguma classe que implemente a interface List, por exemplo, ArrayList. Com essa classe voce pode modelar um vetor com tamanho indefinido. Agora, matriz com dimensoes dinamicas eu nao sei como voce fará! Creio que voce tera que implementar a sua propria!

T+

L

Legal Vini Fernandes.

Como ficaria o código usando ArrayList?

na verdade é só isso mesmo que quero definir uma matriz em que o usuário define o tamanho dela,coisa boba e que eu não sei rsrs :lol:

Valew

Vini_Fernandes

Cara, dá uma olhada em um exemplo de matriz dinâmica que implementei. Não conheço outra forma…rsrs

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class MatrizDinamica<T> {
	private Map<Integer, List<T>> matriz;
	private Integer totalDeLinhas;
	private Integer totalDeColunas;
	
	public MatrizDinamica(Integer linhas, Integer colunas){
		
		this.redimensionar(linhas, colunas);		
	}
	
	public T getElemento(Integer linha, Integer coluna){
		return matriz.get(linha).get(coluna);
	}
	
	public void setElemento(Integer linha, Integer coluna, T valor){
		matriz.get(linha).add(coluna, valor);
	}
	
	public void redimensionar(Integer linhas, Integer colunas){
		this.totalDeLinhas = linhas;
		this.totalDeColunas = colunas;
		matriz = new HashMap<Integer, List<T>>();
		
		for(int k =0 ; k < linhas; k++){
			matriz.put(k, new ArrayList<T>(colunas));
		}
	}
	
	public List<T> pegarLinha(Integer linha){
		return matriz.get(linha);
	}
	
	public Integer getTotalDeLinhas(){
		return totalDeLinhas;
	}
	
	public Integer getTotalDeColunas(){
		return totalDeColunas;
	}
	
	public List<T> pegarColuna(Integer coluna){
		List<T> valoresDaColuna = new ArrayList<T>();
		for(int k =0; k < totalDeLinhas; k++){
			valoresDaColuna.add(matriz.get(k).get(coluna));
		}			
		
		return valoresDaColuna;
	} 
	
	public static void main(String [] args){
		//construindo uma matriz 2X2
		MatrizDinamica<Double> minhaMatriz = new MatrizDinamica<Double>(2, 2);
 
		minhaMatriz.setElemento(0, 0, 23.3);
		minhaMatriz.setElemento(0, 1, 222223.0);
		minhaMatriz.setElemento(1, 0, 5435435.3);
		minhaMatriz.setElemento(1, 1, 999993.3);
		
		System.out.println("Os valores da coluna sao: "+minhaMatriz.pegarColuna(1));
		System.out.println("Os valores da linha sao: "+minhaMatriz.pegarLinha(0));
		
		//redimensionando para 1X1
		minhaMatriz.redimensionar(1, 1);
		minhaMatriz.setElemento(0, 0, 333.33);
		minhaMatriz.setElemento(0, 1, 777.77);
		
		System.out.println("Os valores da coluna 1 sao: "+minhaMatriz.pegarColuna(0));
		System.out.println("Os valores da coluna 2 sao: "+minhaMatriz.pegarColuna(1));
		System.out.println("Os valores da linha 1 sao: "+minhaMatriz.pegarLinha(0));
		
	}
}

Faça uns testes.
T+

L

Ok vou estudar o seu código aqui, mas me pareceu complicado demais para o que eu estava querendo, deve ter algum jeito mais simples, vou tentar aqui caso não consiga te falo.

Valew pelas dicas.
abraço

Vini_Fernandes

cara, o codigo já possui uma estrutura, apenas nao tratei as exceptions. Creio que a partir da classe MatrizDinamica voce conseguira cominhar adiante. O que resta voce fazer sao os metodos:

public MatrizDinamica multiplicarMatriz(MatrizDinamica outraMatriz){
//retornar a matriz resultante da multiplicacao
}

public MatrizDinamica somarMatriz(MatrizDinamica outraMatriz){
//retornar a matriz resultante da soma
}

public T tracoDaMatriz(){
//retornar a soma dos elementos da Diagonal
}

E assim por diante!

T+

Vini_Fernandes

Uma coisa que me esqueci de dizer eh que voce vai ter que estudar a API Collection e Map, nao tem jeito!

DA uma olhada no metodo rtaco que fiz:

public Double tracoDaMatriz() {
		if(totalDeColunas == totalDeLinhas){
			Double traco = 0.0;
			for(int k = 0; k < totalDeLinhas; k++){
				traco += (Double) matriz.get(k).get(k);
			}
			return traco;
		}
		else {
			throw new RuntimeException("MatrizDinamica deve ser quadrada. Numero de linhas eh diferente do numero de colunas");
		}
	}

T+

L

Ok vou dar uma estudada, só não entendi no seu código onde é que o usuário entra com a dimensão linhas x colunas da matriz?

T+

Vini_Fernandes

Cara, todas as vezes que voce fizer:

//aqui o usuario cria uma matriz dinamica e define o numero de linha e de colunas
new MartizDinamica(linha, coluna);
alexandreclayton

Cara acho que é isso que você quer.

Aqui temos uma matriz 2x2 gerada Dinamicamente.

public Vector Teste = new Vector();

Teste.addElement(new java.lang.String[][] {

new java.lang.String[] { 1111, 2222 },  // Primeira linha

new java.lang.String[] { 3333, 4444 }   // Segunda Linha

});

Saida seria assim.

| 1111 | 2222 |
| 3333 | 4444 |

Criado 3 de novembro de 2009
Ultima resposta 7 de jan. de 2010
Respostas 12
Participantes 4