2016-04-23 7 views
0

Ich möchte den Zeilensummendurchschnitt herausfinden, aber wenn Null in der Zeile erscheint, dann sollte diese bestimmte Spalte übrig bleiben, wenn der Durchschnitt der Zeile erledigt ist. lass es klarer sein. Ich habe eine Matrix sagenZeilensummendurchschnitt: Elemente scheinen im Vergleich 0 zu sein

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 

Reihensumme Durchschnitt für die erste Zeile sollte 16/4 statt 16/5 sein, weil wir Zeile 1, Spalte 5 nach links, da es Wert „0“

enthält ich versuche folgender Code für die erste Reihe funktioniert es gut, aber für den Rest jede Reihe 2-5 und jede Spalte 5 lässt den Wert, obwohl es nicht Null ist.

mein Code:

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]); 

    } 

Ausgabe des Programms i erhalten ist:

 sums of the columns 
    4.0 
    3.0 
    4.75 
    4.0 
    3.5 

i die Ausgabe wollen als:

 4.0 
     2.4 
     3.8 
     3.2 
     2.8 

bitte leite mich, wo ich tue falsch

+0

finden mit In jeder Zeile deines Arrays suchst du immer nach 'hostMatrix [j] == 0 'in der' if'-Bedingung und wenn 'j = 4', natürlich 'hostMatrix [4] == 0' in deinem Array . Sie können die Antwort von 'nhouser9' unten versuchen, um zu reparieren, oder einfach' if (hostMatrix [j] == 0) 'zu' if (hostMatrix [i * cols + j] == 0) 'zu ändern. –

Antwort

0

Der folgende Code sollte das beheben. Das Problem war, dass Ihre innere Schleife nicht korrekt iterierte. Ich änderte es, um an die richtige Stelle im Array zu indizieren. Lass mich wissen ob es funktioniert!

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

Ihre if(hostmatrix[j]==0) Prüfung berücksichtigt die Zeile nicht. Daher ist es jedes Mal, wenn es in der fünften Spalte ankommt, in der ersten Reihe und sieht eine Null.

+0

Ich versuchte http://StackOverflow.com/Questions/5269183/how-to-compare-integer-mit-integer-array, aber es funktioniert nicht in meinem Fall – user3804161

0

Bearbeiten Sie die folgende Zeile ein:

if(hostMatrix[j]==0) 

es sein sollte:

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

also, dass sie nicht in der ersten Reihe bleibt und immer eine 0

+0

Er verwendet eine Ein-Demenz-Array. Korrigiere die 'if' Bedingung:' if (hostMatrix [i * cols + j] == 0) ' –

+0

@dang Khowa ..du hast mein Problem gelöst..danx – user3804161