Code erklären

marcooooo

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

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);
    }
 
D

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

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 ^^
 
D

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

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

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

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
 
temi

temi

Top Contributor
hm das weiß ich leider nicht
Dann solltest du jetzt intensiv darüber nachdenken. Du willst den Kram ja lernen, dann musst du ihn auch verstehen.

Was steht denn in der zweiten Zeile? Wenn die Länge des Arrays 1 ist, dann enthält dieses Array den gesuchten Wert nicht. Warum kann man das sicher sagen?
 
kneitzel

kneitzel

Top Contributor
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

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.
 
kneitzel

kneitzel

Top Contributor
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

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.
Iterative:
public static boolean containsValueIterative(int[] workArray, int value) {
        for (Integer i : workArray) {
            if (i == value)
                return true;
        }
        return false;
    }
 
temi

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

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.
 
D

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

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).
 
T

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

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.
 
mihe7

mihe7

Top Contributor
@kneitzel über den Chat kann man anscheinend keine Bilder hochladen, also hier

Imagepipe_0.jpg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Hierarchi im code darstellen Java Basics - Anfänger-Themen 11
S Struktogramm zu Code Java Basics - Anfänger-Themen 4
F Code kürzen Java Basics - Anfänger-Themen 9
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
S Hilfe bei meinem Code [Schleife]? Java Basics - Anfänger-Themen 5
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
J Array eintrag mit möglichst wenig code lösen Java Basics - Anfänger-Themen 16
N SelectionSort ; Code erläutern Java Basics - Anfänger-Themen 13
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
B Prüfen, ob Country Code in Europa ist? Java Basics - Anfänger-Themen 24
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
O I/O Code Gerüst vorgegeben Java Basics - Anfänger-Themen 30
R Dieser Code sagt mir nichts... Java Basics - Anfänger-Themen 4
C Klassendiagramm aus Java-Code entwickeln Java Basics - Anfänger-Themen 3
A Eine Krone in der Textausgabe - Mein Code Java Basics - Anfänger-Themen 11
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
J Variablen Hilfe bei diesem Code Java Basics - Anfänger-Themen 6
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
R Code Verkürzen? Java Basics - Anfänger-Themen 19
B Interpreter-Fehler Code verstehen und Compilerfehler Java Basics - Anfänger-Themen 2
H Interface Hilfe mit Code Java Basics - Anfänger-Themen 4
C Verbesserungsvorschlag für effizienteren Code - (Project Euler10) Java Basics - Anfänger-Themen 26
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
H Code erläutern Java Basics - Anfänger-Themen 35
B Code Zeile unklar Java Basics - Anfänger-Themen 9
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
E ASCII-Code in Java ausgeben Java Basics - Anfänger-Themen 6
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
H Frage um den Code bildlich darzustellen Java Basics - Anfänger-Themen 2
U Methoden Code sinnvoll in Methoden einteilen Java Basics - Anfänger-Themen 2
R Problem mit Code Java Basics - Anfänger-Themen 3
D Erste Schritte Kontrolle Code Java Basics - Anfänger-Themen 17
D Text als Code in java-forum.com formatieren. Wie ? Java Basics - Anfänger-Themen 3
H 3 oder 4 Fehler im Code Java Basics - Anfänger-Themen 0
H 3 oder 4 Fehler im Code Java Basics - Anfänger-Themen 19
N Wie lerne ich neuen Code zu benutzen? Java Basics - Anfänger-Themen 6
S Unklarer Code (was passiert hier?) Java Basics - Anfänger-Themen 1
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
WerIstDerBoogieman? Code review bzw. "Coaching" Java Basics - Anfänger-Themen 34
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
G Zinsberechnung - Fehler im Code Java Basics - Anfänger-Themen 35
U Methoden Code Quality und Stil Java Basics - Anfänger-Themen 5
J Klammer im Code Java Basics - Anfänger-Themen 11
J Code Verständnis Java Basics - Anfänger-Themen 9
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben