Java code hilfe?


30.10.2020, 18:01

https://pastebin.com/rid3iiNH

Pastebin link

 - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)  - (programmieren, Java)

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das Problem an dieser Stelle ist, dass ihr in der Schule mit einer Bibliothek arbeitet, die öffentlich so gut wie nicht dokumentiert ist (ihr bindet dazu das Package basis ein). Könntest du bitte einmal die JAR-Bibliotheken teilen (bspw. via https://www.file-upload.net/ o.ä.)? Mit diesen dürfte dein Problem reproduzierbar und besser zu analysieren sein.

Die JAR-Bibliotheken dürften im BlueJ-Installationsordner unter lib\userlib liegen (zippe am besten einfach das komplette Verzeichnis).


Forenfrager438 
Fragesteller
 31.10.2020, 10:13
0
regex9  31.10.2020, 13:57
@Forenfrager438

Du hast ein Fenster mit der Größe von 620x200 Pixel. Das Beschriftungsfeld bf5 (übrigens doppelt) liegt bei einer vertikalen Höhe von 30 Pixel und nimmt 160 Pixel an Höhe ein (geht also bis zu y=190). Nun kommt dein nicht klickbarer Button, der auf der Höhe von 150 Pixel liegt, mit einer Höhe von 30 Pixel (er liegt also zwischen y 150-180). Es wird also ersichtlich, dass sich Button und Label perfekt überschneiden, bzw. das Label überdeckt den Button. Wieso hier nicht die z-Reihenfolge gilt (was zuletzt kommt, überdeckt alles andere), kannst du ja einmal deinen Lehrer fragen.

Mache dein Fenster etwas größer und rücke den Button etwas weiter nach unten.

0
Forenfrager438 
Fragesteller
 31.10.2020, 18:56
@regex9

Danke ich hatte garnicht bemerkt, dass sich der Knopf nicht drücken ließ.

Jetzt bleibt immernoch die Frage, wie ich das zweite Fenster mit dem Knopf schließe

0
regex9  01.11.2020, 12:34
@Forenfrager438

Aja, die Ereignisbehandlung muss genauso ablaufen, wie bei den anderen Buttons: In einer eigenen Schleife. Der Aufruf von kurzePause ist notwendig, damit die Anwendung nicht einfriert bzw. eine Interaktion möglich ist, während die Schleife läuft.

  // innerhalb if, wo Hilfefenster erzeugt wird ...
  
  while (true) {
    Hilfe.kurzePause();

    if (kHilfeEnde.wurdeGedrueckt()) {
      fenster1.gibFrei();
      break;
    }
  }
}

// ...

Solltest du im Übrigen jemals nochmal GUI-Programmierung mit Java (nach der Schule / in deiner Freizeit) lernen wollen: Vergiss das, was du mit dieser basis-Bibliothek gelernt hast. Hier wurde so einiges verdreht und verbogen, wohl mit dem Gedanken, es würde so einfacher werden. Es ist m.E. aber eher großer Mist.

0
Forenfrager438 
Fragesteller
 01.11.2020, 18:21
@regex9

Im eigentlichen Spiel haben wir nur das eigentliche Spiel mit Punktezähler

Wir durften noch Kreativ werden, wie z.B. mit der Anzeige wer führt oder dem Hilfefenster.

Das gibt dann Extra-Punkte

Hast du noch Ideen was man sonst noch einbauen kann?

0
regex9  01.11.2020, 18:28
@Forenfrager438
  • Ein Button, der für dich eine zufällige Wahl vornimmt.
  • Eine Personalisierung (Spieler muss erst seinen Namen eingeben, dieser wird folglich als Anrede benutzt)
  • Ein Countdown / Timer, sodass der Spieler mehr unter Druck gerät.
  • Beim Gewinnen / Verlieren könnte sich das Fenster noch farblich anpassen (Hintergrundfarbe: rot/gelb/o.ä.)
0
Forenfrager438 
Fragesteller
 01.11.2020, 22:45
@regex9

Danke für deine Ideen

Ich finde den Vorschlag mit der Hintergrundfarbe interessant.

Mit welchen Befehl ließe sich das umsetzen?

0
regex9  01.11.2020, 22:56
@Forenfrager438

Das Fenster besitzt eine Methode setzeHintergrundfarbe, der man Instanzen von Color übergeben kann.

0
Forenfrager438 
Fragesteller
 01.11.2020, 23:01
@regex9

Ah ok danke

Ist das wieder ein Befehl vom Paket?

Und falls ja wie konntest du das herausfinden?

0
regex9  01.11.2020, 23:13
@Forenfrager438

Ja. Alle Elemente, die irgendwelche deutschen Wörter im Namen haben, kommen von der basis-Bibliothek.

Ich habe die JAR-Bibliothek bei mir in NetBeans eingebunden, nicht in BlueJ. Die IDE stellt mir Funktionen zur Verfügung, um bspw. in Klassen fremder Bibliotheken hineinzuhüpfen und mir zumindest die verfügbaren Methoden anzuschauen. Auch eine Autosuggestion ist vorhanden, d.h. NetBeans bietet mir bereits beim Schreiben eine Droplist an, die alle verfügbaren Methoden auflistet.

Ob BlueJ ebenso eine Autosuggestion zur Verfügung stellt, weiß ich gerade nicht.

Wenn du den kompletten Quellcode einsehen wolltest, solltest du dir einen Decompiler besorgen. JD-GUI ist da nicht schlecht.

0
Forenfrager438 
Fragesteller
 01.11.2020, 23:39
@regex9

Ok danke

Könntest du mir dann als letztes noch die Syntax vom Befehl setzeHintergrundfarbe

Sagen wenn du weißt was ich meine?

0
Forenfrager438 
Fragesteller
 02.11.2020, 15:43
@regex9

Hat sich erledigt.

hätte aber noch eine andere Frage.

Ich wollte jetzt das Spieler1 Eingabe per Knopf durch Zufall getätigt wird.

Allerdings funktioniert der switch dafür nicht.

Hier der pastebin link:

https://pastebin.com/iHADLyJH

0
regex9  02.11.2020, 22:13
@Forenfrager438

Du brauchst erst einmal nur einen Würfel.

Random wuerfel = new Random();

Die Variable wuerfel1 kann raus.

Beim zweiten switch in spielStart wird dein Compiler streiken, denn du definierst die Variable nur, wenn der Button gedrückt wurde. Ansonsten hat sie keinen expliziten Startwert. Also: Setze einen Startwert für die Variable.

Mir fällt übrigens gerade auf, dass deine Spieloberfläche ziemlich intransparent für einen Spieler ist. Er klickt auf irgendeinen Button, doch er weiß danach nur das Ergebnis. Aber nicht, was der Gegner für einen Zug vollführt hat oder was dein Programm für einen Zufallswert berechnet hat.

0
regex9  02.11.2020, 22:17
@regex9

An sich könnte sogar zufall1 entfernt werden. Die Berechnung eines Zufallswert findet sowieso nacheinander statt. Nach dem ersten switch könnte zufall also neu definiert werden. Da die Variable nur innerhalb der Schleife benötigt wird und ihren Wert nicht iterationsübergreifend kennen muss, könnte die Deklaration in den Schleifenkörper verlegt werden.

0
Forenfrager438 
Fragesteller
 02.11.2020, 22:36
@regex9

Da habe ich auch schon dran gedacht mit 0 ging es nicht da dann die ganze Zeit Papier ausgegeben wird

Ich kann gerafe nicht mehr an den Rechner, aber eigentlich dürfte es ja kein Problem geben, wenn ich Zufall1 auf 3 setze, da dann ja nicht gespielt wird

Oder?

0
regex9  03.11.2020, 01:51
@Forenfrager438

Du brauchst es doch eigentlich nur so formulieren, wie du es oben bereits getan hast (naja, so halbwegs zumindest). Es darf nur eine zufällige Eingabe (eingabeSpieler1) ermittelt werden, wenn der Button gedrückt wurde. Das heißt, der zufallswert wird innerhalb des if definiert und das switch liegt ebenso im if.

0
Bitte sagt nicht das der Code keinen Sinn macht oder versucht ihn grundlegend zu ändern, da es die Vorlage von meinem Lehrer gibt.

Dein Lehrer macht aber nicht die Vorlage, dass du keine Formatierungen benutzen sollst. Wie wäre es mal mit Einrücken von Codeabschnitten?!

Ansonsten bitte hastebin.com oder pastebin.com benutzen.

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung

Forenfrager438 
Fragesteller
 30.10.2020, 18:01

hab ich

0
Xearox  30.10.2020, 18:15
@Forenfrager438

Guck dir deinen Code an und guck dir den Code an, welchen ich in hastebin gepackt hat. Fällt dir was auf?

0
Xearox  30.10.2020, 18:20
@Forenfrager438

Richtig, das nennt man formatieren.

Das Fenster wird aufgerufen und dort hast du dann ein Knopf, mit dem du das Fenster wieder schließen willst ...

if (kHilfeEnde.wurdeGedrueckt()) {
  fenster.gibFrei();
}

Steht im Codeblock der if- Abfrage vom Hilfe Button gedrückt drin, sollte der nicht außerhalb sein?

0
Xearox  30.10.2020, 18:24
@Forenfrager438

Was weißt du nicht? Weißt du nicht, was du da Programmiert hast oder was?

0
Xearox  30.10.2020, 18:34
@Forenfrager438

Schau in deine Unterlagen rein, sowas sollte man am Anfang lernen.

Wenn du das nicht weißt, sorry, dann musst du dich selbst schlau machen. Ich bin nicht dein Lehrer. Wenn dein Lehrer dir sowas nicht beibringt, ist das die Sache deines Lehrers und daher nicht meine Aufgabe. Sorry!

0
Forenfrager438 
Fragesteller
 30.10.2020, 18:44
@Xearox

Ich habe erst seit diesem Schuljahr Informatik

Die Antwort war nicht sonderlich hilfreich

0
Xearox  30.10.2020, 18:46
@Forenfrager438

Hilfreich ist er schon, nur kannst du damit nichts anfangen, weil dir die Grundlagen fehlen.

Schon ein Unding, dass euer Lehrer mitten in der Materie anfängt, statt euch die Grundlagen beizubringen.

0
Forenfrager438 
Fragesteller
 30.10.2020, 18:49
@Xearox

Ja das bringt mich jetzt ehrlich gesagt gar nicht weiter.

Deswegen für mich weniger hilfreich.

0