Olá,
Tenho que implementar uma aplicação que faz operações de álgebra tensorial e estou tendo alguns problemas. Basicamente o que acontece é o seguinte:
A operação de produto tensorial, por exemplo, recebe como entrada duas matrizes e produz como resultado uma nova matriz com dimensões que sao a soma das dimensões das matrizes anteriores. Por exemplo:
entrada: a[][] , b[][] - Saída c[][][][]
ou
entrada: a[][][][], b[][] - Saída c[][][][][][]
A minha questão é: se eu criar o meu método como :
public double pTensorial (double a, double b)
e “a” e “b” forem matrizes (a[][] e b[][]), ele vai aceitar ou vai dar problema? peço isso porque não sei qual o número de dimensões das matrizes que o usuário vai passar como parâmetro e seria inviável fazer um método diferente para cada combinação de dimensões de matrizes.
Peço que notem que eu sou muito novato em programação em geral e ainda mais em java. Mas foi isso que o meu professor do mestrado pediu que fizéssemos então não tenho escolha. Espero também ter sido claro o suficiente.
Eu não posso definir o método dessa maneira porque fazendo assim o método ficaria restrito a vetores de apenas duas dimensões. Existem casos (e são muito comuns) em que o usuário irá passar como parâmetro arrays com mais dimensões, por exemplo a[][][] e b[][][], e isso resultaria em um array final de 6 dimensões, requerendo que o tipo de retorno do método fosse alterado também.
[quote=pmlm]Dinâmico, eu diria para tentares usar List.
[/quote]
Acho que o dinamismo do List não serviria para esse problema. Ele resolve quando o tamanho do array é dinâmico, mas não quando o número de dimensões é dinâmico.
Para simular um array de duas dimensões, por exemplo, teria que usar List<List>, para array de 3 dimensões, List<List<List>> e assim por diante…
Bom, resolvi o problema de uma maneira mais simples e que não tem nada a ver com a programação em si, mas com o meu entendimento do problema.
Sempre me pergunto quando algo fica muito complicado se é mesmo complicado ou se sou eu que estou fazendo de maneira errada hehe. Agradeço as respostas de todos.
Porém ainda tenho uma dúvida:
Nessa aplicação que estou desenvolvendo, o método de entrada dos dados será um arquivo de texto com várias matrizes contendo valores double. Porém, o número de matrizes não é fixo. Um arquivo pode conter tanto 2 matrizes quanto 100 por exemplo e gostaria que cada uma delas fosse armazenada em uma variável diferente.
Como faço isso se não sei quantas matrizes o usuário terá em seu arquivo de texto? Devo criar um número de variáveis reserva e torcer pra que o número de matrizes não ultrapasse esse número ou existe alguma maneira de alocar variáveis dinamicamente conforme o número de matrizes que forem lidas?
Nesse caso, você pode usar a List ou outra Collection.
Não sei como você está pegando os valores e jogando em uma matriz, mas digamos que vc esteja usando uma classe chamada Matriz
Então, você cria uma lista de matrizes:
List<Matriz> matrizes = new ArrayList<Matriz>();
Cada vez que você preencher os valores dee uma matriz, você pode colocá-la na lista:
List<Matriz> matrizes = new ArrayList<Matriz>();
while(temMatriz){
Matriz matriz = new Matriz();
//preenche a matriz da forma que quiser
matrizes.add(matriz)
}