Brauche hilfe beim Programmieren?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Also spontan sehe ich, dass du einige Semikola vergessen hast und einmal eine Klammer nicht geschlossen hast.

Aber nicht verzweifeln! Das, was du jetzt gerade machen musst, ist das eigentliche Programmieren. Das Suchen von Fehlern in deinem Code!

Gehe von oben nach unten alle Fehler durch und gucke, was nicht stimmt. Wenn du über die rot unterstrichenen Worte hoverst, müsste dir die IDE anzeigen, was für Fehler du gemacht hast. Dann kannst du die entsprechend korrigieren.

Kleiner Tipp:
Fotografier deinen Code nicht ab, sondern benutze eine Webseite wie https://pastebin.com/ um dort deinen Code reinzukopieren und den Link dazu zu posten. Das macht es einem viel einfacher, deinen Code zu lesen!

Wenn du nicht weißt, was die Fehler bedeuten, die die IDE dir anzeigt, dann benutz entweder Google oder schreib mir unter diese Antwort, was du nicht verstehst, dann erkläre ich es dir.

Woher ich das weiß:Studium / Ausbildung

Jaro123lolipop 
Fragesteller
 11.07.2020, 21:23

Danke erstmal für die Antwort 👍

Könntest du mir sagen was cannot make a static reference to the non static field Schere bedeutet

0
RainySky  11.07.2020, 21:35
@Jaro123lolipop

"Cannot make a static reference to a non static field" bedeutet, dass du eine statische Variable/Methode machen willst, von etwas, das nicht statisch ist.

Wenn ich das richtig sehe, müsste es dadurch kommen, dass deine Methode "create" statisch sein soll, aber dein Enum es nicht ist.
Mach doch mal das "static" von dieser Methode weg. Das müsste dann, denke ich, funktionieren. Und wenn nicht, dann schreibst du mir den Fehler, der dann angezeigt wird.

0
Jaro123lolipop 
Fragesteller
 11.07.2020, 21:47

Habe jetzt mal alles kopiert und auf folgenden pastebin link gemacht: pastebin.com/gbyBBxya

0
RainySky  11.07.2020, 21:53
@Jaro123lolipop

Weil dein Code so lang ist, werde ich ihn nicht in meine IDE kopieren. Das sind mir zu viele Klassen, die ich rauskopieren müsste.

Schreib mir doch einfach nochmal welche Fehler du jetzt genau hast (am besten mit Zeilenangabe). Denn so sehe ich die Syntaxfehler nicht und jetzt den gesamten Code zu analysieren ist mir ehrlich gesagt zu aufwändig

0
Jaro123lolipop 
Fragesteller
 11.07.2020, 22:43
@RainySky

Habe jetzt etwas rumgetüftelt und habe es fast hinbekommen. Jetzt kommt nur noch eine fehlermeldung: ressource leak: reader is never closed. Der Abschnitt dazu in folgendem link: pastebin.com/AKfRuUzm

0
RainySky  12.07.2020, 14:42
@Jaro123lolipop

Ein BufferedReader muss wieder geschlossen werden. Also einfach am Ende ein reader.close(); setzen.

1
RainySky  12.07.2020, 19:20
@Jaro123lolipop

Schließe ihn dort, wo du ihn nicht mehr brauchst. Wenn du dir nicht sicher bist, dann schließe ihn nach der Mehrfachfallunterscheidung (also nach dem Switch-Case).

0
Jaro123lolipop 
Fragesteller
 12.07.2020, 19:59
@RainySky

Habe es jetzt versucht. Es kommen keine fehler mehr aber das programm läuft nicht. Könntest du mir vielleicht schreiben in welcher zeile das rein kommt? Hier nochmal der link: pastebin.com/AKfRuUzm

0
RainySky  12.07.2020, 20:49
@Jaro123lolipop

Zeile 18

Aber wenn keine Fehler kommen, dann heißt das, dass es keine Fehler im Programmcode gibt. Dein Code kann also ohne Probleme in funktionierenden Maschinencode übersetzt werden.

Wenn es nicht läuft, musst du gucken, was genau nicht läuft. Dabei wird dir die IDE nicht mehr helfen können. Das musst du jetzt allein finden.

Ein kleiner Hinweis von mir:
Macht deine Main Methode, also dem Ding, das gestartet wird, die Methodenaufrufe, die sie machen soll?

0

Ausgehend von deinem Code von hier: https://www.gutefrage.net/frage/brauche-hilfe-beim-programmieren-2#comment-255189409 gibt es nur zwei Syntax-Fehler in der TextView-Klasse (auf Logikfehler prüfe ich nicht).

1) In der der schreibeErgebnis-Methode gehört das Semikolon an das Ende der Zeile.

System.out.println("Der Spieler hat gewonnen;") // wrong
System.out.println("Der Spieler hat gewonnen"); // correct

2) Die schließende geschweifte Klammer der Klasse fehlt.

Im Übrigen würdest du es dir einfacher machen, wenn du deinen Code korrekt einrücken würdest. Dann wäre Fehler 2 nämlich schnell ersichtlich.

Außerdem fällt auf, dass deine Bezeichner ab und an schlecht gewählt und inkonsistent sind. Mal sind die Namen komplett in deutscher, dann wieder in englischer Sprache. So etwas macht deinen Code schlechter lesbar. Wenn du Schere-Stein-Papier entwickelst, sollten Package und Main-Klasse zudem nicht hello heißen.

ressource leak: reader is never closed.

Das ist keine Fehlermeldung, sondern eine Warnung.

Wie es die Meldung schon sagt: Der Reader wird nicht nach Nutzung geschlossen. Solltest du den Reader aber erneut nutzen wollen (z.B. für eine anschließende zweite Spielrunde), sollte dies vorerst nicht gemacht werden, denn sonst würde auch der Standardeingabekanal (System.in) mit geschlossen werden. Bei Folgeversuchen, wieder mit diesen zu agieren, würde es zu Laufzeitfehlern kommen.

Was ebenso auffällt: Die Methoden in der inputStreamReader-Klasse (Klassennamen beginnen nach Konvention übrigens eigentlich mit einem Großbuchstaben), die überschrieben werden, werden nicht wirklich mit einer Logik ausgestattet.

Brauche hilfe beim Programmieren? (...) Habe echt keine ahnung davon und habe es nur von einem yt video abgeschrieben

Ich muss dir ehrlich sagen, dass das, was du machst, nicht so viel mit Programmieren zutun hat. Der wesentliche Kern der Programmierung liegt auch nicht in der Fehlersuche, wie hier in einer anderen Antwort behauptet wurde, sondern in der Lösungsfindung und -beschreibung eines Problems (mit Problem ist ein/das Programmziel gemeint).

Programmcode abzuschreiben, ohne auch nur ansatzweise zu verstehen, was er tut, wird dir kaum dabei helfen, Programmieren zu lernen. Es ist so, als wenn ich mir einen Roman in irgendeiner mir unbekannten Sprache herausgreifen, diesen abschreiben und dann unter eigenem Namen veröffentlichen würde. Vielleicht bau ich bei dieser Arbeit verschiedene Fehler ein, vielleicht bleiben ein paar Zeichen/Wörter hängen, vielleicht ist die Vorlage selbst in schlechter sprachlicher Qualität. Komme ich dabei effektiv weiter? Nein, leider nicht.

Zur Selbstkontrolle kannst du ja auch einmal auf folgende Fragen (ohne Video) antworten:

  • Wieso wird eine eigene Reader-Klasse implementiert?
  • Wieso werden in einigen deiner Klassen explizit die Basiskonstruktoren aufgerufen?
  • Ist es zwingend notwendig, für den Vergleich zwischen Spieler und Gegner, die equals-Methode zu verwenden?

Es wäre sogar interessant, ob im Video-Tutorial selbst zumindest auf die ersten beiden Entscheidungen konkret eingegangen wird. Ob tatsächlich begründet wird (also in mehr als einem Satz), wieso sie an dieser Stelle gerade eingesetzt werden.

Was ich dir stattdessen raten würde, wäre, Lernquellen herauszusuchen, die bei den einfachen Grundlagen beginnen (Variablen, Arrays, Operatoren, Kontrollstrukturen, u.ä.) und sich zunächst nur auf diese beschränken. Auch mit diesen kann man kleine Spiele zusammenbauen. Für Schere-Stein-Papier braucht man generell noch keine Enumerationen, Getter, Setter oder benutzerdefinierte Klassen, die Methoden überschreiben.

Achte viel eher darauf, dass du jede Code-Zeile, die du schreibst und dann stehen lässt, wirklich verstehst. Wenn du selbst schon weißt, dass dem nicht so ist, gibst du die Kontrolle ab und wirst ständig in solche Lagen kommen, wo du auf die Hilfe anderer angewiesen bist. Das möchtest du sicherlich nicht.

Einen leichteren Start in Java kannst du übrigens auch mit Processing bekommen. Das an der Stelle einmal nur als zusätzlicher Tipp.

Dein Enum sollte wie folgt aussehen:

public enum FigurTyp {
Stein,
Schere,
Papier
}
Woher ich das weiß:eigene Erfahrung

MrAmazing2  11.07.2020, 21:01

Und beim System.out.println(..); fehlen die Strichpunkte.

0