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] + " ");
}
}
}
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.
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
[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!
[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.
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("");
}
}
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:
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.
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.
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].