Bitte Hilfe für Funktionalität eines Sudokus

Bahnkaktus

Mitglied
Hallo,

im Zuge eines Informatik-Schulprojekts programmiere ich derzeit ein Sudoku auf Java-Awt-Basis.
Derzeit sind testweise erstmal nur 2 Rätsel komplett enthalten, die Anzahl wird aber noch erhöht.

Nach Klick auf den Start-Button, der ein Rätsel anzeigen lässt (nicht über einen Algorhythmus generiert), wird eine Zufallszahl (Variable v1) erzeugt. Mittels einer if-Klausel wird dann ein Rätsel angezeigt (v1 == 1 fürs erste Rätsel, v1 == 2 fürs zweite Rätsel usw.).

Wenn dann ein Rätsel komplett durch den Nutzer eingegeben wurde, kann über den Button "Eingabe prüfen" die Richtigkeit unter die Lupe genommen werden. Die zwei weiteren Buttons dienen lediglich zur kompletten Lösungsanzeige, falls der Nutzer zeitnah die Auflösung erfahren möchte, sowie zur Leerung aller Textfelder (ein Sudoku-Zahlenfeld = ein Textfeld).

Bei der Prüfung auf die Richtigkeit ergibt sich ein großes Problem, bei dem ich gerade rätsele, woran es liegen könnte.
Bei if (v1==1) gibt mir der Java-Editor eine Fehlermeldung aus, dass trotz vollständiger Eingaben (alle Textfelder mit einer Integer-Zahl gefüllt) ein leerer String eingegeben wurde.
Hier die Fehlermeldung im Ganzen:

Code:
Exception in thread "AWT-EventQueue-1" java.lang.NumberFormatException: null
	at java.lang.Integer.parseInt(Integer.java:417)
	at java.lang.Integer.parseInt(Integer.java:499)
	at Sudoku$2.actionPerformed(Sudoku.java:624)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Bei if (v1==2) funktioniert der Prüf-Button fehlerfrei und lässt über einen ActionListener die Textfelder je nach Richtigkeit farbig markieren.

Auch nach Löschen aller Texteingaben und der erneuten Eingabe bei einem der beiden Rätsel wird diese Fehlermeldung durch den Editor ausgegeben. Ist es hier evtl. möglich, dass die eingegebenen Zahlen im Hintergrund verbleiben und die leeren Strings die Integer-Werte nur an der Oberfläche verschwinden lassen?

Zur genauen Nachvollziehbarkeit habe ich als Anhang hier die Datei im zip-Archiv angehangen.

Ich freue mich auf eure Hilfen und Ratschläge! 🙂

Viele Grüße!
 

Anhänge

Zuletzt bearbeitet:
Puh, das ist mal nen Code. Schau dir bitte Arrays und Listen an, damit lässt sich der ganze Code auf nen Minimum an Komplexität reduzieren.

Zu deinem Fehler:
Der tritt in Zeile 624 ind
Code:
Sudoku.java
auf. Deine hochgeladene Datei hat aber nicht soviele Zeilen, da kann man also nichts zu sagen.
 
Sorry, die hochgeladene Datei war eine veraltete. Die neue ist nun online. 🙂

Zu Arrays und Listen müsste ich mich erst einmal einarbeiten. Vielleicht bekomme ich das bald noch auf die Reihe. 😉
 
Java:
  TextField p1_1,p1_2,p1_3,p1_4,p1_5,p1_6,p1_7,p1_8,p1_9,
  p2_1,p2_2,p2_3,p2_4,p2_5,p2_6,p2_7,p2_8,p2_9,
  p3_1,p3_2,p3_3,p3_4,p3_5,p3_6,p3_7,p3_8,p3_9,
  p4_1,p4_2,p4_3,p4_4,p4_5,p4_6,p4_7,p4_8,p4_9,
  p5_1,p5_2,p5_3,p5_4,p5_5,p5_6,p5_7,p5_8,p5_9,
  p6_1,p6_2,p6_3,p6_4,p6_5,p6_6,p6_7,p6_8,p6_9,
  p7_1,p7_2,p7_3,p7_4,p7_5,p7_6,p7_7,p7_8,p7_9,
  p8_1,p8_2,p8_3,p8_4,p8_5,p8_6,p8_7,p8_8,p8_9,
  p9_1,p9_2,p9_3,p9_4,p9_5,p9_6,p9_7,p9_8,p9_9;
  
  Button StartB,PruefB,LoesB,LoeschB;
  
  TextArea StatusTA;
  
  String p1_1s,p1_2s,p1_3s,p1_4s,p1_5s,p1_6s,p1_7s,p1_8s,p1_9s,
  p2_1s,p2_2s,p2_3s,p2_4s,p2_5s,p2_6s,p2_7s,p2_8s,p2_9s,
  p3_1s,p3_2s,p3_3s,p3_4s,p3_5s,p3_6s,p3_7s,p3_8s,p3_9s,
  p4_1s,p4_2s,p4_3s,p4_4s,p4_5s,p4_6s,p4_7s,p4_8s,p4_9s,
  p5_1s,p5_2s,p5_3s,p5_4s,p5_5s,p5_6s,p5_7s,p5_8s,p5_9s,
  p6_1s,p6_2s,p6_3s,p6_4s,p6_5s,p6_6s,p6_7s,p6_8s,p6_9s,
  p7_1s,p7_2s,p7_3s,p7_4s,p7_5s,p7_6s,p7_7s,p7_8s,p7_9s,
  p8_1s,p8_2s,p8_3s,p8_4s,p8_5s,p8_6s,p8_7s,p8_8s,p8_9s,
  p9_1s,p9_2s,p9_3s,p9_4s,p9_5s,p9_6s,p9_7s,p9_8s,p9_9s;
  
  int v1,p1_1i,p1_2i,p1_3i,p1_4i,p1_5i,p1_6i,p1_7i,p1_8i,p1_9i,
  p2_1i,p2_2i,p2_3i,p2_4i,p2_5i,p2_6i,p2_7i,p2_8i,p2_9i,
  p3_1i,p3_2i,p3_3i,p3_4i,p3_5i,p3_6i,p3_7i,p3_8i,p3_9i,
  p4_1i,p4_2i,p4_3i,p4_4i,p4_5i,p4_6i,p4_7i,p4_8i,p4_9i,
  p5_1i,p5_2i,p5_3i,p5_4i,p5_5i,p5_6i,p5_7i,p5_8i,p5_9i,
  p6_1i,p6_2i,p6_3i,p6_4i,p6_5i,p6_6i,p6_7i,p6_8i,p6_9i,
  p7_1i,p7_2i,p7_3i,p7_4i,p7_5i,p7_6i,p7_7i,p7_8i,p7_9i,
  p8_1i,p8_2i,p8_3i,p8_4i,p8_5i,p8_6i,p8_7i,p8_8i,p8_9i,
  p9_1i,p9_2i,p9_3i,p9_4i,p9_5i,p9_6i,p9_7i,p9_8i,p9_9i;

Schau dir bitte mal Arrays/Listen an, wirklich :toll:

Das Problem ist folgende Zeile:
Java:
p7_6i = Integer.parseInt(p7_6s);
Code:
p7_6s
ist noch null, es wurde kein Wert zugewiesen. Warum das so ist, keine Ahnung, durch den Code blickst wohl nur noch du durch.
 
Ich habe den Fehler gerade gefunden. Tippfehler meinerseits. :rtfm:

Gibt es denn einen bestimmten Befehl für den Lösch-Button, der es erlaubt, alle Felder gleichzeitig wieder auf weiß bzw. grau zurückzufärben, sodass es überflüssig wird, für jedes einzelne Textfeld den Farbbefehl zuzuweisen?
 
durch den Code blickst wohl nur noch du durch.
Nicht mal das, daher auch die NullPointerException: Schreibfehler bzw. einen Sprung in der Verwendung der String Variablen. Zuvor wird der Inhalt des Textfeldes in
Code:
p7_5s
geparst wird aber
Code:
p7_6s
. Der Code hat aber wirklich kaum etwas mit Programmierung zu tun. Und mit OOP schon mal gar nicht ;-)
 
Wenn du deine Felder in einem Array hast kannst du mit ner Schleife über das Array laufen und den Befehl für jedes Feld aufrufen.
 
Nicht mal das, daher auch die NullPointerException: Schreibfehler bzw. einen Sprung in der Verwendung der String Variablen. Zuvor wird der Inhalt des Textfeldes in
Code:
p7_5s
geparst wird aber
Code:
p7_6s
. Der Code hat aber wirklich kaum etwas mit Programmierung zu tun. Und mit OOP schon mal gar nicht ;-)

Ziel bei der Programmierung ist lediglich eine einfache Funktionalität des Programms. In der Schule wurde es uns so umständlich vermittelt. Da auch dazu eine kleine Vorstellung ansteht, nützt es mir nichts, irgendwelche, für einen Laien komplizierten Zeilen aus dem Internet nachzuvollziehen. Ich muss wissen, wie das Programm arbeitet. 😉
 
Ah ja, hat schon wer geantwortet mitlerweile. Sonst versuch es doch mal der Übersicht halber mit doppelten Arrays, den ersten Eintrag für die Zeile den Zweiten für die Spalte, also so: Integer[Zeile][Spalte] und dann kannst du das mit zwei verschachtelten Schleifen zuweisen.
Außerdem nehme ich an, dass du mitlerweile in deinem aktuellem File schon mitbekommen hast das hierbei ne Zahl zwischen 1 und 10 rauskommt. Wunderte mich nämlich da das Programm nur bei jedem dritten Klick in etwa funktionierte.
double d1 = 1+10*Math.random();
v1 = (int) d1;
 

Zurück
Oben