Array, ich dreh bald durch

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Array, ich dreh bald durch

    Hallo allerseits,

    ich versuche gerade ein kleines Sudoku-Programm zu basteln. Leider bringt mich folgendes Problem wiklich zum Verzweifeln; ich kann echt nicht mehr.

    Ich habe ein Array mit 81 Feldern, in denen sich die einzelnen Ziffern des Spielfeldes befinden. Der Inhalt des Arrays kommt aus meiner grafischen Oberfläche. Ich verwende Auswahlfelder und frage den gewählten Index ab; ein leeres Feld hat daher die 0 als Wert.
    iSpielfeld[x] = this->Spielfeld[i,j]->SelectedIndex;

    Die Methode zum Zählen der leeren Felder funktioniert immer:

    Quellcode

    1. int leereFelder(int iSpielfeldExt[]) {
    2. int anzahlLeereFelder = 0;
    3. for (int i = 0; i < 81; i++) {
    4. if (iSpielfeldExt[i] == 0) anzahlLeereFelder++;
    5. }
    6. return anzahlLeereFelder;
    7. }


    Nur mein Lösen-Algorithmus bringt mich um den Verstand. Dort wird beim Zugriff auf mein SpielfeldArray als Wert -1 angezeigt - iSpielfeldExt[x] = -1
    Allerdings auch nicht immer, manchmal funktioniert es. Ich kann nicht mehr, bitte helft mir.

    Quellcode

    1. int loese(int iSpielfeldExt[]) {
    2. //initialisiere alle Ziffern als moeglich
    3. bool moeglicheZiffern[81][9];
    4. for (int i = 0; i < 81; i++)
    5. for (int j = 0; j < 9; j++)
    6. moeglicheZiffern[i][j] = true;
    7. //Überprüfe für jedes Element
    8. for (int i = 0; i < 81; i++) {
    9. //Wenn Element in Feld i leer, dann kombiniere
    10. if (iSpielfeldExt[i] == 0) {
    11. //Überprüfe alle Elemente, die sich in der gleichen Spalte wie i befinden
    12. //Wenn Element vorhanden, dann ist diese Ziffer nicht mehr als Lösung für i möglich
    13. int x = i/9;
    14. x *=9;
    15. for (x; x<9; x++) {
    16. if ((iSpielfeldExt[x] != 0) && (x != i)) {
    17. moeglicheZiffern[i][iSpielfeldExt[x]-1] = false;
    18. }
    19. }
    20. ...
    Alles anzeigen
  • Nun gut, ich bin dämlich. Aber ich habe jetzt einen ganzen Tag gebraucht, um auf die Lösung zu kommen. :(
    Das Feld beinhaltete -1 genau dann, wenn ich die Ziffer über die Tastatur eingegeben habe, und nicht aus der Auswahlliste ausgewählt habe. Ich dachte, dass durch die Beschränkung der Eingabemöglichkeiten auf die vorgegebenen Auswahlfelder, der selectierte Index automatisch gewählt wird.

    Jetzt bleibt mir also nur, den beinhalteten Wert über getItemText auszulesen und in int zu konvertieren, oder es sagt mir jemand, dass man die Eingabe über Tastatur für eine bestimmte ComboBox sperren kann :D
  • Wenn es über die Eigenschaften nicht geht, dann ist es keine gute Lösung für mich; immerhin sollen andere Funktionen noch per Tastatur gesteuert werden könne.
    Wie konvertiere ich den System::String aus this->ComboBox->Text in ein int? Atoi funktiniert nicht und System::IConvertible::ToInt16 ist lt. Visual nicht möglich.