8 Damen Problem

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

  • 8 Damen Problem

    Hi,

    ich habe folgendes Problem. Ich muss das 8-Damen Problem in Java lösen. Habe bisher auch schon den unten stehenden Code, aber kommt nicht weiter. Mir läuft der Array-Index "zeile" immer auf -1 und ich weiß nicht so recht wo mein Problem liegt. Außerdem weiß ich noch nicht so genau, wie ich es anstelle, alle 92 Lösungen auszugeben, was auch verlangt wird. Hier mal mein Code:

    Quellcode

    1. public class AchtDamen {
    2. public static void main(String[] args) {
    3. int spielfeld[][] = new int [8][8];
    4. int zaehler = 0;
    5. int zeile=0;
    6. int spalte=0;
    7. initialisiere(spielfeld);
    8. while (zeile<8){
    9. spielfeld[zeile][spalte]=1;
    10. if (pruefeSpielfeld(spielfeld)==false){
    11. spielfeld[zeile][spalte]=0;
    12. spalte++;
    13. while(spalte>7){
    14. zeile--;
    15. for (int i=0; i<8;i++){
    16. if(spielfeld[zeile][i]==1){
    17. spielfeld[zeile][i]=0;
    18. spalte=i;
    19. spalte++;
    20. }
    21. }
    22. }
    23. }else if(pruefeSpielfeld(spielfeld)==true){
    24. zeile++;
    25. if (zeile>7){
    26. zaehler++;
    27. System.out.println("Lösung Nr. "+zaehler+":");
    28. for (int i=0; i<8; i++){
    29. for (int j=0; j<8; j++){
    30. if(spielfeld[i][j]==1){
    31. System.out.println(i+","+j);
    32. }
    33. }
    34. }
    35. }
    36. }
    37. }
    38. }
    39. public static void initialisiere(int spielfeld[][]){
    40. for (int i=0; i<8; i++){
    41. for (int j=0; j<8; j++){
    42. spielfeld[i][j]=0;
    43. }
    44. }
    45. }
    46. /**
    47. * Methode wird als Parameter ein zu prüfendes Spielfeld übergeben.
    48. * Für den Fall, dass sich die Damen nicht schlagen können, wird "true" zurückgegeben.
    49. * Für den Fall, dass sie sich schlagen können wird "false" zurückgegeben.
    50. * @param spielfeld
    51. * @return
    52. */
    53. public static Boolean pruefeSpielfeld (int spielfeld[][]){
    54. int x=0;
    55. int y=0;
    56. int Summe1=0;
    57. int Summe2=0;
    58. int Summe3=0;
    59. int Summe4=0;
    60. for (int i=0; i<8; i++){
    61. for (int j=0; j<8; j++){
    62. x+=spielfeld[i][j];
    63. }
    64. if (x>1){
    65. break;
    66. }
    67. x=0;
    68. }
    69. if (x>1){
    70. return false;
    71. }
    72. for (int j=0; j<8; j++){
    73. for (int i=0; i<8; i++){
    74. y+=spielfeld[i][j];
    75. }
    76. if (y>1){
    77. break;
    78. }
    79. y=0;
    80. }
    81. if (y>1){
    82. return false;
    83. }
    84. x=0;
    85. y=0;
    86. //Suche nach links oben Teil1 (untere Quadrathälfte)
    87. for (int i=7; i>=0; i--){
    88. for (int j=7, k = i; k>=0 ; j--, k--){
    89. Summe1+=spielfeld[j][k];
    90. }
    91. if (Summe1>1){
    92. return false;
    93. }
    94. Summe1=0;
    95. }
    96. //Suche nach links oben Teil2 (obere Quadrathälfte)
    97. for (int i=7; i>=0; i--){
    98. for (int j=i, k=7; j>=0; j--, k--){
    99. Summe2+=spielfeld[j][k];
    100. }
    101. if (Summe2>1){
    102. return false;
    103. }
    104. Summe2=0;
    105. }
    106. //Suche nach rechts oben Teil1 (untere Quadrathälfte)
    107. for (int i=0; i<8; i++){
    108. for (int j=7, k=i; k<8; j--, k++){
    109. Summe3+=spielfeld[j][k];
    110. }
    111. if (Summe3>1){
    112. return false;
    113. }
    114. Summe3=0;
    115. }
    116. //Suche nach rechts oben Teil2 (obere Quadrathälfte)
    117. for (int i=7; i>=0; i--){
    118. for (int j=i, k=0; j>=0; j--, k++){
    119. Summe4+=spielfeld[j][k];
    120. }
    121. if (Summe4>1){
    122. return false;
    123. }
    124. Summe4=0;
    125. }
    126. return true;
    127. }
    128. }
    Alles anzeigen


    Wäre super, wenn ihr mir helfen könntet! Ich habe eure Boardsuche bereits benutzt und auch einen Code gefunden, mit dem ich aber nicht so ganz klar komme. Außerdem muss ich jetzt "meinen" Code abliefern, da ich den schon einmal so vorgezeit habe und es nun seltsam aussehen würde, wenn ich auf einmal einen ganz anderen Code bringen würde!

    Danke schonmal für eure Hilfe!

    MFG
    dodonius2
  • Hafner schrieb:

    Ich benötige die Exception mit Stacktrace zu dem Code, den du oben gepostet hast, um die Zeile festzustellen, in der es kracht.

    Um die Lösungen auszugeben würde ich sie erst einmal speichern. Zum Beispiel in einer LinkedList<spielfeld[][]> oder etwas ähnlichen.


    Alternativ kannst du natürlich auch Debuggen, um zu sehen wo was genau passiert. Das hilft meist schon ungemein. :)

    #Edit: Sorry, der von mir gepostete Link gilt nur für den Fall, das du Eclipse als Entwicklungsumgebung benutzt. Wenn nicht, google am besten mal :)