Java Kann mir einer kurz erklären wie ich diese beiden Methoden vervollständige?

mamnu

Cadet 4th Year
Dabei seit
Okt. 2017
Beiträge
119
Hallo,
Wäre einer so nett und könnte mir kurz bei 2 Methoden helfen, die fast fertig sind?
1.Methode:
public static int[] sumArrays(int[] array1, int[] array2) {
int[] array3= new int[array1.length];
for (int i=0; i<array1.length;i++) {
array3=array1+array2;
}

return array3;
}
Diese soll 2 Arrays elementarweise addieren (also z.B. array1 hat die Werte {1,2,5,6,7} und array2 z.B. die Werte {4,8,12,5,9}
dann soll halt für array3{5,10,17,11,16} rauskommen. Das tut es zwar aber nur solange die array1 und array2 gleich lang sind. Wie ich schaffe ich es das sich diese arrays auch elementarweise addieren wenn sie unterschiedlich lang sind?

2.Methode:
soll alle geraden Werte eines arrays herausfinden und diese in ein neues speichern
public static boolean evenNumbers(int[] array) {

int[]array6=new int [array.length];
for (int i=0; i<array.length; i++) {
if (array%2==0) {
return true;
}else if
(array%2!=0)
{ return false;
}
}
}

Wie schaffe ich es die Werte von true in das neue erzeugte array zu speichern? Und warum sagt der Compiler "this method must return a boolean"? Das mach ich doch mit true und false oder versteh ich da was falsch?
 

abcddcba

Commander
Dabei seit
Juni 2018
Beiträge
2.109
Wie ich schaffe ich es das sich diese arrays auch elementarweise addieren wenn sie unterschiedlich lang sind?
was soll denn auch rauskommen wenn sie unterschiedlich lang sind? Das hast du nicht definiert. Entweder du nimmst nie minimale laenge von beiden arrays dann fuer deine for Schleife, oder du musst padding mit Nullen oder so auf dem kuerzeren Array machen, dann wieder addieren. Oder sollt ihr eine Exception werfen?

Ich sehe in deinem Code auch nicht wo du etwas elementweise addierst und als Wert des neuen Arrays setzt, du greifst ja nicht mal auf die einzelnen Elemente zu ... oder was denkst du macht diese Zeile:
Java:
for (int i=0; i<array1.length;i++) {
array3=array1+array2;
}
Das ist Java und kein Python Numpy oder so. In deiner Schleife machst du mehrmals irgendwas, aber nicht
  • nehme Element i aus Array 1
  • nehme Element i aus Array 2
  • addiere beide Elemente
  • setze den Wert auf Position i von Array 3
(Das war jetzt quasi der Pseudo Code ...)

Seit Java 8 kann man uebrings dann auch eine Utility Methode (Arrays.setAll) + Lambda nehmen. Aber hier nicht relevant, ihr sollt das so lernen, wie man es schon immer macht, mit einer simplen Schleife.

Das mach ich doch mit true und false oder versteh ich da was falsch?
Nein, machst du wohl nicht. Du sagst ja else-if, lies nochmal nach. Warum kann Java hier nicht zaubern?
 

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
array3[j]=array1[j]+array2[j];
ups da ist etwas beim reinkopieren anscheinend schief gelaufen, die Zeile sieht normalerweise so aus. und wenn die Arrays unterschiedlich lang sind soll das kürzere Array als null gelten. ach, i in Klammern ist hier im Forum für was anderes reserviert.
also
Array1{2,4} und Array2 {4,5,2,4}
dann soll Array3 {6,9,2,4} sein

Zum der zweiten Methode:
meinst du ich soll das else if löschen? Ich schau einfach nochmal nach

Ach ich glaub ich weiß es jetzt else if wäre ja doppelt gemobbelt
wenn ich daraus jetzt
else
return false;
machen würde dann müsste es gehen oder?
 
Zuletzt bearbeitet:

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
Java:
public static int[] sumArrays(int[] array1, int[] array2) {
      
        int[] array3;
      
        if (array1.length >= array2.length) {
            array3 = new int[array1.length];
        } else {
            array3 = new int[array2.length];
        }
      
        for (int i = 0; i < array3.length; i++) {
          
            if (i < array1.length) {
                array3[i] = array1[i];
            }
          
            if (i < array2.length) {
                array3[i] = array3[i] + array2[i];
            }
        }

        return array3;
    }

    public static boolean[] evenNumbers(int[] array) {

        boolean[] result = new boolean[array.length];

        for (int i = 0; i < array.length; i++) {
          
            result[i] = array[i] % 2 == 0;
        }
      
        return result;
    }
 
Zuletzt bearbeitet:

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
Danke, die Lösung hätte es jetzt nicht unbedingt gleich sein müssen zumindest für das erste Problem. Aber danke für die Hilfe. Das zweite besteht irgendwie immer noch.
 
Zuletzt bearbeitet:

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
Danke, die Lösung hätte es jetzt nicht unbedingt gleich sein müssen zumindest für das erste Problem. Aber danke für die Hilfe. Das zweite besteht irgendwie immer noch.
Was meinst du mit "das zweite besteht immer noch". Das was ich da gepostet habe passt, du hast dich nicht korrekt ausgedrückt, was die zweite Funktion machen soll, sonst ergab der return von boolean und was du da angefangen hast kein Sinn. So wie du es geschrieben hast, passt es. Sie gibt ein boolean array aus mit true und false ob die werte des arrays gerade sind an der position.

Java:
        int bla[] = sumArrays(new int[]{-1}, new int[]{1,1,1,1});
    
        for (int i = 0; i < bla.length; i++) {
            System.out.println(bla[i]);
        }
    
        boolean blub[] = evenNumbers(new int[]{1,2,3});
    
        for (int i = 0; i < blub.length; i++) {
            System.out.println(blub[i]);
        }

run:
0
1
1
1
false
true
false
Falls du aber ein neues int array erzeugen wolltest mit allen geraden Werten dann wäre es sowas wie das hier:

Java:
public static int[] evenNumbers2(int[] array) {

        int[] result;
        int[] temp = new int[array.length];

        int j = 0;
      
        for (int i = 0; i < array.length; i++) {
          
            if (array[i] %2 == 0) {
          
                temp[j] = array[i];
                j++;
            }
        }
      
        result = new int[j];
      
        for (int i = 0; i < j; i++) {
          
            result[i] = temp[i];
        }
      
        return result;
    }

int blub[] = evenNumbers2(new int[]{1,1,1,2,2,1,3,4});
       
        for (int i = 0; i < blub.length; i++) {
            System.out.println(blub[i]);
        }
run:
2
2
4
 
Zuletzt bearbeitet:

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
Hat man das jetzt echt so verstanden? Naja dann probiere ich es nochmal
Also, die zweite Methode bekommt ein Array übergeben
so heißt die Aufgabenstellung: Weisen Sie in dem neuen Feld den Einträgen für jede gerade Zahl true und für jede ungerade Zahl false zu.
War bestimmt schon ersichtlich für die Meisten, dass es eine Schulaufgabe ist. Und nein ich will euch nicht die Aufgaben machen lassen! Das sind eigentlich 25 Methoden und ich komme halt bei diesen 2 nicht weiter und wenn nicht alle stimmen gibt es automatisch 0 Punkte
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
@mamnu siehe edit "Weisen Sie in dem neuen Feld den Einträgen für jede gerade Zahl true und für jede ungerade Zahl false zu. " kapier den Satz nicht. Also will er doch ein boolean array haben wie ich es zuerst gepostet habe? Sag dem Prof/Lehrer er soll sich gescheiter ausdrücken.
 

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
jetzt bin ich verwirrt wir sollen mit true und false arbeiten, aber das kommt doch in deinem edit gar nicht vor, oder doch? Ganze Aufgabenstellung, damit man sich jetzt nicht mehr gegenseitig verwirrt
In dieser Teilaufgabe soll ermittelt werden, welche Einträge von array1 gerade und welche ungerade sind. Implementieren Sie die Methode evenNumbers. Legen Sie ein neues Feld geeigneter Länge und geeigneten Datentyps an. Weisen Sie in dem neuen Feld den Einträgen für jede gerade Zahl true und für jede ungerade Zahl false zu. Die Fallunterscheidung soll zusammen mit der Zuweisung in einer Zeile erfolgen! Geben Sie das neu erzeugte Array auf der Standardausgabe aus. Hierfür können Sie nicht die bereits implementierte printArray-Methode verwenden, da diese nur für Integer-Arrays funktioniert. Implementieren Sie stattdessen die Methode printBooleanArray, um das erzeugte Array auszugeben.
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
... ja also was ich oben bereits geschrieben habe.....

Java:
public static boolean[] evenNumbers(int[] array) {

        boolean[] result = new boolean[array.length];

        for (int i = 0; i < array.length; i++) {
         
            result[i] = array[i] % 2 == 0;
        }
     
        return result;
    }
 

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
type missmatch result cannot convert from boolean[] to boolean. Kann man das ignorieren?
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
type missmatch result cannot convert from boolean[] to boolean. Kann man das ignorieren?
NEIN!? Was machst du da bitte schön... du kannst schon copy und pasten oder? Du scheinst deinen Mist mit meinem zu Mischen zu wollen. boolean != boolean[]

boolean = elementarer datentyp boolean
boolean[] = boolean ARRAY

Die Aufgabe gibt ja sogar dummhaft an, was er haben will ein boolean ARRAY. Was das mit dem dummen printBooleanArray soll weiß ich nicht. Denn println int und boolean wäre identisch.

Java:
public static void printBooleanArray(boolean[] array) {
       
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
 
Zuletzt bearbeitet:

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
Ja kann ich :)
Ich weiß jetzt was falsch läuft:
public static boolean[] evenNumbers(int[] array) { (du benutzt irgendwie die Methode)
public static boolean evenNumbers(int[] array) { (während die echt einen boolean als Rückgabewert haben will)
ich weiß nicht wo sich bei dir das boolean [] eingeschlichen hat. Oben steht es auch anders
(will das nur klarstellen, soll kein rumgemeckere sein)
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
Ja kann ich :)
Ich weiß jetzt was falsch läuft:
public static boolean[] evenNumbers(int[] array) { (du benutzt irgendwie die Methode)
public static boolean evenNumbers(int[] array) { (während die echt einen boolean als Rückgabewert haben will)
ich weiß nicht wo sich bei dir das boolean [] eingeschlichen hat. Oben steht es auch anders
(will das nur klarstellen, soll kein rumgemeckere sein)
Du hast die Aufgabe nicht kapiert. Und ein atomares boolean als Rückgabewert ergibt kein Sinn. UND ER SAGT ES SOGAR EXPLIZIT: "Legen Sie ein neues Feld geeigneter Länge und geeigneten Datentyps an. " FELD = ARRAY = RUECKGABEWERT => BOOLEAN ARRAY. Er sagt es sogar noch als Tipp in der letzten Zeile: printBooleanArray

"Die Fallunterscheidung soll zusammen mit der Zuweisung in einer Zeile erfolgen " =>

result = array % 2 == 0;

"Geben Sie das neu erzeugte Array "
 
Zuletzt bearbeitet:

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
Die Methoden sind doch vorgegeben mach doch nur Copy und Paste zur Ausgabe gibt es ja die Methode
public static void printBooleanArray(boolean[] array) {
aber die habe ich doch schon. Ich kapier nur das nicht was ich in der Methode evenNumbers machen soll

public static boolean evenNumbers(int[] array) {
// TODO: Ermitteln Sie hier die geraden Elemente in array. Geben Sie das neu erzeugte Array zurueck
}

public static void printBooleanArray(boolean[] array) {
// TODO: Implementieren Sie diese Methode fuer die letzte Teilaufgabe (analog zu printArray)

}
habe jetzt mal die beiden Methoden kopiert, so wie sie mir gegeben wurden. Damit wir nicht immer aneinander vorbei reden
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
Tut mir leid ich kann dir da nicht mehr weiterhelfen, wenn du nur Stückweise deine Aufgaben mitteilst. Ob du eine vorgegeben Methode korrigieren, vervollständigen oder selber schreiben sollst kann ich nicht wissen. Was du oben geschrieben hast ergibt so kein Sinn. "Deine" evenNumbers ist so wie oben geschrieben nicht funktionsfähig, also bin ich davon ausgegangen das ist auf deinem Mist gewachsen.
 
Zuletzt bearbeitet:

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
In dieser Teilaufgabe soll ermittelt werden, welche Einträge von array1 gerade und welche ungerade sind. Implementieren Sie die Methode evenNumbers. Legen Sie ein neues Feld geeigneter Länge und geeigneten Datentyps an. Weisen Sie in dem neuen Feld den Einträgen für jede gerade Zahl true und für jede ungerade Zahl false zu. Die Fallunterscheidung soll zusammen mit der Zuweisung in einer Zeile erfolgen! Geben Sie das neu erzeugte Array auf der Standardausgabe aus. Hierfür können Sie nicht die bereits implementierte printArray-Methode verwenden, da diese nur für Integer-Arrays funktioniert. Implementieren Sie stattdessen die Methode printBooleanArray, um das erzeugte Array auszugeben.

public static boolean evenNumbers(int[] array) {
// TODO: Ermitteln Sie hier die geraden Elemente in array. Geben Sie das neu erzeugte Array zurueck
}

public static void printBooleanArray(boolean[] array) {
// TODO: Implementieren Sie diese Methode fuer die letzte Teilaufgabe (analog zu printArray)

}
Also mehr habe ich nicht, damit soll ich arbeiten. Vielleicht habe ich es auch schlecht erklärt
 

mkdr

Banned
Dabei seit
Sep. 2010
Beiträge
1.240
public static boolean evenNumbers(int[] array) {
// TODO: Ermitteln Sie hier die geraden Elemente in array. Geben Sie das neu erzeugte Array zurueck
}
Dann hat er sich verschrieben. "Geben Sie das neu erzeugte Array zurück" ergibt nur sinn, bei Rückgabewert boolean[] < ARRAY

printBooleanArray(boolean[] array) { <--------- WIE ES AUCH DA STEHT

Die verdammte Aufgabe ist wie ich oben bereits in meinem ersten Post geschrieben habe gelöst HERR GOTT.
 

mamnu

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Okt. 2017
Beiträge
119
Hab gerade festgestellt am Donnerstag hat er eine neue Version hochgeladen und da steht tatsächlich boolean[] drin
public static boolean[] evenNumbers(int[] array) {
// TODO: Ermitteln Sie hier die geraden Elemente in array. Geben Sie das neu erzeugte Array zurueck

return {};
}

public static void printBooleanArray(boolean[] array) {
// TODO: Implementieren Sie diese Methode fuer die letzte Teilaufgabe (analog zu printArray)
}
sollte wohl mal öfters nachschauen, wann neue Versionen rauskommen
Ich hoffe jetzt haben wir alles geklärt
 
Top