2016-04-23 1 views
0

Je souhaite connaître la moyenne de la somme des lignes, mais dans le cas où zéro apparaît dans la ligne, cette colonne particulière doit être laissée lorsque la moyenne de la ligne est terminée. que ce soit plus clair. J'ai une matrice direMoyenne de la somme des lignes: Les éléments semblent être zéro par comparaison

5 3 4 4 0 
3 1 2 3 3 
4 3 4 3 5 
3 3 1 5 4 
1 5 5 2 1 

somme moyenne de ligne pour la première ligne doit être 16/4 au lieu de 16/5 parce que nous avons quitté la ligne 1 colonne 5 car il contient « 0 » valeur

je suis en train code suivant. pour la première rangée, il fonctionne bien, mais pour le reste chaque rangée 2-5 et chaque colonne 5 laisse sa valeur bien que ce ne soit pas zéro.

mon code est:

int rows = 5; 
    int cols = 5; 
    float hostMatrix[] = createExampleMatrix(rows, cols); 

    System.out.println("Input matrix:"); 
    System.out.println(createString2D(hostMatrix, rows, cols)); 
    float sums[] = new float[rows]; 
    for(int i=0;i<rows;i++){ 
     float sum = 0,counter=0; 
     for(int j=0;j<cols;j++){ 
      if(hostMatrix[j]==0){ 
       sum += hostMatrix[i * cols + j]; 
      } 
      else 
    { 
       sum += hostMatrix[i * cols + j]; 
       counter++; 
      } 
     } 
     sum=sum/counter; 
    sums[i] = sum; 
    } 
    System.out.println("sums of the columns "); 
    for(int i=0;i<rows;i++){ 

      System.out.println(" "+sums[i]); 

    } 

sortie du programme que je reçois est:

 sums of the columns 
    4.0 
    3.0 
    4.75 
    4.0 
    3.5 

je veux la sortie comme:

 4.0 
     2.4 
     3.8 
     3.2 
     2.8 

s'il vous plaît me conduiras où je fais faux

+0

Avec chaque rangée de votre tableau, vous vérifiez toujours 'hostMatrix [j] == 0' dans la condition' if', et quand 'j = 4', bien sûr' hostMatrix [4] == 0' dans votre tableau . Vous pouvez essayer la réponse de 'nhouser9' ci-dessous pour corriger, ou simplement changer' if (hostMatrix [j] == 0) 'en' if (hostMatrix [i * cols + j] == 0) '. –

Répondre

0

Le code ci-dessous devrait résoudre ce problème. Le problème était que votre boucle interne ne fonctionnait pas correctement. Je l'ai changé pour indexer dans le bon endroit dans le tableau. Laissez-moi savoir si cela fonctionne!

int rows = 5; 
int cols = 5; 
float hostMatrix[] = createExampleMatrix(rows, cols); 

System.out.println("Input matrix:"); 
System.out.println(createString2D(hostMatrix, rows, cols)); 
float sums[] = new float[rows]; 
for(int i=0; i<rows; i++){ 
    float sum = 0,counter=0; 
    for(int j=0; j<cols; j++){ 

     //the problem was here 
     if(hostMatrix[i * cols + j] != 0){ 
      sum += hostMatrix[i * cols + j]; 
      counter++; 
     } 
    } 
    sum=sum/counter; 
    sums[i] = sum; 
} 

System.out.println("sums of the columns "); 
for(int i=0;i<rows;i++){ 
     System.out.println(" "+sums[i]); 
} 
0

Votre if(hostmatrix[j]==0) vérifier ne prend pas en compte la ligne. Par conséquent, chaque fois qu'il arrive à la 5e colonne, il est à la première rangée et il voit un zéro.

+0

j'ai essayé http://stackoverflow.com/questions/5269183/how-to-compare-integer-with-integer-array mais son ne fonctionne pas dans mon cas – user3804161

0

Modifier la ligne suivante:

if(hostMatrix[j]==0) 

Il devrait être:

if(hostMatrix[i][j]==0) 

Alors qu'il ne reste pas sur la première ligne et toujours trouver un 0.

+0

Il utilise un tableau de one-demension. Corrigez la condition 'if':' if (hostMatrix [i * cols + j] == 0) ' –

+0

@dang Khowa ..vous avez résolu mon problème..thanx – user3804161