Ajuda sobre vetores JAVA

2 respostas
java
G

Estou implementando uma rede hopfield. Tenho 3 vetores unidimensionais e uma matriz:

int[] a = new int[4];
 int[] b = new int[4];
 int[] c = new int[4];
 int[][] matriz = new int[4][4];

Gostaria de multiplicar elementos seguindo a regra e lançar os valores encontrados na matriz, fiz da seguinte forma:

int[] a = new int[4];
    int[] b = new int[4];
    int[] c = new int[4];
    int[][] matriz = new int[4][4]; 
    
    matriz[0][0] = 0;
    matriz[1][1] = 0;
    matriz[2][2] = 0;
    matriz[3][3] = 0;        
    
    matriz[0][1] = a[0] * a[1] + b[0] * b[1] + c[0] * c[1];
    matriz[0][2] = a[0] * a[2] + b[0] * b[2] + c[0] * c[2];
    matriz[0][3] = a[0] * a[3] + b[0] * b[3] + c[0] * c[3];
    
    matriz[1][0] = matriz[0][1];
    matriz[1][2] = a[1] * a[2] + b[1] * b[2] + c[1] * c[2];
    matriz[1][3] = a[1] * a[3] + b[1] * b[3] + c[1] * c[3];
    
    matriz[2][0] = matriz[0][2];
    matriz[2][1] = matriz[1][2];
    matriz[2][3] = a[2] * a[3] + b[2] * b[3] + c[2] * c[3];
    
    matriz[3][0] = matriz[0][3];
    matriz[3][1] = matriz[1][3];
    matriz[3][2] = matriz[2][3];

O código está muito extenso, existe alguma forma de fazer essa multiplicação de forma mais simples, talvez usando variaveis e diminuindo o código?

2 Respostas

peczenyj

isso é o mesmo que

for(int i = 0; i< 3; i++){
   matriz[0][i] = a[0] * a[i] + b[0] * b[i] + c[0] * c[i];
}

e isso parece ser

o mesmo que isso

for(int j = 0; j< 3; j++){
   matriz[j][3] = a[j] * a[3] + b[j] * b[3] + c[j] * c[3];
}

assim talvez

for(int j = 0; j< 3; j++){
   for(int i = 0; i< 3; i++){
      matriz[j][i] = a[j] * a[i] + b[j] * b[i] + c[j] * c[i];
   }
}

porem isso não é exatamente o que vc quer. mas o caminho com certeza sera um duplo loop.

aresmaverick

Acho que daria pra fazer algo mais ou menos assim:

for (int j = 0; j < 4; j++) {
    for (int i = 0; i < 4; i++) {
        if (i == j) {
            matriz[j][i] = 0;
        } else if (i < j) {
            matriz[j][i] = a[j] * a[i] + b[j] * b[i] + c[j] * c[i];
        } else if (j > i) {
            matriz[j][i] = matriz[i][j];
        }
    }
}
Criado 19 de setembro de 2016
Ultima resposta 19 de set. de 2016
Respostas 2
Participantes 3