Array vergleichen

noah1407

Mitglied
Komplettieren Sie die Implementierung von zip. Diese Methode nimmt zwei Arrays a1 und a2 und erstellt ein neues Array, so dass im neuen Array abwechselnd die Elemente von a1 und a2 stehen. Falls die beiden Eingabearrays unterschiedliche La ̈ngen haben, sollen nur soviele Elemente, wie im ku ̈rzeren stehen, beru ̈cksichtigt werden.
Beispiel:
a1 = [1,2,3]
a2 = [4,5,6,7]
result = [1,4,2,5,3,6]
package de.hso.aud.ex01_01;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class ArrayUtilsTest {

@test
void testZip() {
Object[] arr1 = new Object[] {"1", "2", "3"};
Object[] arr2 = new Object[] {"A", "B", "C", "D"};
assertArrayEquals(
new Object[] {"1", "A", "2", "B", "3", "C"},
ArrayUtils.zip(arr1, arr2)
);
// Schreiben Sie zwei weitere Tests
}

@test
void testEverySecond() {
int[] arr = new int[] {1,2,3,4,5,6,7,8};
assertEquals(16, ArrayUtils.sumEverySecond(arr));
}

// ergänzen Sie einen Test für reverse
}
Fu ̈r zip gibt es bereits einen Test. Schreiben Sie zwei weitere und bringen Sie alle Tests zum Laufen. (Im folgende wird implizit angenommen, dass Sie die Tests zum Laufen bringen sollen.)

Kriege das kaum gelöst kann mir jmd den code vervollständigen


package de.hso.aud.ex01_01;

public class ArrayUtils {

public static Object[] zip(Object[] arr1, Object[] arr2) {
return null;
}

public static int sumEverySecond(int[] arr) {
return 0;
}

public static void reverse(Object[] arr) {
}
}
 

Jw456

Top Contributor
Dann ermittle doch erstmal von beiden Arrays die Größe. Schaue welches das kleinere ist.
Dann hast du schon mal die Anzahl für eine For-Schleife .
Auch kannst du jetzt die Größe für das Array bestimmen was du zurück geben musst.
Tipp: könnte das Doppelt vom kleinsten sein.

In der For_Schleife fügst du abwechselnd die Werte(Objekte) der Arrays in das neue Rückgabe Array ein.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Das wird wohl eine Hausaufgabe sein. Hausaufgaben erdige ich nicht.

Fange erst mal an dann sehen wir schon. Du willst doch was lernen nicht wir.
 

KonradN

Super-Moderator
Mitarbeiter
kannst du das mal in einem code mir entwickeln wäre sehr hilfreich weil bin absoult raus da
Das würde Dir in keiner Weise helfen, dass Du da "wieder rein kommst".

Daher: Hast Du die Aufgabe verstanden? Dann spiel es einfach mehrfach durch für diverse Arrays.

a) Überleg genau, was die exakten Schritte waren.
b) dann überlege Dir die Zusammenhänge. Wie lang ist das Ergebnis-Array? Welche Indices der Source Arrays sind wo im Ziel Array gelandet?

Wenn Du es von Hand hin bekommen hast, dann kannst Du es so aufschreiben, dass jeder, der die Aufgabe nicht kennt und nur deine "Anleitung" und zwei Arrays bekommt, die Anleitung durchgehen kann und zum richtigen Ergebnis kommt.

Wenn Du das hast, erst dann kommst Du zum Programmieren. Alles bisher hatte mit Programmieren nichts zu tun gehabt! Das sind 08/15 Abläufe und können 1:1 übersetzt werden: Du bekommst Kartons mit Elementen drin. Du sollst aus jeder Kiste abwechselnd ein Element nehmen und in einen Ziel Karton packen. Wenn in einem Karton weniger Elemente sind als in dem anderen, dann werden aus dem anderen nur die gleiche Anzahl Elemente entnommen wie bei dem "kleineren". Und der Zielkarton muss natürlich die richtige Größe haben.
==> Da hast Du eine Aufgabe, die nichts mit Computern und Progrmmieren zu tun hat. Kriegst Du das hin?
 

noah1407

Mitglied
Das würde Dir in keiner Weise helfen, dass Du da "wieder rein kommst".

Daher: Hast Du die Aufgabe verstanden? Dann spiel es einfach mehrfach durch für diverse Arrays.

a) Überleg genau, was die exakten Schritte waren.
b) dann überlege Dir die Zusammenhänge. Wie lang ist das Ergebnis-Array? Welche Indices der Source Arrays sind wo im Ziel Array gelandet?

Wenn Du es von Hand hin bekommen hast, dann kannst Du es so aufschreiben, dass jeder, der die Aufgabe nicht kennt und nur deine "Anleitung" und zwei Arrays bekommt, die Anleitung durchgehen kann und zum richtigen Ergebnis kommt.

Wenn Du das hast, erst dann kommst Du zum Programmieren. Alles bisher hatte mit Programmieren nichts zu tun gehabt! Das sind 08/15 Abläufe und können 1:1 übersetzt werden: Du bekommst Kartons mit Elementen drin. Du sollst aus jeder Kiste abwechselnd ein Element nehmen und in einen Ziel Karton packen. Wenn in einem Karton weniger Elemente sind als in dem anderen, dann werden aus dem anderen nur die gleiche Anzahl Elemente entnommen wie bei dem "kleineren". Und der Zielkarton muss natürlich die richtige Größe haben.
==> Da hast Du eine Aufgabe, die nichts mit Computern und Progrmmieren zu tun hat. Kriegst Du das hin?
danke für die hilfe ich versuche es jedoch wird mir ein ansatz glaube ich enorm helfen
 

KonradN

Super-Moderator
Mitarbeiter
Einen Ansatz habe ich dir genannt. Versuch es doch erst einmal so und Formuliere das Vorgehen, wie du es machen würdest.

Wenn du uns da Versuche zeigst, dann kann man dir da ggf. schon helfen.
 

Jw456

Top Contributor
Überlege doch erst mal wie du herausfinden kannst welches der Array die wenigsten Elemente inne hat.
Tipp ein if und .length könnte helfen.
 

noah1407

Mitglied
public static Object[] zip(Object[] arr1, Object[] arr2) {
return null;
}
if( arr1.length==arr2.length)
{

}
else
{
Object arr1;
Object leange = arr1.length;
}
if(arr1.length<arr2.length)
{
leange=arr2.length;
}
else
{
leange=arr1.length
}

int z=0;
Object[] result =new Object[laengez];
for(int i=i i<length i++)
{
result=arr1;
z++;
result=arr1;
z++;

return result;

das ist mein einsatz ich hoffe jemand kann mir die lösung vervollständigen das der code funktioniert
 

KonradN

Super-Moderator
Mitarbeiter
Code bitte immer in Code Tags posten - das geht am einfachsten über den Knopf </> links oberhalb der Eingabebereiches. Dann bleibt der Code zum einen Eingerückt und zum anderen werden bestimmte Dinge nicht mehr ausgewertet, wie z.B. [i] wird als kursiv genommen.

Was ich jetzt erst einmal nicht sehe ist, wo du laengez festlegst.
Dann ist vieles am Code schlicht unverständlich.

Java:
if(arr1.length<arr2.length)
{
    leange=arr2.length;
}
else
{
    leange=arr1.length
}
sieht erst einmal brachbar aus. So Du leange irgendwo deklariert hast (Evtl. auch Schreibweise achten - soll vermutlich laenge heissen....).

Beim ganzen Rest bin ich unsicher, wie ich das bewerten sollte. Evtl. wird es besser, wenn man Code Tags hat.

Generell wäre ein guter Ansatz, erst einmal auf die Antworten im Detail einzugehen Die einzelnen Schritte zuerst in Worte zu fassen um diese dann in Java umzusetzen (ggf. die Worte als Kommentar dabei stehen lassen) kann Dir evtl. helfen.
 

Jw456

Top Contributor
Was schon mal garnicht passt ist das du deine vermeintlichen Code außer halb der Methode zip schreibst.
Somit ist die Methode unverändert.

Zu deinem if du willst herausfinden welches Array das kleinste ist.
Was soll da der Vergleich auf gleich.
Da wäre ein Vergleich auf größer oder kleiner sinnvoller.

Java:
if( arr1.length <= arr2.length)

Und welchen Datentyp gibt dir arr1.length zurück? Einen int.
Und nicht Objekt.

So das war es erstmal
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Wenn du den Code auch in die Methode packst sollte es in etwas so ausschauen.

Java:
public static Object[] zip(Object[] arr1, Object[] arr2) {
       
    int  sizeArray;     // grösse des keinsten Array als int
       if(arr1.length <= arr2.length){
           sizeArray = arr1.length;
       } else {
           sizeArray = arr2.length;
       }
           
       Object[] ergebnis = new Object[ ???? ];  // wie gross muss das neue Array sein?
     
       // hier die for Schleife
      ....
     
       return ergebnis;
    }

Zu deiner for Schleife dann schaue dir noch mal an wie die ausschauen muss. Tipp: Semikolon

Wie du in einem Array ein Element Addresirst und dem etwas zuweist.
"result=arr1; " Macht nicht das was du willst.

Wozu hast du sonnst die Laufvariable in der for Schleife ?
Und wozu hast du sonnst die Hilfsvariable "z" ?
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Ml ein paar grundsätzliche Fragen:
a) wie schreibst Du denn den Java Code derzeit? Hier solltest Du eine Entwicklungsumgebung nutzen, die Code automatisch richtig einrückt und zuglich den Code auch direkt auswertet und Dir Warnungen und Fehler anzeigt. Hier würde ich Dich Dir IntelliJ empfehlen. Netbeans soll für Anfänger auch gut sein (mir gefällt es nicht so) und es gibt Eclipse, was eine EierlegendeWollMilchSau ist und für Anfänger vermutlich direkt zu komplex (da es auch nicht so viel Komfort bietet wie z.B. IntelliJ - da hast du für vieles direkte schnelle "Ein Klick" Lösungen).

b) Prinzipiell hast Du ja schon einiges, das gut aussieht und wo es nur an Feinheiten fehlt. Da evtl. noch einmal Dein Code kopiert und einiges an Quatsch heraus gestrichen:

public static Object[] zip(Object[] arr1, Object[] arr2) {
return null;
}
if( arr1.length==arr2.length)
{

}
else
{
Object arr1;

Object leange = arr1.length; Hier ist noch ein Fehler, der auch schon erwähnt wurde ... Was für ein Typ wird da gespeichert?
}
if(arr1.length<arr2.length)
{
leange=arr2.length;
}
else
{
leange=arr1.length
}

int z=0;
Object[] result =new Object[laengez]; Hier ist laengez noch unbekannt! Was ist laengez? Wie groß muss das Array sein?
for(int i=i i<length i++) Von wo soll die Schleife anfangen zu zählen? Was ist length? Und wie sieht eine for Schleife richtig aus? (Da sind ja 3 Felder - wie werden die getrennt?
{
result=arr1; Das sieht schon vom Ansatz her gut aus - Was genau willst Du zuweisen? Da es italic wird, wird da beim arr1 noch der Array Operator mit i drin gewesen sein. Hier einfach noch einmal ansetzen!
z++;
result=arr1;
z++;

return result;

==> Du hast doch schon einen Ansatz. Da musst Du nur dran bleiben. Und da musst Du hier Fragen, die wir Dir stellen, auch etwas beantworten. Du musst verstehen, was Du da machst. Das können wir dir nicht abnehmen!
 

Ähnliche Java Themen

Neue Themen


Oben