Problema com .length em matriz [resolvido]

Bem, estou fazendo um exercício ao qual eu necessito fazer a determinante de uma matriz, seja ela 2x2 ou 99x99.
Fiz o algoritmo, porem o professor não quer me deixar usar o .length para achar o tamnho da matriz

[code]public class Exercicio8 {
// Encontrando a determinante
public static double determinant(double[][] matriz) {
double result = 0;

	if (matriz.length == 1) {
		result = matriz[0][0];
		return result;
	}

	if (matriz.length == 2) {
		result = matriz[0][0] * matriz[1][1] - matriz[0][1] * matriz[1][0];
		return result;
	}

	for (int i = 0; i < matriz[0].length; i++) {
		double temp[][] = new double[matriz.length - 1][matriz[0].length - 1];

		for (int j = 1; j < matriz.length; j++) {
			for (int k = 0; k < matriz[0].length; k++) {

				if (k < i) {
					temp[j - 1][k] = matriz[j][k];
				} else if (k > i) {
					temp[j - 1][k - 1] = matriz[j][k];
				}

			}
		}

		result += matriz[0][i] * Math.pow(-1, (double) i)
				* determinant(temp);
	}
	return result;
}[/code]

Quando altero o matriz.length e o matriz[0].length por ordem, ele da java.lang.ArrayIndexOutOfBoundsException:.

[code]public class Exercicio8 {
// Encontrando a determinante
public static double determinant(double[][] matriz, int ordem) {
double result = 0;

	if (ordem == 1) {
		result = matriz[0][0];
		return result;
	}

	if (ordem == 2) {
		result = matriz[0][0] * matriz[1][1] - matriz[0][1] * matriz[1][0];
		return result;
	}

	for (int i = 0; i < ordem; i++) {
		double temp[][] = new double[ordem - 1][ordem - 1];

		for (int j = 1; j < ordem; j++) {
			for (int k = 0; k < ordem; k++) {

				if (k < i) {
					temp[j - 1][k] = matriz[j][k];
				} else if (k > i) {
					temp[j - 1][k - 1] = matriz[j][k];
				}

			}
		}

		result += matriz[0][i] * Math.pow(-1, (double) i)
				* determinant(temp, ordem);
	}
	return result;[/code]

Não consigo entender o por que, se alguém puder me ajudar eu agradeço.

Olá,
o problema ocorre porque matriz.length é para saber a quantidade de linhas, mas matriz[0].length é para colunas. A seguir tem um código de exemplo:

public class Test { public Test(){ double matriz[][] = new double[2][3]; System.out.println("matriz.length = "+matriz.length); System.out.println("matriz[0].length = "+matriz[0].length); } public static void main(String[] args) { new Test(); } }

Att.

me corrijam se eu estiver errado

você cria sua matriz antes para enviar como parâmetro né?

se sim, o usuário deve infonar a tamanho da matriz, eu acho?

se garanta que o valor enviado por parâmetro é o mesmo valor que o usuário informou para criar a matriz

se não for assim a aplicação posta todo o código (principalmente o que chama o método determinant)

até mais!

Adelar, eu sei que o matriz.length é a linha e o matriz[0].length é a coluna, só que os dois são iguais(estou fazendo simplesmente com uma matriz quadrada) só que mesmo assim a ordem nao funciona, somente com o matriz.length e matriz [0].length.

InSeOfKn, Sim. O programa pergunta a ordem da matriz para o usuário, logo depois faz os for necessários para o usuário informar o número que ele quer para cada linhaXcoluna…
Os dois sao passados por parâmetro para o método que postei.

[quote=Pinhorox]

InSeOfKn, Sim. O programa pergunta a ordem da matriz para o usuário, logo depois faz os for necessários para o usuário informar o número que ele quer para cada linhaXcoluna…
Os dois sao passados por parâmetro para o método que postei.[/quote]

estranho!
mais para tirar a duvida faz um teste ai coloca isso no inicio do método determinant:

System.out.println("matriz.length = "+matriz.length+" ordem = "+ordem+"matriz.length[0] = "+matriz.length[0]);  

só para ter 100% de certeza que sai tudo igual, OK!

até!

Obrigado InSeOfKn,
Com isso pude ver que na hora do determinant(temp, ordem) eles mostrou que estava entrando o valor original, soh que o tamanho da matriz diminuia 1, por isso explodia o array… com isso adicionei o -1 dps do ordem e funcionou. Obrigado.

[code]# result += matriz[0][i] * Math.pow(-1, (double) i)

* determinant(temp, ordem); [/code]

para

[code]# result += matriz[0][i] * Math.pow(-1, (double) i)

* determinant(temp, ordem-1); [/code]

Ok, estamos aqui para isso
qualquer duvida é só postar!

até