Ich habe folgendes Problem. Ich möcht int-Arrays in einer ArrayList abspeichern. In einer Testklasse habe ich folgendes probiert. und das geht auch:
Nun habe ich das nDamenProblem implementiert und ich möchte halt alle Lösungen (die habe ich als Array angelegt) in einer ArrayList speichern. Aber wenn ich das so mache wie oben, legt er zwar die Arrays an, die sind aber nicht gefüllt.
Java:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class JavaArrayListOfStringArray {
public static void main(String[] args) {
// List of String arrays
ArrayList<int[]> list = new ArrayList<int[]>();
int[] arr1 = new int[3];
int[] arr2 = new int[4];
arr2[0]=1;arr2[1]=2;arr2[2]=3;arr2[3]=4;
arr1[0]=1;arr1[1]=2;arr1[2]=5;
list.add(arr1);
list.add(arr2);
// printing list of String arrays in the ArrayList
for (int[] strArr : list) {
System.out.println(Arrays.toString(strArr));
}
}
}
Nun habe ich das nDamenProblem implementiert und ich möchte halt alle Lösungen (die habe ich als Array angelegt) in einer ArrayList speichern. Aber wenn ich das so mache wie oben, legt er zwar die Arrays an, die sind aber nicht gefüllt.
Java:
import java.util.*;
public class NDamenProblem
{
private int m[]; //meine Loesung
private int n; // Dimension des Problems
private int anz; //Anzahl der Loesungen
//private List<String> speicher; //damit geht es, aber
private ArrayList<int[]> speicher;// ich möchte es so machen
public NDamenProblem(int n){
//m = new int [4];
this.n=n;
//speicher = new List<String>();
speicher = new ArrayList<int[]>(); //speicher initialisiert!
m=new int [n];
Arrays.fill(m,0);
anz = 0;
}
public void behandleKnoten(){
behandleKnoten(0);
System.out.println("Lösungen: " + anz);
}
private void behandleKnoten(int ebene){
if (ebene == n){
anz++;
//System.out.println(anz+". Lösung: "+ Arrays.toString(m)); //Das geht! in m stehen wirklich Werte>0
//speicher.append(Arrays.toString(m)); // Das geht auch
speicher.add(m); //aber hier hat m nur die Werte 0!!!
}
else{
for(int j = 1; j<n+1;j++){
if(pruefe(j,m,ebene)){
m[ebene]=j;
behandleKnoten(ebene+1);
}
}
m[ebene]=0;
}
}
private boolean pruefe(int zahl, int[] a, int ebene){
for (int i = 0;i<ebene;i++){
//schaue, in die Spalte
if (zahl == a[i]){
return false;
}
// Schaue in die Diagonalen
if(zahl == a[ebene-i-1]+1+i || zahl == a[ebene-i-1]-1-i ){
return false;
}
}
return true;
}
/*
public List<String> getSpeicher(){
return this.speicher;
}*/
public ArrayList<int[]> getSpeicher(){
return this.speicher;
}
//End GetterSetterExtension Source Code
//!
}