Array zusammenaddieren java?

6 Antworten

Die Lösung von Trugger rekursiv:

public static int arrayAddierer(int[] a, int start) {
     int summe =0;
     if(start==a.length) return 0;  
     else{        
          summe+=a[i];
          return summe+arrayAddierer(a,start+1);  
} 

Das habe ich allerdings jetzt leider nicht in Java getestet, sondern mit VBA:

Function rek(ByRef aI() As Integer, start As Integer)

   Dim summe As Integer
   summe = 0
   
   If (start = 4) Then
       rek = 0
   Else
       summe = aI(start)
       rek = summe + rek(aI, start + 1)
   End If

End Function

Und hier eine Ausführungscode für VBA:

Sub xx()

 Dim a(0 To 3) As Integer
 a(0) = 35
 a(1) = 7
 a(2) = 3
 a(3) = 4

 Cells(2, 2).Value = rek(a, 0)


End Sub
Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich
nobytree2  28.02.2018, 13:06
Fehler: summe+=a[start]; statt a[i]

Wie ich feststelle, ist

if(start==a.length) return0;  

nicht optimal, sondern wohl eher so etwas:

if(start==a.length-1) return a[start];  
0

Wieviele Arrays? Wie werden sie angegeben? Sollen die Inhalte der Arrays in einen gesamten Wert aufaddiert werden oder die einzelnen Elemente verrechnet werden?

Gesamtwert:

public static int sumArr(int[] first, int[] second){
    int result=0;
    for(int i=0;i<Math.max(first.length,second.length);i++){
        if(i<first.length){
            result+=first[i];
        }
        if(i<second.length){
            result+=second[i];
        }
    }
    return result;
}

Für die Elemente

public static int[] sumArr(int[] first, int[] second){
    int[] result;
    if(first.length==second.length){
        result=new int[first.length];
        for(int i=0;i<result.length;i++){
            result[i]=first[i]+second[i];
        }
        return result;
    }
    throw new IllegalArgumentException("Arraylänge ungleich. Array 1: " + first.length + ", Array 2: " + second.length);
}
public static int[] AddArrays(int[] a, int[] b) throws IllegalArgumentException
{
   if(a.length != b.length)
       throw new IllegalArgumentException("Array length mismatch");

   int[] ret = new int[a.length];
  
   for(int i = 0; i < a.length; i++)
   {
      ret[i] = a[i] + b[i];
   }

   return ret;
}

Ich habe es so verstanden, dass du die Elemente in zwei verschiedenen Arrays addieren möchtest und daraus ein neues Array erzeugen möchtest.

public static int arrayAddierer(int[] a) {

int summe =0;

for(int i =0;i<a.length;i++) {

summe += a[i];

}

return summe;

}

Würde auch rekursiv gehen. Falls du noch mehr Fragen hast schieß einfach los :)

nobytree2  27.02.2018, 16:41
Ich habe mal in meiner Antwort Deine Lösung rekursiv versucht ...
Irgendwie gefällt mir meine Lösung nicht, vielleicht geht es eleganter.
0
Trugger  27.02.2018, 17:12
@nobytree2

Ach was, das passt schon so. Man muss halt nur aufpassen mit den Startwerten da könnte man vllt noch eine exception schreiben.   summe+=a[i]; die stelle ist falsch du musst dort summe+=a[start] benutzten ^^

1

int x;

for (int i=0,;i>=array.len;i++){

x+=array[i];

}