Output korrekt trotz falschem Lösungsweg !?

Kotelettklopfer

Bekanntes Mitglied
Ich bin gerade dabei eine Übung aus dem Buch "Java von Kopf bis Fuß" zu lösen.
Hier geht es um das sotieren von Codeschnipseln um einen vorgegebenen Output zu bekommen.

Auf Anhieb konnte ich den richtige Output erzeugen.Ich verstehe auch so ungefähr was da passiert, finde aber eine Stelle unlogisch.
Desweiteren wurde im Buch die Lösung anders dargestellt, sodass ich mich frage, ob es bei meinem Weg sich vielleict nur um einen Glückstreffer handelt.

Hier meine Vorgehensweise:

[CODE lang="java" title="Meine Lösung" highlight="22"]class TestArrays {


public static void main(String[] args) {
String[] inseln = new String[4];
int[] index = new int[4];

inseln[0] = "Bermudas";
inseln[1] = "Fidschi";
inseln[2] = "Azoren";
inseln[3] = "Kuba";

index[0] = 1;
index[1] = 3;
index[2] = 0;
index[3] = 2;

int ref;
int y = 0;
while (y < 4) {
ref = index[y];
y = y + 1;
System.out.print("Insel = ");
System.out.println(inseln[ref]);
}
}
}[/CODE]

Ergebnis:

1628893465517.png

Hier bekomme ich das richtige Ergebnis obwohl ich eigentlich finde Zeile 22 "y = y + 1" ist hier falsch.
Meiner Meinung nach, müsste es nach dem Output kommen, weil er sonst den Index[0] überspringt.
Wieso wird Index[0] trotzdem berücksichtigt, wo ich doch eigentlich vor dem Sys.out schon bei y = 1 bin?


Liege ich vielleicht falsch und mein Weg ist trotzdem richtig?

Hier mal zum Vergleich die Lösung aus dem Buch:

[CODE lang="java" title="Lösung Buch"]class TestArrays {


public static void main(String[] args) {
int[] index = new int[4];
index[0] = 1;
index[1] = 3;
index[2] = 0;
index[3] = 2;

String[] inseln = new String[4];
inseln[0] = "Bermudas";
inseln[1] = "Fidschi";
inseln[2] = "Azoren";
inseln[3] = "Kuba";

int y = 0;
int ref;
while (y < 4) {
ref = index[y];
System.out.print("Insel = ");
System.out.println(inseln[ref]);
y = y + 1;
}
}
}[/CODE]
 

JensXF

Mitglied
Hier bekomme ich das richtige Ergebnis obwohl ich eigentlich finde Zeile 22 "y = y + 1" ist hier falsch.
Meiner Meinung nach, müsste es nach dem Output kommen, weil er sonst den Index[0] überspringt.
Wieso wird Index[0] trotzdem berücksichtigt, wo ich doch eigentlich vor dem Sys.out schon bei y = 1 bin?
Bei deiner Ausgabe verwendest du ref als Variable für den Index, die erst im nächsten Schleifendurchlauf ihren Wert durch y=y+1 ändert.
 

speare1

Mitglied
Liege ich vielleicht falsch und mein Weg ist trotzdem richtig?
Geht beides, die while-Schleife ist allerdings unschön, besser eine for-Schleife:

Java:
    public static void main(String[] args) {
        int[] index = new int[4];
        index[0] = 1;
        index[1] = 3;
        index[2] = 0;
        index[3] = 2;

        String[] inseln = new String[4];
        inseln[0] = "Bermudas";
        inseln[1] = "Fidschi";
        inseln[2] = "Azoren";
        inseln[3] = "Kuba";

        IntStream.range(0, index.length).mapToObj(i -> inseln[index[i]]).forEach(System.out::println);
    }

Du kannst den Index direkt nach dem ref = index[y]; erhöhen, weil er danach nicht mehr verwendet wird. Das ist allerdings ein Anti-Pattern: https://stackoverflow.com/a/971442/11639459

Verwende also eine for-Schleife - oder inkrementiere den Index immer am Schluss
 
K

kneitzel

Gast
Also in dem SO Beitrag, den Du verlinkst, geht es um die Verwendung des prefix increment/decrement operator. Das ist aber hier gar nicht das Thema.

Und generell ist der Code auch so strukturiert in Ordnung und ich hätte da keinerlei Bedenken. Denn das entspricht auch schlicht dem, was man bei Iteratoren sieht:
Java:
while (hasNext()) {
    ref = next();
    
    // do something with ref
}

Der Ausdruck entspricht dem hasNext und das andere dem next Aufruf.

Und nebenbei bemerkt: Was soll eine Stream Lösung dem TE weiter helfen? Das er gerade dabei ist, das Buch "Java von Kopf bis Fuss" durchzugehen, hat er ja deutlich geschrieben.
 
K

kneitzel

Gast
Weil das eine verkürzte for-Schleife ist?! Oder ist das schon zu viel Transferleistung verlangt?
Was ist eine verkürzte for Schleife? Das ist und bleibt eine while Schleife. Und dein Hinweis, das da ggf. eine for Schleife besser wäre, um den geht es nicht erst. Ansonsten: Willkommen zurück Tobias. Schön, wieder deine unausgeglichene Art und Weise zu lesen ...
Des Weiteren ist mir ziemlich egal ob du das Anti-Pattern erkennst oder nicht...
Da Du das Anti-Pattern nicht benennst und auch sonst nichts dazu bringst außer einen Link auf SO, wo etwas ganz anderes behandelt wird, ist da auch nicht wirklich etwas zu erkennen. Außer eben das typische (nervige) Auftreten mit mangelhaftem Textverständnis.

Bei Iterator#next() ist die Indexvariable gekapselt, also gar nicht vergleichbar.
Nur weil da etwas gekapselt ist, ist die Parallelität dennoch da. Und selbst Du hast diese erkannt! Super! Dann sind wir hier - ohne dass du es willst, ja scheinbar doch einer Meinung was diesen Punkt angeht.

Das ist aber nicht wirklich zu diskutieren, denn das sind Punkte, die für den TE und seine Frage absolut unerheblich sind.
 

Jw456

Top Contributor
Weil das eine verkürzte for-Schleife ist?! Oder ist das schon zu viel Transferleistung verlangt?
Der TE zeigt ja mit seinem Buch das er noch ziemlich am Anfang beim lernen von Java ist.

Da die Lösung vom Buch auch recht einfach gehalten ist.

Gehe ich mal davon aus das er das Thema Streams , Lambdas, Methodenreferenzen wohl noch nicht hatte.
Somit dem TE im Moment mehr verwirren als helfen wird.
 

temi

Top Contributor
Der TE zeigt ja mit seinem Buch das er noch ziemlich am Anfang beim lernen von Java ist.

Da die Lösung vom Buch auch recht einfach gehalten ist.

Gehe ich mal davon aus das er das Thema Streams , Lambdas, Methodenreferenzen wohl noch nicht hatte.
Somit dem TE im Moment mehr verwirren als helfen wird.
Und vermutlich geht es auch gerade um die while-Schleife und nicht um die for-Schleife...
 
K

kneitzel

Gast
Evtl. noch kurz ein paar Worte zu Anti Pattern, weil dies eben gefallen ist.

Man versucht in der Entwicklung, sich gewisse Dinge zu überlegen: Wie löse ich bestimmte Probleme. Gewisse Vorgehen sind dann als sogenannte Pattern bekannt.

Das hat einen großen Vorteil: Man hat etwas, das man direkt benennen kann. Ich muss nicht groß etwas beschreiben, sondern ich kann kurz sagen: Du kannst da das Observer Pattern nutzen. ==> Dann weiss man, was gemeint ist oder eine Google Suche hilft, das direkt zu finden.

Ebenso gibt es dann typische Fehler. Was sollte man nicht machen? Das kann man dann als Anti Pattern bezeichnen.
Aber auch hier ist wichtig: Man muss es erläutern. Eine Aussage "Anti Pattern" hat ebenso wenig Aussagekraft wie "das ist falsch". Und da wird auch deutlich: Der Code macht, was er soll, daher muss das falsch erläutert werden.

Und @Kotelettklopfer: Dein Code ist nicht falsch. Daher bitte ignoriere @speare1 komplett und lass Dich nicht verunsichern!

Dieses Anti Pattern Gehabe ist daher auch schlicht abzulehnen, so es eben nicht klar benannt wird, was denn falsch sein soll und vor allem: wieso!

Aber diese negative Herangehensweise ist unüblich. Es ist üblich, Regeln positiv zu formulieren. Dann heißt es z.B. "Composition over Inheritance". Dann hat man einen klaren Namen. Das kann man in Google schnell finden incl. viel Dokumentation, wieso denn das eine dem anderen vorzuziehen ist. Oder wenn SQL Befehle als Strings zusammen gewürfelt werden - dann gibt es eine klare Aussage diesbezüglich: Was genau ist warum problematisch.

Und es ist klar: Eine Aussage "Das ist ein Anti-Pattern" hilft nicht wirklich weiter. Es muss also doch immer deutlich gemacht werden, was wieso zu bemängeln ist. gerade hier in dem Forum geht es ja speziell darum, weiter zu helfen. Da sind dann Begründungen und Erklärungen immer geboten.
 

mihe7

Top Contributor
Hier bekomme ich das richtige Ergebnis obwohl ich eigentlich finde Zeile 22 "y = y + 1" ist hier falsch.
Meiner Meinung nach, müsste es nach dem Output kommen, weil er sonst den Index[0] überspringt.
Wieso wird Index[0] trotzdem berücksichtigt, wo ich doch eigentlich vor dem Sys.out schon bei y = 1 bin?
Ganz einfach: int ist ein primitiver Datentyp, der einfach eine vorzeichenbehaftete 32-Bit-Ganzzahl darstellt. ref ist eine Variable vom primitiven Typ int, d. h. der Bezeichner ref steht stellvertretend für eine vorzeichenbehaftete 32-Bit-Ganzzahl.

Du setzt in Zeile 21 den Wert von ref auf den Wert von index[y]. Danach änderst Du ref nicht mehr und gibst in Zeile 24 inseln[ref] aus. Was Du zwischenzeitlich mit dem y anstellst, spielt also überhaupt keine Rolle.
 

Kotelettklopfer

Bekanntes Mitglied
Ach ich mag dieses Forum und seine Diskussionsrunden xD
Danke euch allen, war nur etwas verunsichert ob mein weg so passt.
Halte fest: Schleifenzähler ans Ende
 

Kotelettklopfer

Bekanntes Mitglied
Am schönsten sind die Diskussionen zwischen Konrad und Tobias: 🍿


public brauchst Du nur, wenn auf die Klasse auch außerhalb ihres Package zugegriffen werden soll.
Kurze Erklärung:

Ein anderes Package wäre aber nicht gegeben, wenn ich zwei Klassen habe und jede steht in einer eigenen Datei (.java) ?
Hier könnte ich das public auch weg lassen !?
 

mihe7

Top Contributor
Das ist ganz einfach: wenn bei einer Klasse kein Sichtbarkeitsmodifizierer angegeben ist, dann ist sie nur innerhalb ihres Packages sichtbar. Willst Du das ändern, kannst Du public mit angeben.

Ein anderes Package wäre aber nicht gegeben, wenn ich zwei Klassen habe und jede steht in einer eigenen Datei (.java) ?
Nein. Der Sinn von Packages ist ja gerade, Klassen zu "gruppieren".

Java:
package a; //  Klasse liegt im Package a

class A {} // Klasse A ist nur im Package a sichtbar

Java:
package b;

public class B {} // Klasse ist überall sichtbar, da public

Darüber hinaus werden Packages in Java auf die Verzeichnisstruktur abgebildet. Heißt: die Klasse A oben muss sich im Verzeichnis a, die Klasse B im Verzeichnis b befinden.

In dem Beispiel könnte Klasse A die Klasse B verwenden, aber nicht umgekehrt.
 
K

kneitzel

Gast
Am schönsten sind die Diskussionen zwischen Konrad und Tobias: 🍿
Och, ich hoffe ja, dass es nicht so schlimm ist. :)

Aber gewisse Dinge kann ich einfach nicht unkommentiert stehen lassen. Da wird einem engagierten Anfänger irgendwas um die Ohren gehauen, was nun wirklich kontraproduktiv ist.
Oder siehst Du hier das "Anti Pattern", das erwähnt wurde? Vor allem mit dem Verweis auf SO? Ich lasse mich ja gerne eines besseren belehren... (Es kommt ja durchaus vor, dass ich mal was missverstanden habe und durchaus was richtiges gemeint war.)
 

mihe7

Top Contributor
So, jetzt musste ich erstmal nachschauen, worum es ging :)

Du kannst den Index direkt nach dem ref = index[y]; erhöhen, weil er danach nicht mehr verwendet wird. Das ist allerdings ein Anti-Pattern:
Vermutlich meinte er mit "direkt nach dem .... erhöhen" ein ref = index[y++];, was auch den Link auf SO erklären würde. Allerdings hat das für mich nichts mit "Pattern" zu tun, sondern ist einfach scheiße zu lesen.
 

White_Fox

Top Contributor
Auf Anhieb konnte ich den richtige Output erzeugen.Ich verstehe auch so ungefähr was da passiert, finde aber eine Stelle unlogisch.
Desweiteren wurde im Buch die Lösung anders dargestellt, sodass ich mich frage, ob es bei meinem Weg sich vielleict nur um einen Glückstreffer handelt.
Mal was ganz Grundsätzliches: Normalerweise führen viele Wege nach Rom und eine Lösung, die zum gewünschten Ergebnis führt, ist schonmal nicht falsch.
Es kann natürlich sein, daß mit der Musterlösung etwas Bestimmtes gezeigt werden soll, was in einer alternativen Lösung aber völlig untergeht (wie hier: die Aufgabe soll dir die while-Schleife näherbringen, da hilft dir eine Lösung mit Streams nicht).
Und es kann passieren daß die Ergebnisse zwischen Musterlösung und einer Alternative auseinanderlaufen, wenn man die Kriterien nachträglich enger fasst - aber das ist m.M.n. unzulässig, da damit die Anforderungen nachträglich geändert werden.

Mach mal weiter so, Lesen, Üben, Fragen stellen, usw. dann wird aus dir noch ein richtiger Softwareentwickler. Und vor allem daß du die Übungen selber erweiterst finde ich gut...das ist genau der Prozess, den man eigentlich im Studium durchlaufen sollte.
 

White_Fox

Top Contributor
Im Buch werden die Klassen nur mit class Hund deklariert. Warum wird dort kein public etc verwendet ?
Sichtbarkeitsmodifizierer werden in dem Buch auch noch erklärt, aber was man damit so richtig macht steht eigentlich in "Entwurfsmuster von Kopf bis Fuß" drin (falls du dir danach noch ein Buch ins Regal stellen willst, wäre das meine Empfehlung, damit kannst du nahtlos weitermachen, aber mach erstmal das eine fertig).
 
K

kneitzel

Gast
Vermutlich meinte er mit "direkt nach dem .... erhöhen" ein ref = index[y++];, was auch den Link auf SO erklären würde. Allerdings hat das für mich nichts mit "Pattern" zu tun, sondern ist einfach scheiße zu lesen.
Aber das ist ja etwas, das in dem Thread nie vorher erwähnt wurde, oder habe ich da etwas übersehen? Daher ging es (aus meiner Sicht) von Anfang an vermutlich nur um die Aussage, dass die Erhöhung der Schleifenvariable lieber ans Ende gehört. Bei so Zähl-Schleifen ist dies besser lesbar. (Einfache klare Aussage, wird vermutlich sofort abgenickt ohne dass Diskussionen notwendig wären.)
 

Kotelettklopfer

Bekanntes Mitglied
Da ich ja meine Übungen immer selbst erweiter, habe ich hier mal versucht mein neues Wissen über setter/getter umzusetzen.
Ergebnis passt, frage mich ob es auch vom Stil her korrekt ist?
Hoffe es ist ok, wenn ich dieses Thread nutze um immer mal wieder Fachwissen abzugreifen :)

Java:
class Hund {
    private int größe;
    private String name;

    public int getGröße() {
        return größe;
    }

    public void setGröße(int setGröße) {
        größe = setGröße;
    }

    public String getName() {
        return name;
    }

    public void setName(String setName) {
        name = setName;
    }

    void bellen(int anzahlBeller) {
        while (anzahlBeller > 0) {
            if (größe > 60) {
                System.out.println(name + " bellt:" + "Wuff! Wuff!");
            } else if (größe > 14) {
                System.out.println(name + " bellt:" + "Wau! Wau!");
            } else {
                System.out.println(name + " bellt:" + "Jip! Jip!");
            }
            anzahlBeller = anzahlBeller - 1;

        }


    }
}

class HundTestLauf {
    public static void main(String[] args) {
        Hund eins = new Hund();
        eins.setGröße(70);
        eins.setName("Theo");
        Hund zwei = new Hund();
        zwei.setGröße(8);
        zwei.setName("Franz");
        Hund drei = new Hund();
        drei.setGröße(35);
        drei.setName("Kalle");

        eins.bellen(5);
        zwei.bellen(3);
        drei.bellen(1);
    }

}
 

mihe7

Top Contributor
Das sieht ok aus.

Nebenbei: ich würde im Quelltext nur ASCII verwenden (groesse, statt größe) -> spart Ärger.

Nachtrag: jetzt habe ich gerade noch was gesehen.

Der Parametername setGröße ist nicht schön. Nimm einfach groesse (oder was anderes, wie z. B. eineGroesse, wenn Du in der Methode das this zum Zugriff auf die Instanzvariable vermeiden willst).

Gleiches gilt natürlich für name.
 

White_Fox

Top Contributor
Auch 'ß' solltest du im Quellcode vermeiden.

Solcherlei Zeichen können ein Problem werden, wenn dein Programm mal auf einer JVM mit anderen Spracheinstellungen läuft. Ich hab zwar auch nicht verstanden warum, aber jedenfalls war das die Erklärung die ich mal irgendwo dazu gefunden hatte.

Letztendlich habe ich aber aus anderen Gründen irgendwann mal angefangen, ausschließlich in Englisch zu programmieren.
 

mrBrown

Super-Moderator
Mitarbeiter
Solcherlei Zeichen können ein Problem werden, wenn dein Programm mal auf einer JVM mit anderen Spracheinstellungen läuft. Ich hab zwar auch nicht verstanden warum, aber jedenfalls war das die Erklärung die ich mal irgendwo dazu gefunden hatte.
Zur Laufzeit ist das egal, class-Dateien sind immer in UTF-8 (zumindest der Text-Teil). Relevant ist das zur Compile-Zeit, da wird je nach OS ein anderes Encoding benutzt (wenn man es nicht explizit angibt). Wenn man sich da auf ASCII beschränkt sieht es in den verwendeten Encodings gleich aus, sodass quasi egal ist, ob das passende verwendet wird.
 

Neumi5694

Top Contributor
@ White Fox Mit der Sprache der JVM oder des Compilers hat das nichts zu tun, somdern damit, wie die Quell-Dateien gespeichert und eingelesen werden.
Wenn du eine Textdatei einliest, musst du immer wissen, in welcher Codierung sie gespeichert wurde.
Der Standard für Windows ist z.B. ANSI (in unserem Fall "windows-1252"), für Batch-Dateien (.cmd und .bat) wird allerdings ISO850(bzw. IBM850) erwartet, Unix verwendet wieder was anderes.

Liest der Compiler nun die Datei auf einem System ein, welches eine andere ANSI-Zeichentabelle oder eine komplett andere verwendet, dann werden diese Zeichen falsch eingelesen, das der Compiler annimmt, dass die Dateien im Systemstandard gespeichert sind.
Die ASCII Standardzeichen sind in allen gängigen 8-Bit Tabellen gleich, da passiert das im Normalfall nicht. Nur ASCII-Zeichen im Code zu verwenden, ist also schon mal super. Damit kann es dir aber immer noch passieren, dass Strings auf einem anderen System falsch aus dem Quellcode eingelesen und damit falsch kompiliert werden.
Auf der sicheren Seite bist du, wenn du die Quelldateien in einem sprachunabhängigen Format wie UTF8 speicherst und dem Compiler per Parameter -encoding sagst, dass sie als UTF8 eingelesen werden sollen.
 

LimDul

Top Contributor
Eigentlich sollten Umlaute im Quelltext kein Problem sein. Solange man z.B. ein Build Tool wie mavne verwendet und da auch UTF-8 angegeben ist, geht das eigentlich.

Aber wie das so mit Eigentlich ist - irgendwo geht es dann doch auf die Bretter, seien es externe Analyse Tools die damit nicht klarkommen, sie das irgendwer die Datei in einem Editor aufmacht, der damit nicht klarkommt und wieder speichert etc.

Man sieht es schon hier im Forum schön - das Syntax Highlighting klappt nicht. wenn man sich anschaut wie setName und setGröße unterschiedlich farblich hervorgehoben wird.

Daher sollte man Quelltext es vermeiden.

Bei Kommentaren ist man da oft entspannter - die werden deutlich seltener geparst und selbst wenn da die Umlaute mal kaputt gehen, geht nicht die ganze Anwendung kaputt.

Bei Strings kann man anstelle von Umlauten einfach "\u12345" schreiben (also den UTF-8 Codepoint angeben), manche Tools machen das automatisch. Aber da gilt es ähnlich wie bei Kommentaren - diese Teile laufen seltener durch Analysetools sind deswegen etwas unkritischer.


Wo man es aber auf jeden Fall vermeiden muss (und deswegen auch im Quelltext es vermeiden muss) sind Datei- & Verzeichnisnamen. Und da Klassen bzw. Packages 1:1 Dateien bzw. Ordnern entsprechend würde ich es sowohl bei Klassen- als auch bei Packages verbieten. Umlaute in Dateien führen zu 99% irgendwo zu Problemen, das geht selten gut.
 

mihe7

Top Contributor
Nur ASCII-Zeichen im Code zu verwenden, ist also schon mal super. Damit kann es dir aber immer noch passieren, dass Strings auf einem anderen System falsch aus dem Quellcode eingelesen und damit falsch kompiliert werden.
Ja, z. B. auf einem EBCDIC-System.

Auf der sicheren Seite bist du, wenn du die Quelldateien in einem sprachunabhängigen Format wie UTF8 speicherst
Wenn man nur ASCII-Zeichen verwendet, ist die Datei auch UTF-8-kodiert :p

Aber ja, die Angabe des UTF-8-Encodings beim Compiler ist in jedem Fall sinnvoll. Tatsächlich muss man die Einstellung auch für die Bearbeitung des Quelltexts vornehmen, um nicht versehentlich eingefügte Nicht-ASCII-Zeichen in z. B. Windows-Encoding zu speichern.
 

Neumi5694

Top Contributor
Wenn man nur ASCII-Zeichen verwendet, ist die Datei auch UTF-8-kodiert :p

Aber ja, die Angabe des UTF-8-Encodings beim Compiler ist in jedem Fall sinnvoll. Tatsächlich muss man die Einstellung auch für die Bearbeitung des Quelltexts vornehmen, um nicht versehentlich eingefügte Nicht-ASCII-Zeichen in z. B. Windows-Encoding zu speichern.
Dabei ging's mir eher um die hardcodierten Texte/Strings im Quellcode (falls man welche hat), ansonsten ist dem nichts hinzuzufügen :)
 

Kotelettklopfer

Bekanntes Mitglied
Jetzt doch nochmal eine Frage zum lernen.
Ich bin ja wie bekannt am Java von Kopf bis Fuß dran.
Teilweise merke ich aber wie Dinge die ein Kapitel vorher erklärt wurden auf einmal wieder weg sind.
Ich sitze dann davor und ...leere.
Ist das normal und ich sollte erstmal das Buch durchgehen, irgendwas wird hängenbleiben oder sollte man sich ein Kapitel immer und immer wieder in den Kopf hämmern bis es sitzt ?

Ist echt gerade wieder so ein downer xD
 

LimDul

Top Contributor
Jetzt doch nochmal eine Frage zum lernen.
Ich bin ja wie bekannt am Java von Kopf bis Fuß dran.
Teilweise merke ich aber wie Dinge die ein Kapitel vorher erklärt wurden auf einmal wieder weg sind.
Ich sitze dann davor und ...leere.
Ist das normal und ich sollte erstmal das Buch durchgehen, irgendwas wird hängenbleiben oder sollte man sich ein Kapitel immer und immer wieder in den Kopf hämmern bis es sitzt ?

Ist echt gerade wieder so ein downer xD
Learning bei Doing und Wissen wo es steht.

Dinge bleiben besser bzw. nur haften, wenn man sie anwendet. Das heißt ohne aktiv programmieren wird es schwer das sich einzuprägen. Dementsprechend ist reines Buchstudium ohne nebenbei zu programmieren vermutlich nicht so effektiv.

Das andere ist - man kann sich eh nicht alles merken. Wichtig ist, dass man weiß wo es steht und wo man nachschlagen kann. Man kann nie alles wissen und wichtiger als Dinge exakt zu wissen, ist sich bewusst zu sein, wo man Dinge nicht exakt weiß und wo man das Wissen nachschlagen kann, Der Umgang mit API-Doku und Google ist essentiell. Man muss nur dafür sorgen, dass man auch versteht, was man da liest oder findet. Ansonsten kopiert man nur ohne Sinn & Verstand Code-Schnippsel von Stackoverflow :)
 

White_Fox

Top Contributor
Ich habe Java von Kopf bis Fuß hauptsächlich während der S-Bahnfahrt (ca. 2x1h/d) gelesen, ohne die Übungen direkt praktisch am Rechner durchzutickern. Die schriftlichen Übungen habe ich so im Kopf gemacht ohne die Lösungen aufzuschreiben.
Ich muß dazu allerdings sagen, daß ich, bevor ich mit Java anfing, tatsächlich bereits C und LabView kannte, viel in VBA programmiert habe und davor bereits in Assembler programmiert habe. Mein Lernschwerpunkt lag damals woanders als bei dir jetzt. Ich wollte die Eigenheiten von Java kennenlernen, das, was Java z.B. so anders im Vergleich zu C macht, du dagegen lernst überhaupt erstmal zu programmieren. If-Verzweigungen hat so ziemlich jede Programmiersprache, und while/do-while/for-Schleifen ebenfalls.

Und da muß ich LimDul Recht geben: Einfach üben, üben, üben. Das kommt alles nach und nach. Mein Prof sagte damals, Programmieren lernt man nur in dem man programmiert. Recht hat er damit gehabt.

Ansonsten hätte ich noch denselben Tipp für dich, den ich in irgendeinem Nachbarthread schon gegeben habe: Versuche weniger, die Sprachelemente auswendigzulernen, sondern versuche, mehr zu verstehen. Versuche mal, Quelltext als normalen Text zu lesen und die Wörter und Sprachelemente in Bedeutung zu übersetzen.
Gut geschriebener Quellcode liest sich wie eine Beschreibung, was das Programm macht (oder machen soll). Sprachen wie Java sind weitgehend frei von sinn- oder bedeutungslosen Zeichen. Versuche, deren Bedeutung beim Lesen zu erfassen.

Das fällt Nativespeakern natürlich weitaus leichter als uns. Wer als Muttersprachler einen deutschen Satz hört oder liest, kann dessen Bedeutung kaum an sich vorbeirauschen lassen auch wenn er nicht aktiv konzentriert zuhört - wobei ich einfach mal behaupte, daß auch bei Muttersprachlern, die zusätzlich die englische Sprache auch sehr gut beherrschen, daß nicht halb so gut funktioniert (jedenfalls nicht ohne langjährigen Aufenthalt in einer rein englischsprachigen Umgebung). Ich komme mit Englisch halbwegs klar, aber wenn ich nicht aktiv lese oder höre, geht die Bedeutung völlig an mir vorbei.
 

Kotelettklopfer

Bekanntes Mitglied
Jemand nen Vorschlag für ne API Dokumentation auf deutsch ?
Des englischen bin ich zwar Mächtig, aber gerade am Anfang würde es einiges vereinfachen.
Gerne auch Buchvorschläge aber dann relativ aktuell und nicht zu Java 5 :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
B Output Java Basics - Anfänger-Themen 1
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
O Input/Output newbile und keine Ahnung! Java Basics - Anfänger-Themen 16
K output Java Basics - Anfänger-Themen 3
Harlequin Compiler-Fehler Text Adventure - "Long Output" Fehler Java Basics - Anfänger-Themen 3
E 2 Matrizen multiplizieren - Output fehlt... Java Basics - Anfänger-Themen 5
A Input/Output Prozess Output genauso in der Konsole ausgeben Java Basics - Anfänger-Themen 0
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
A Erste Schritte Java Output wird nicht angezeigt Java Basics - Anfänger-Themen 7
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
K cmd output.txt Java Basics - Anfänger-Themen 5
T Output in CMD anzeigen lassen? Java Basics - Anfänger-Themen 1
D Runtime exec output wiedergeben Java Basics - Anfänger-Themen 1
B Input/Output output Datenstrom filtern Java Basics - Anfänger-Themen 0
J Möchte gern den Konsolen Output auf JTextPane umleiten Java Basics - Anfänger-Themen 4
fLooojava Output in einer Textarea einfärben Java Basics - Anfänger-Themen 7
fLooojava OOP Übergabe/Output in Textfield Java Basics - Anfänger-Themen 4
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
S Output Problem Java Basics - Anfänger-Themen 2
O OOP Input & Output in der GUI-Programmierung Java Basics - Anfänger-Themen 2
C Input & Output Frage Java Basics - Anfänger-Themen 4
E Input & Output Problem Java Basics - Anfänger-Themen 7
F Input/Output Falsches Output in Datei! Java Basics - Anfänger-Themen 4
G Output aus fremden Klasse auswerten Java Basics - Anfänger-Themen 8
C Input/Output Dynamischer Output von Arrays Java Basics - Anfänger-Themen 3
P Windows vs. Ubuntu verschiedener Output Java Basics - Anfänger-Themen 31
L Output mit zwei ungleichen Strings Java Basics - Anfänger-Themen 17
B In- und Output von XML-Daten in und aus einem Objekt Java Basics - Anfänger-Themen 6
M Input/Output JAXB XML Output von Objekt-Listen? Java Basics - Anfänger-Themen 2
S Compiler-Fehler see the compiler error output Java Basics - Anfänger-Themen 6
S Input/Output Data-Input/Output-Stream Java Basics - Anfänger-Themen 2
B Threads Methoden mit Output in Threads verpacken Java Basics - Anfänger-Themen 4
A Input/Output Taskmanager Output Java Basics - Anfänger-Themen 2
T Objekt Output zu String Array Java Basics - Anfänger-Themen 4
M Output Input im Cmd Fenster Java Basics - Anfänger-Themen 7
T Output in File funktioniert nicht Java Basics - Anfänger-Themen 3
B Limit console output in Eclipse Java Basics - Anfänger-Themen 6
T Java Output File Gliedern Java Basics - Anfänger-Themen 5
P Output einer anderen Anwendung verwenden Java Basics - Anfänger-Themen 7
D Input Output Java Basics - Anfänger-Themen 8
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
L StdIn Stdout / Input Output Aufgabe Java Basics - Anfänger-Themen 3
G Output Fehler. Java Basics - Anfänger-Themen 20
M Input/Output Stream aus einem String Java Basics - Anfänger-Themen 2
J IO Frage Hex-Output - Anfängerfrage Java Basics - Anfänger-Themen 5
M Datei Output als Append Java Basics - Anfänger-Themen 3
B Output window grabben? Java Basics - Anfänger-Themen 3
S printable ASCII output erzeugen Java Basics - Anfänger-Themen 3
J File Input/Output und Applet Java Basics - Anfänger-Themen 2
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
dome385 Ball Ball Kollision physikalisch korrekt Java Basics - Anfänger-Themen 5
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Map - Values nicht korrekt ersetzt (Abzählspiel) Java Basics - Anfänger-Themen 13
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
M Strasse und Huasnummer korrekt eingeben Java Basics - Anfänger-Themen 13
D JAVA JDK korrekt installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 2
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
E Gleitkomma zahlen mathemathisch korrekt multiplizieren Java Basics - Anfänger-Themen 5
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
M JMadex funktioniert nicht korrekt Java Basics - Anfänger-Themen 8
G OOP Klassenaufbau korrekt? / MVC Java Basics - Anfänger-Themen 1
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
J String Ausgabe nicht-leerer Zeichen nicht korrekt Java Basics - Anfänger-Themen 10
K Wie übergebe ich hier korrekt die Werte Java Basics - Anfänger-Themen 5
U Attributsnamen korrekt oder falsch? Java Basics - Anfänger-Themen 4
G Exe-Datei korrekt in JAR ablegen Java Basics - Anfänger-Themen 4
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
Burny91 Compiler-Fehler Regular Expressions matchen nicht korrekt Java Basics - Anfänger-Themen 5
M Tag Monat Jahr korrekt berrechnen! Java Basics - Anfänger-Themen 10
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
M String wird nicht korrekt ausgelesen. Java Basics - Anfänger-Themen 11
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
F JSlider korrekt implementieren Java Basics - Anfänger-Themen 19
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
S Benutzereingabe über Scanner Klasse korrekt behandeln Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
F Verschlüsselten Text korrekt ausgeben Java Basics - Anfänger-Themen 2
Developer_X Applikation kann nicht korrekt von anderen Applikationen aufgerufen werden Java Basics - Anfänger-Themen 10
K Symbole werden nicht korrekt angezeigt ? Java Basics - Anfänger-Themen 7
G Maven Dependency für Oracle JDBC-Driver korrekt festlegen Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
G Wochentag und Jahrtag werden nicht korrekt ermittelt Java Basics - Anfänger-Themen 8
G SwingWorker funktioniert nicht korrekt Java Basics - Anfänger-Themen 16
J Ein Fenster korrekt schließen? Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
S UML korrekt umgesetzt? Java Basics - Anfänger-Themen 14
U GUI wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben