Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zwei Arrays zippen wirft eine ArrayIndexOutOfBoundsException
Hallo,
ich habe folgende Aufgabe: Die Methode zip erhält als Parameter zwei Arrays von double-Werten mit beliebiger Länge und liefert als Ergebnis
ein neues Array, dessen Elemente wie bei einem „Reißverschluss“ abwechselnd aus den Elementen der
beiden ursprünglichen Arrays bestehen. Wenn ein Array länger ist als das andere, werden seine überschüssigen
Elemente einfach am Ende des Ergebnis-Arrays angefügt.
Beispiel: Für Arrays mit den Elementen 3, 7, 9 und 2, 8, 6, 4, 10 soll zip ein Array mit den Elementen
3, 2, 7, 8, 9, 6, 4, 10 liefern.
Beim Ausführen bekome ich eine "ArrayIndexOutOfBoundsException". Könntet ihr mir sagen was mein Fehler ist?
Mein bisheriger Code:
Java:
public class Arrays {
public static void print(double[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
public static double[] zip(double[] a, double[] b){
int min=(a.length<b.length)?a.length:b.length;
int max=(a.length>b.length)?a.length:b.length;
double[] c=new double[a.length+b.length];
for(int i=0;i<2*min;i++){
c[i]=a[i];
c[i+1]=b[i];
}
return c;
}
public static void main(String[] args){
double[] a={3,7,9};
double[] b={2,8,6,4,10};
print(zip(a,b));
}
}
Nimm einfach dein Beispiel: 3,7,9
das sind drei elemente und dein minimum ist auch 3.
=> Deine Schleife geht nun von i=0 bis 2*min=6
Dein Array hat aber nur 3 Elemente
Das ZielArray hat dann 6 Elemente, aber Du kannst doch keine Schleife bis 6 laufen lassen und versuchen, diese Elemente auszulesen. Und Du schreibst ja zwei Werte in der Schleife, also um 6 Werte zu schreiben musst Du nur 3 Schritte machen.
Und Deine Zuweisung musst Du noch überarbeiten. c und c[i+1] wäre falsch, denn im ersten Durchgang wird in Felder 0 und 1 und beim zweiten Durchgang 1 und 2 beschrieben. Aber es müssten dann ja die Felder 2 und 3 sein, oder?
Nein - Du darfst den Zähler nicht um 2 erhöhen. Aber schreib einfach einmal für die ersten paar Elemente auf, welchen Wert Dein Zähler hat und welche Felder zu brauchst.
Also
0 0 1
1 2 3
2 4 5
...
Siehst Du da evtl. eine Regelmäßigkeit? Kannst Du die 2. und 3. Spalte über eine mathematische Operation ausdrücken?
Die anderen Spalten waren die Felder des Zielarrays, in die Du Werte schreiben willst.
Die zusätzliche Variable j würdest Du mit jedem Schleifendurchlauf um was erhöhen? Um 1? Dann wäre sie ja fast identisch zu dem Zähler der Schleife. Oder was genau würdest Du machen?
@JavaIsTheBest bitte wähle beim nächsten Thread einen aussagekräftigeren Titel. Anhand des Titel sollte man schon mal des Thema erkennen, welches der Thread behandelt. Außerdem können andere User dann leichter entscheiden ob sie etwas zum Thema beitragen können bzw. es sie überhaupt interessiert.