Code erklären

marcooooo

Mitglied
Java:
if(workArray[0] == value)
            return true;
        if(workArray.length == 1)
            return false;
        int[] FirstRes = Arrays.copyOfRange(workArray, 0, workArray.length/2);
        int[] SecondRes = Arrays.copyOfRange(workArray, workArray.length/2, workArray.length);
        return containsValue(FirstRes, value) || containsValue(SecondRes, value);
 

marcooooo

Mitglied
Java:
private static boolean containsValue(int[] workArray, int value) {
        if(workArray[0] == value)
            return true;
        if(workArray.length == 1)
            return false;
        int[] FirstRes = Arrays.copyOfRange(workArray, 0, workArray.length/2);
        int[] SecondRes = Arrays.copyOfRange(workArray, workArray.length/2, workArray.length);
        return containsValue(FirstRes, value) || containsValue(SecondRes, value);
    }
 

DrPils

Bekanntes Mitglied
Was genau willst du erklärt bekommen?
Hast du den Code selbst geschrieben, oder ist er von irgendwo kopiert?
Hast du ihn selbst geschrieben, hast du ja bestimmt eine Idee was ungefähr vor sich geht, wenn du ihn aus einem Tutorial oder so kopiert hast, stand doch besimmt was dabei.
Ansonsten frage bitte ein bisschen präziser dann wird dir schon geholfen.

Es schadet auch nie dir mal die offizielle Dokemtation anzuschauen:
Arrays.copyOfRange
 

marcooooo

Mitglied
Was genau willst du erklärt bekommen?
Hast du den Code selbst geschrieben, oder ist er von irgendwo kopiert?
Hast du ihn selbst geschrieben, hast du ja bestimmt eine Idee was ungefähr vor sich geht, wenn du ihn aus einem Tutorial oder so kopiert hast, stand doch besimmt was dabei.
Ansonsten frage bitte ein bisschen präziser dann wird dir schon geholfen.

Es schadet auch nie dir mal die offizielle Dokemtation anzuschauen:
Arrays.copyOfRange
habe es von wo kopiert weil ich wissen gerne würd wie man den am besten erklärt also was die zeilen machen ^^
 

DrPils

Bekanntes Mitglied
Also weißt du selbst nicht was da passiert, oder kannst du es nicht gut erklären?

Und du hast keinen Schimmer was das bedeutet?
Java:
if(workArray[0] == value)
            return true;
 

marcooooo

Mitglied
Also weißt du selbst nicht was da passiert, oder kannst du es nicht gut erklären?

Und du hast keinen Schimmer was das bedeutet?
Java:
if(workArray[0] == value)
            return true;
ja doch wenn der erste wert dem value ist gibt er true zurück und beim nächsten wenn die länge false ist gibt es false zuruück aber dann nicht mehr
 

temi

Top Contributor
ja doch wenn der erste wert dem value ist gibt er true zurück und beim nächsten wenn die länge false ist gibt es false zuruück aber dann nicht mehr
Ist dir auch klar, warum das so ist?

Die Methode heißt containsValue(), es geht also darum, zu prüfen, ob ein Wert im Array vorhanden ist. Jetzt hast du die beiden ersten Zeilen:

1 Wenn der erste Wert dem gesuchten Wert entspricht, dann gib "true" zurück. Das sollte einleuchten.
2 Wenn das übergebene Array die Länge 1 hat, dann gib "false" zurück.

Warum kann man bei Länge 1 "false" zurück geben?

Wenn du das weißt, dann nimm dir die nächste Zeile vor. Stück für Stück.
 
Zuletzt bearbeitet:

marcooooo

Mitglied
Ist dir auch klar, warum das so ist?

Die Methode heißt containsValue(), es geht also darum, zu prüfen, ob ein Wert im Array vorhanden ist. Jetzt hast du die beiden ersten Zeilen:

1 Wenn der erste Wert dem gesuchten Wert entspricht, dann gib "true" zurück. Das sollte einleuchten.
2 Wenn das übergebene Array die Länge 1 hat, dann gib "false" zurück.

Warum kann man bei Länge 1 "false" zurück geben?

Wenn du das weißt, dann nimm dir die nächste Zeile vor. Stück für Stück.
hm das weiß ich leider nicht
 
K

kneitzel

Gast
kann mir das jemand jetzt kurz schnell erklären ^^
Ja. Einige. Ich auf jeden Fall und ich bin sicher: @temi und @DrPils können den Code auch kurz und schnell erklären. (Wobei man schnell definieren sollte ... Wenn schnell erklären bedeutet, dass man extrem schnell reden soll - darin bin ich nicht geübt und bei den anderen habe ich auch keine Ahnung ... Aber ich sehe darin auch keinen wirklichen sinn. Wenn jemand ganz ganz schnell redet, dann versteht man den doch nicht mehr ... Aber vielleicht definierst Du das, was Du als kurz und schnell genau meinst.)

Also ich werde das nicht erklären. Das ist so banal, da musst du selbst drauf kommen.
Das war aber doch nicht die Frage - sag einfach "ja" und gut ist es ... Du sollst es doch nicht machen ....

Aber noch ein paar Hilfestellungen:
a) Schau Dir den Namen der Methode an. Was für ein Verhalten würdest Du da erwarten? Was sollte die Methode machen?
b) Mit dem Wissen aus a) kannst Du dann in die Methode rein gehen und schauen, was die da so macht.

Wenn Du überhaupt nicht verstehst, was die Methode da macht: Probiere es doch einfach einmal im Debugger aus! Das ist dann die Chance, einen Debugger kennen zu lernen und zu schauen, wie man Breakpoints setzt und dann Schritt für Schritt durch den Code geht ... Was machen die einzelnen Befehle wie Step Over, Step Into u.s.w.
 

temi

Top Contributor
sag einfach "ja" und gut ist es
Ja! :)

Ich hatte mich auch nur auf die beiden ersten Zeilen bezogen und die sind wirklich nicht so schwer zu verstehen. Beim restlichen Code unterstütze ich selbstverständlich, aber ein wenig Initiative sollte schon auch von ihm selbst kommen, vor allem, weil zu den beiden Zeilen ja schon einiges dasteht. Es ist nur noch etwas Logik erforderlich, die es zusammenfügt.
 
K

kneitzel

Gast
Ja! ;)

Ich hatte mich auch nur auf die beiden ersten Zeilen bezogen und die sind wirklich nicht so schwer zu verstehen. Beim restlichen Code unterstütze ich selbstverständlich, aber ein wenig Initiative sollte schon auch von ihm selbst kommen.
So hatte ich Dich prinzipiell auch verstanden, da ich dich ja auch schon etwas kenne. Aber etwas Spaß muss dann auch auch manchmal sein...

@marcooooo: Wichtig ist, dass Du auch versuchst zu formulieren, woran es gerade hakt. Es Dir einfach vorbeten wird Dir nichts bringen fürchte ich. Daher ist die große Frage, die sich uns stellt: Woran scheitert es gerade? Was kann man erläutern, damit es klar wird. Aber da sehe ich gerade auch nicht wirklich einen Ansatzpunkt - daher die allgemeinen Hinweise, die ich beisteuern konnte. Und das alles geht nicht gegen Dich als Person - Die Tatsache, dass wir hier schreiben, sollte zeigen, dass wir helfen wollen.

(Sonst würden wir es sein lassen - einfach nur Spaß haben ginge auch anders ... Wir könnten uns z.B. alle bei @mihe7 treffen zum Kaffee trinken - bei ihm sieht der Kaffee angeblich immer so toll aus wie in seinem Avatar Bild ... also ich wäre dafür :) )
 

Blender3D

Top Contributor
habe es von wo kopiert weil ich wissen gerne würd wie man den am besten erklärt also was die zeilen machen ^^
Da hast Du Dir mit Deinem Wissenstand kein gutes Beispiel ausgesucht.
Was die Funktion macht erklärt der Name. Sie will wissen ob die übergebene Zahl in dem übergeben Array enthalten ist.
Warum ist das Beispiel nicht gut gewählt?
Es handelt sich für dieses Problem für eine schlecht umgesetzte Lösung. Es wird dabei
1) Rekursion verwendet ( für dich als Anfänger wahrscheinlich nicht so gut zu verstehen )
2) Die Rekursion ist nicht effizient umgesetzt da ein ständiges unnötiges Kopieren des Arrays stattfindet.
Hier zum Vergleich eine Iterative Lösung. Versuche erst einmal die, zu verstehen.
[CODE lang="java" title="Iterative" highlight="2-6"]public static boolean containsValueIterative(int[] workArray, int value) {
for (Integer i : workArray) {
if (i == value)
return true;
}
return false;
}[/CODE]
 

temi

Top Contributor
Für den TO nicht so relevant, aber meines Wissens ist "Integer" immutable. Das bedeutet es wird für jede Iteration ein neues Integer-Objekt erzeugt, was auch nicht so effizient ist. Oder irre ich mich?
 

mrBrown

Super-Moderator
Mitarbeiter
Für den TO nicht so relevant, aber meines Wissens ist "Integer" immutable. Das bedeutet es wird für jede Iteration ein neues Integer-Objekt erzeugt, was auch nicht so effizient ist. Oder irre ich mich?
Unnötig ist's auf jeden Fall, dort Integer zu nutzen. Der JIT wird das aber wohl wegoptimieren, sodass es zumindest keinen relevanten Laufzeitoverhead mehr hat – nur halt den Mehraufwand beim Lesen und Verstehen.
 

DrPils

Bekanntes Mitglied
Außerdem sind die Number klassen ja von -128 - 127 gecacht, sollte also bei kleinen schleifen auch nix ausmachen, oder?
Edit:
Hat ja nix mit der size des Arrays zu tun....
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Ist das so? Bei Bloch (3. Auflage) wird noch vor dieser Verwendung von Integer gewarnt, wenn ich mich recht entsinne (es war ein ähnlich konstruiertes Beispiel, glaube ich).
Ja, dort wird auch zurecht davor gewarnt, man sollte die Wrapper generell meiden, wenn man sie nicht zwingend braucht :)

Der Hauptgrund, zumindest für mich, ist dabei aber eher, dass Integer Referenztypen sind. Wäre value in dem Code von @Blender3D auch ein Integer, würde der Vergleich so nicht mehr klappen. Ebenso hätte man dann die Gefahr einer NPE, die da schnell mal übersehen wird.

---

Das Beispiel mit schlechten Performance ist in Effective Java minimal anders, das entspricht etwa (etwas umgeformt zum bessern erklären/testen):

Java:
public int sumIntToInteger() {
    Integer sum = 0;
    for (final int i : array) {
        sum += i;
    }
    return sum;
}

Das Äquivalent zu dem Code hier wäre dann so etwas:

Java:
public int sumIntegerToInt() {
    int sum = 0;
    for (final Integer i : array) {
        sum += i;
    }
    return sum;
}

und die optimale Variante wäre:

Java:
public int sumIntToInt() {
    int sum = 0;
    for (final int i : array) {
        sum += i;
    }
    return sum;
}

Der Scope des Integers ist jeweils unterschiedlich. In Variante zwei ist das begrenzt auf einen Schleifendurchlauf, da kann der Compiler ziemlich einfach mit Escape Analysis zeigen, dass der Integer dieses Scope niemals verlässt, und dann mit Scalar Replacement den Integer direkt durch den gekapselten int ersetzen.

In Variante 1, der langsamen Variante, geht das nicht so einfach, da der Integer in jedem Schleifendurchlauf "entpackt" und neu zugewiesen wird, und am Ende auch noch mal unboxed wird. C2 allein macht dort dann kein Scalar Replacement, deshalb wird dann dort wirklich in jedem Durchlauf ein neuer Integer erstellt.

Wenn man das mal mit JMH laufen lässt, sieht man das recht deutlich, der Integer als Schleifenvariable macht keinen Unterschied, der als Summe aber schon:
Java:
IntVsInteger.sumIntToInt               1000000  avgt   10   466568,823 ±  22405,957  ns/op
IntVsInteger.sumIntToInteger           1000000  avgt   10  2843725,588 ± 109810,006  ns/op
IntVsInteger.sumIntegerToInt           1000000  avgt   10   414523,889 ±  13435,424  ns/op
IntVsInteger.sumIntegerToInteger       1000000  avgt   10  2765665,108 ±  52468,247  ns/op

Mit einem anderen Compiler kann das dann aber auch wieder ganz aussehen, genau das gleiche, nur mit Graal:

Java:
IntVsIntegerGraal.sumIntToInt          1000000  avgt   10   539997,638 ±  24249,123  ns/op
IntVsIntegerGraal.sumIntToInteger      1000000  avgt   10   538209,538 ±  14342,162  ns/op
IntVsIntegerGraal.sumIntegerToInt      1000000  avgt   10   532428,855 ±  12596,687  ns/op
IntVsIntegerGraal.sumIntegerToInteger  1000000  avgt   10   544341,853 ±  24737,793  ns/op

In den "einfachen Fällen" etwas langsamer, dafür funktioniert die Escape Analysis deutlich besser (hauptsächlich, weil sie anders funktioniert als in C2).
 

thecain

Top Contributor
Naja, zu "etwas langsamer"... Ich würde fast sagen konstant langsam... Oder interpretiere ich die Zahlen da falsch? Ist ja nur etwa 10% schneller als das langsame, dafür ca. 4x langsamer als das schnelle...
 

mrBrown

Super-Moderator
Mitarbeiter
Naja, zu "etwas langsamer"... Ich würde fast sagen konstant langsam... Oder interpretiere ich die Zahlen da falsch? Ist ja nur etwa 10% schneller als das langsame, dafür ca. 4x langsamer als das schnelle...
Andersrum, der Wert ist die Zeit, je schneller desto besser :) Braucht also ca ~120% so Lang wie das schnellste, aber nur 20% im Vergleich zum langsamen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
W Java-Code erklären Java Basics - Anfänger-Themen 6
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
marcooooo Code erklären Java Basics - Anfänger-Themen 4
T Java Code erklären Java Basics - Anfänger-Themen 7
N Hilfe, Code erklären Java Basics - Anfänger-Themen 7
T Java Code erklären Java Basics - Anfänger-Themen 5
V Wer kann diesen Code leicht erklären Java Basics - Anfänger-Themen 8
B Code erklären Java Basics - Anfänger-Themen 2
D code erklären bitte ! Java Basics - Anfänger-Themen 15
I Einlesen von Dateien- wer kann mir den Code erklären ? Java Basics - Anfänger-Themen 4
G eine zeile code erklären Java Basics - Anfänger-Themen 3
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben