Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen

Moin Leute,

ich bin ein Anfänger in Java und beim Bewältigen der Array-Probleme komme ich leider durcheinander und ich wäre für jeden Tipp sehr dankbar. 🙂
Ich möchte eine Methode schreiben, die bei einem gegebenen Array jede Zeile einzeln aufsummiert und daraus den Durchschnitt berechnet.
(Mit der For-Schleife die Summe zu bilden und Durchschnitt zu berechnen, kriege ich hin, was aber mit einem enormen Schreibaufwand verbunden ist. )

Java:
       public class Average{
               public static void main(String[] args){
                      int[][]  array  = {{1,2,3,6,8,11},
                                        {2,5,8,11,5,4},
                                        {3,4,7,6,6,4,8},
                                        };
                     System.out.println("Summe= "+sum(t, 0 );
                     System.out.println("Durchschnitt= "+durchschnitt(sum(t,0),a[0].length);
              }
              public static durchschnitt(int summe, a[].length){
                      int avg=summe/a[].length;
              return avg;
              }
              public static int sum(int a[][], int zeilenIndex ){
                       int summe=0;
              for(int i=0; i<a.[zeilenIndex]length; i++){
              summe= summe + a[zeilenIndex][i];
              }   
              return summe;
              }
        }
 
Hey,
mal so vorab - dein Code ist schwer zu lesen weil die Formatierung nicht so der Bringer ist.
Denk da das nächstes mal bitte dran 🙂
Was du machen willst, hast du quasi schon implementiert. Du musst dir nur etwas anderes ausgeben lassen.

Nehmen wir uns mal deine for-Schleife für die Summe zur Hand.

Java:
for(int i = 0; i < array.length; i++)
{
    for(int j = 0; j < array[i].length; j++)
    {
         summe += array[i][j];
    }
}
System.out.println(summe);

Das würde dir, wie du schon Richtig gemacht hast, die Summe des kompletten Arrays ausgeben.
Du willst, dass er dir die Summe nach jeder Zeile ausgibt. Eine Zeile endet nach der inneren for-Schleife, also hier:
Java:
for(....)
{
    for(...)
    {
  
    }
    // hier ist die i. Zeile zu ende.
}

Was du also brauchst, ist eine Variable deren Wert am Anfang einer neuen Zeile auf 0 gesetzt, in der inneren for-Schleife aufsummiert und am Ende einer Zeile ausgegeben wird.
Dein Pseudocode sieht also so aus:
Java:
FOR(i = 0; i < array.length; i++)
{
      temp = 0;
     FOR(j = 0; j < array[i].length; j++)
     {
          temp += array[i][j];
     }
     OUT: temp;
}

Für die Spalten funktioniert das genauso. (Mann muss nur ein bisschen drüber nachdenken.)

Ich würde dir einfach mal zeigen wie man ein Array Spaltenweise ausgibt (Voraussetzung für den Lösungsansatz ist, dass jede Zeile die selbe Anzahl an Elementen besitzt)

Java:
for(int j = 0; j < array[0].length; j++)
{
    for(int i = 0; i < array.length; i++)
    {
        System.out.print(array[i][j] + " ");
    }
System.out.println();
}

Da kannst du ja mal selbst probieren, die Summe / den Durchschnitt zu errechnen 🙂
 
Ich danke dir , Robat, für deine Antwort. 🙂 Es tut mir leid für die Formatierung, dabei habe ich mir wirklich viel Mühe gegeben, den Code einigermaßen verständlicher zu formatieren 🙁. Danke für deine Tipps, ich werde jetzt versuchen, den Code mit deinen Tipps (Hilfsvariable temp) zum Gang zu bringen.

Schöne Grüße
 
Danke für den Hinweis, JStein, t=array.
Java:
public class Average{
               public static void main([] args){
                     int[][] array  ={{1,2,3,6,8,11},
                                       {2,5,8,11,5,4},
                                       {3,4,7,6,6,4,8},
                                       };
                 System.out.println("Summe= "+sum(array, 0);
                 System.out.println("Durchschnitt= "+durchschnitt(sum(array,0),a[0].length);
               }

Die Gedanke war es, 2 Methoden zu schreiben, mit denen ich bei der Ausgabe in "main" die gewünschte Zeile aufsummieren und den Durchschnitt ausgeben kann.
Java:
public class Average{
               public static void main([] args){
                     int[][] array  ={{1,2,3,6,8,11},
                                       {2,5,8,11,5,4},
                                       {3,4,7,6,6,4,8},
                                       };
                    System.out.println("Summe= "+sum(array, 0);  // Methode sum(mein int array, gewünschte Zeile zum aufsummieren )
                    System.out.println("Durchschnitt= "+durchschnitt(sum(array,0),a[0].length);
              }

Ich habe leider Schwierigkeiten beim verstehen von Syntax eines 2D-Array .
z. Beispiel: Länge der Zeile in meinem Beispiel
Java:
array.length=3 // Er gibt mir die Länge der Spalte meines Arrays

array[0].length= //die Länge der Zeile bei Spalte 0 oder?
 
Ich habe leider Schwierigkeiten beim verstehen von Syntax eines 2D-Array .
Was genau verstehst du denn nicht?
Ein Array kannst du dir wie ein Regal, Schachbrett, oder viele Kartons vorstellen. Was auch immer du dir am Besten vorstellen kannst.
Der 1. Index beschreibt immer in welcher Reihe du dich befindest und der 2. Index in welcher Spalte. Wenn du also ein 3x3 Array hast dann sehen die Indizes so aus:

[0][0] [0][1] [0][2]

[1][0] [1][1] [1][2]

[2][0] [2][1] [2][2]

Und daraus lässt sich auch deine obige Frage beantworten --> array[0].length liefert dir die länge der 1. Reihe (also Index = 0), array[1].length der 2. Reihe, usw.

Die Gedanke war es, 2 Methoden zu schreiben, mit denen ich bei der Ausgabe in "main" die gewünschte Zeile aufsummieren und den Durchschnitt ausgeben kann.

Das kannst du ja auch. Die Methode dafür könnte so aussehen:

Java:
private int getSumOfLine(int line, int[][] array)
{
     if(line > 0 && line < array.length)
     {
         int sum = 0;
         for(int i = 0; i < array[line].length; i++)
         {
               sum += array[line][i];
         }
         return sum;
     }

    return -1;
}

Erklärung:
Am Anfang solltest du natürlich prüfen, ob die angegebene Zeile in dem Array existiert.

Wenn das der Fall ist:
-durchläufst du das Array in der gewünschten Zeile line und addierst immer das Element array[line][i] drauf. Am Ende gibst du die Summe zurück.

Wenn das nicht der Fall ist, gibst du bspw -1 zurück. (-1 ist dahingehend schlecht, weil die Summe ja auch negativ sein kann, darum gehts aber nicht).[/i]
 

Neue Themen


Zurück
Oben