[Resolvido]Subtração da matriz so esta saindo valores zeros

Olá bom dia pessoal, bom estou tentando fazer mais nao acerto uma de cara aff, nao consegui entender porque a matriz esta saindo o resultado so zeros:
Codigo:

[code]package algoritmos;

import java.util.Random;

/**

  • inicializar duas matriz 4x4 do tipo inteiro, subtrair as duas e mostrar cada
  • uma delas e a resultanti
  • @author Administrador

*/

public class Matriz4x4Sub {

public static void main(String[] args) {
	int matA[][] = new int[4][4];
	int matB[][] = new int[4][4];
	int matC[][] = new int[4][4];
	int aux = 0;

	Random aleatorio = new Random();

	System.out.println("matA");
	for (int l = 0; l <= 3; l++) {// for para linha
		for (int c = 0; c <= 3; c++) {// for para coluna

			// le valores de 1 a 20 para amtriz
			matA[l][c] = aleatorio.nextInt(20) + 1;

			// imprime
			System.out.println(matA[l][c] + " ");

			// matA[l][c] = matA[l][c]- matA[l][c];

		}
	}
	System.out.println("\n ######## matB ########");
	for (int l = 0; l <= 3; l++) {// for para linha
		for (int c = 0; c <= 3; c++) {// for para coluna{

			// le valores de 1 a 10
			matB[l][c] = aleatorio.nextInt(20) + 1;
			// imprime matriz B
			System.out.println(matB[l][c] + " ");

		}
	}
	// System.out.println("\n #### Sub das Matriz #### ");
	for (int l = 0; l <= 3; l++) {// for para linha
		for (int c = 0; c <= 3; c++) {// for para coluna{

			matC[l][c] =  matB[l][c] - matB[l][c];

		}

	}
	// imprime
	System.out.println("\n #### Sub das Matriz #### ");
	for (int l = 0; l <= 3; l++) {// for para linha
		for (int c = 0; c <= 3; c++) {// for para coluna{
			// imprime a resultanti
			System.out.println(matC[l][c] + " ");
		}
	}

}

}
[/code]
saida:

[quote] #### Sub das Matriz ####
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 [/quote]

Ou seja, C = B - B = 0. Entendeu por que é que deu sempre zero?

(copy & paste, copy & paste, quantas vezes eu já disse aqui que copy & paste é só para quem presta muita, muita, muita atenção no que está fazendo?
Eu não presto muita atenção - sou muito distraído - portanto eu evito usar copy & paste, para evitar problemas.

cara
modifica suas linhas de codigos que tem essa parte
System.out.println(matA[l][c] + " ");

para

System.out.println(" "+matA[l][c]);

caramba que vergonha não percebi este minimo erro valeu obrigado entanglement, obrigado pela dica também Cleidson vou testar aqui e volto para marcar resolvido…valeu abraços

Relaxa ai mano e ver se estar certo!
Estamos todos aprendendo um com o outro e assim a vida continua!
precisar estamos ai!!

ok deu certo, obrigado entanglement e Cleidson.

so uma questão Cleidson isso que voçe disse:

[quote]cara
modifica suas linhas de codigos que tem essa parte
System.out.println(matA[l][c] + " ");

para

System.out.println(" "+matA[l][c]); [/quote]
e para por exemplo a matriz imprimir uma ao lado da outra? exemplo

não deu certo se foi essa a questao para ela imprimir uma ao lado da outra por linha e coluna, bom se nao poderia me explicar como que faz para a matriz ser imprimida uma ao lado da outra.
Obrigado!

para imprimir certinho sua matriz
seria adquado coloca-la entre os for’s
e junto ao comando de impressão
tipo

for(l=0;l>10;l++)
{
for(c=0;c>10;c++)
{
System.out.println(matA[l][c] + " ");
}
}

mas so corrija a parte da condição … e coloque o tamanho exato para que impressão saia correta!

[quote]para imprimir certinho sua matriz
seria adquado coloca-la entre os for’s
e junto ao comando de impressão
tipo

for(l=0;l>10;l++)
{
for(c=0;c>10;c++)
{
System.out.println(matA[l][c] + " ");
}
} [/quote]
a impressão das matriz ja esta entre fors, porque a linha e coluna tem que ser maior que 10, se é uma matriz 4x4.
foi testado sua dica nao deu certo mais valeu.

Olá, olivercld!

Mais uma de matriz hein…

Bom, dei uma reduzida no seu código, da uma olhada que talvez você poderá ver coisas interessantes, além de ver como organizar a Matriz usando os FORs.

Também deixei o código mais genérico, assim servindo não só para matrizes 4x4, como para qualquer outra matriz quadrada.

[code]/**

  • inicializar duas matriz 4x4 do tipo inteiro, subtrair as duas e mostrar cada
  • uma delas e a resultante
  • @author Administrador
    */
    import java.util.Random;

public class Matriz4x4Sub {
static int ord = 4; // Ordem da matriz
public static void main(String[] args) {
int matA[][] = new int[ord][ord];
int matB[][] = new int[ord][ord];
int matC[][] = new int[ord][ord];
Random aleatorio = new Random();

	for (int l = 0; l < ord; l++) { // for para linha
		for (int c = 0; c < ord; c++) { // for para coluna
			// Lê valores de 1 a 20 para as Matrizes
			matA[l][c] = aleatorio.nextInt(20) + 1;
			matB[l][c] = aleatorio.nextInt(20) + 1;
			// Subtração da Matriz A pela B
			matC[l][c] =  matA[l][c] - matB[l][c];
		}
	}
	System.out.println("\nMATRIZ A:");
	imprime(matA);
	System.out.println("\nMATRIZ B:");
	imprime(matB);
	System.out.println("\nDIFERENCA A - B:");
	imprime(matC);
}
public static void imprime(int mat[][]){
	for (int l = 0; l < ord; l++){  // for para linha
		for (int c = 0; c < ord; c++) { // for para coluna
			System.out.printf("%3s |", mat[l][c]);
		}
		System.out.println("");
	}
}

}[/code]Espero que te ajude, abraço!

Pois é mais uma matriz, nao se preocupe outras virao hehe, sao muitas as duvidas. Bom ajudou e muito Vingdel eu ate tentei fazer da forma que voçe explicou aqui, nao obtive exito, tentei ja dentro dos primeiro FORs tentar ler as duas matriz nao consegui, e tu fez ai a logo de inicio leu as duas matriz e logo abaixo ja fez a Subtração delas, reduziu e muito o codigo olha ótimo espero um dia mandar bem como voçê.
outras questão e vou comentar aqui caso eu esteja errado me corrija ok.
no codigo abaixo voçe criou os metodos que armazena cada matriz, estou certo:

System.out.println("\nMATRIZ A:"); imprime(matA); System.out.println("\nMATRIZ B:"); imprime(matB); System.out.println("\nDIFERENCA A - B:"); imprime(matC);

e aqui no metodo criado como static imprime voçê faz a impressao dos valores certo ?

public static void imprime(int mat[][]){ for (int l = 0; l < ord; l++){ // for para linha for (int c = 0; c < ord; c++) { // for para coluna

isso aqui que ficou meio confuso eu reescrevi seu codigo e a linha do System que tem o printf ela da um erro nao aceita o printf, eu poderia deixar System.out.print(" |"+ mat[l][c]); ?

System.out.printf("%3s |", mat[l][c]); //da erro no printf, %3s le caracteres o 3 no meio significa ate 3 casas
bom o restante entendido caso eu nao esteja errado.
Brother obrigado abraço.

Boa Noite, olivercld.

Vamos lá, tentar explicar:

public static void imprime(int mat[][]){ for (int l = 0; l < ord; l++){ // for para linha for (int c = 0; c < ord; c++) { // for para coluna System.out.printf("%3s |", mat[l][c]); } System.out.println(""); } }
No código acima está o método responsável por imprimir cada matriz, criei ele para não ficar repetindo código várias vezes. Esse código precisa ser chamado para funcionar e é isso que faço no código abaixo:

System.out.println("\nMATRIZ A:"); imprime(matA); System.out.println("\nMATRIZ B:"); imprime(matB); System.out.println("\nDIFERENCA A - B:"); imprime(matC);
No bloco acima, eu apenas chamo o método responsável por imprimir a Matriz, só se ele for chamado, que ele funciona, essa é a forma de usá-lo de fato, ele só precisa que seja passada a Matriz como argumento. Veja que o chamei 3 vezes, uma vez para cada Matriz (matA, matB e matC). Não é para armazenar a matriz não. A armazenagem das matrizes foi feita nessa parte do código:

for (int l = 0; l < ord; l++) { // for para linha for (int c = 0; c < ord; c++) { // for para coluna // Lê valores de 1 a 20 para as Matrizes matA[l][c] = aleatorio.nextInt(20) + 1; matB[l][c] = aleatorio.nextInt(20) + 1; // Subtração da Matriz A pela B matC[l][c] = matA[l][c] - matB[l][c]; } }

Agora quanto a printf, qual erro que está dando?
Aqui funciona normalmente, qual a versão do java instalado na tua máquina?

printf passou a existir no java a partir da versão 1.5.

Explicando:

System.out.printf("%3s |", mat[l][c]);

O %3s formata a string para comprimento igual a 3, mesmo que a variável tenha menos que 3, a string vai ser preenchida com espaços a esquerda, ou seja, o valor da variável vai se alinhar a direita.

Veja como ficou aqui:

Ótima explicação Vingdel.

O erro que esta acontecendo e a seguinte
[list] o metodo printf(String, object[]) no tipo PrintStream não é aplicavel aos argumentos (String,int)[/list].

essa menssagem acima e a que dá onde tem printf.

a versao do java que tenho e a 1.6.0.22

Valeu pela explicação.