Ik ben op dit moment bezig met een programma die sodoku's kan oplossen, geheel op eigen wijze wil ik ervoor zorgen dat er niet 2 dezelfde cijfers in 1 rij komen. Daarvoor gebruik ik nu 3 objecten: de applet(Sodoku), de database(Database) en een overerving van TextField(NumericTextField).
Die laatste gebruik ik om de input niet langer te laten worden dan 1 en om ervoor te zorgen dat er alleen cijfers in gestopt worden.
Dan gebruik ik vervolgens mijn applet om de input van het textveld te vergelijken met de rij waar hij in staat. Dit doe ik door het object waar de input vandaan komt te vergelijken met alle textvelden die er zijn aangemaakt (een makkelijkere methode weet ik niet):
De ROW en de COL worden aan het begin vast gezet als final en static en mijn NumericTextField wordt aangemaakt als volgt:
en dat door totdat er sodoku[8][8] is(het komt nog in een for lus vandaar dat ik werk met de sodoku[integer][integer]).
In de Database worden de waardes als volgt vergeleken. De hele rij wordt doorgelopen en als er een vergelijkbaar nummer is dan wordt er een true worden weergegeven.
De col hier wordt aangemaakt aan de hand van de COL van mijn applet.
Wat ik wil voorkomen dmv deze code is dat er geen cijfers in het textveld worden gezet als deze al aanwezig is in de rij of in de kolom(kolom heb ik hier niet, want het principe is hetzelfde). Maar de temp.equals(value) faalt in dit geval, als ik de if statement weghaal dan wordt er niks in m'n tekstveld gezet en dat is hoe het zou moeten werken maar dan met een voorwaarde(temp.equals(value)). Dus ik zou zeggen dat het bij de if statment fout gaat.
Wat mijn vraag is, hoe komt het dat mijn if (temp.equals(value)) faalt?
Die laatste gebruik ik om de input niet langer te laten worden dan 1 en om ervoor te zorgen dat er alleen cijfers in gestopt worden.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| import java.awt.*; import java.awt.TextField; import javax.swing.JTextField; import java.awt.event.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; public class NumericTextField extends TextField implements KeyListener { private int maxSumChar; private Sodoku sodoku; public NumericTextField(String _initialStr, int _col, int maxSumChar, Sodoku sodoku) { super (_initialStr, _col) ; this. maxSumChar = maxSumChar; this.addKeyListener(this); this.sodoku = sodoku; } public NumericTextField(int _col, int _maxSumChar, Sodoku _sodoku) { this ("", _col, _maxSumChar, _sodoku); } public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); String input = String.valueOf(c); int textFieldDataLength = this.getText().length(); if (!((c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB) || (Character.isDigit(c)) || e.isActionKey() )) { e.consume(); } if (!sodoku.checkIfInputIsCorrect(this, input)) { e.consume(); } if (textFieldDataLength < maxSumChar) { return; } else if ((c==KeyEvent.VK_BACK_SPACE) || (c==KeyEvent.VK_DELETE) || (c==KeyEvent.VK_ENTER) || (c==KeyEvent.VK_TAB) || e.isActionKey() || (!this.getSelectedText().equals(""))) { return; } else { e.consume(); } } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} } |
Dan gebruik ik vervolgens mijn applet om de input van het textveld te vergelijken met de rij waar hij in staat. Dit doe ik door het object waar de input vandaan komt te vergelijken met alle textvelden die er zijn aangemaakt (een makkelijkere methode weet ik niet):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public boolean checkIfInputIsCorrect(NumericTextField numericTextField, String value) { boolean returnValue = true; for (int rowToGet = 0; rowToGet < ROW; rowToGet++) { for (int colToGet = 0; colToGet < COL; colToGet++) { if (numericTextField.equals(sodoku[rowToGet][colToGet])) { if (sodokuDatabase.checkRowOnSameNumber(rowToGet, value)) { returnValue = false; } } } } return returnValue; } |
De ROW en de COL worden aan het begin vast gezet als final en static en mijn NumericTextField wordt aangemaakt als volgt:
Java:
1
| sodoku[0][0] = new NumericTextField("",sodokuFieldColumns, sodokuFieldLenght, this) |
en dat door totdat er sodoku[8][8] is(het komt nog in een for lus vandaar dat ik werk met de sodoku[integer][integer]).
In de Database worden de waardes als volgt vergeleken. De hele rij wordt doorgelopen en als er een vergelijkbaar nummer is dan wordt er een true worden weergegeven.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
| public boolean checkRowOnSameNumber(int xa, String value) { boolean returnValue = false; for(int columnToGet = 0; columnToGet < col; columnToGet++) { String temp = database[xa][columnToGet]; if (temp.equals(value)) { returnValue = true; } } return returnValue; } |
De col hier wordt aangemaakt aan de hand van de COL van mijn applet.
Wat ik wil voorkomen dmv deze code is dat er geen cijfers in het textveld worden gezet als deze al aanwezig is in de rij of in de kolom(kolom heb ik hier niet, want het principe is hetzelfde). Maar de temp.equals(value) faalt in dit geval, als ik de if statement weghaal dan wordt er niks in m'n tekstveld gezet en dat is hoe het zou moeten werken maar dan met een voorwaarde(temp.equals(value)). Dus ik zou zeggen dat het bij de if statment fout gaat.
Wat mijn vraag is, hoe komt het dat mijn if (temp.equals(value)) faalt?