0
我想讓數組的數字是均勻分佈的數字0-6。爲了找到所有可能的解決方案,我想使用遞歸來放置一個可以放在那裏的數字並移動到下一個位置。但是當我用Eclipse運行它時。它會經歷一次,然後返回到第一個調用並繼續for循環,但不會再次調用該方法。遞歸不起作用
import java.util.LinkedList;
public class Search {
int WIDTH = 8;
int HEIGHT = 7;
boolean hasDistroStopped = false;
boolean hasSolveStopped = false;
boolean hasUniqueStopped = false;
public LinkedList<String> fDistro = new LinkedList<String>();
//public LinkedList<String> fSolve = new LinkedList<String>();
//public LinkedList<String> fUnique = new LinkedList<String>();
public static void main(String[] args){
Search a = new Search();
FindDistro findDistro = a.new FindDistro();
//FindSolve findSolve = a.new FindSolve();
//FindUnique findUnique = a.new FindUnique();
findDistro.start();
//findSolve.start();
//findUnique.start();
}
public class FindDistro extends Thread{
long start;
int[] field = new int[WIDTH*HEIGHT];
int[] distro = {0,0,0,0,0,0,0};
public FindDistro(){}
public void run(){
start = System.currentTimeMillis();
findFieldsRecursive(field,distro,0);
synchronized(fDistro){
System.out.println("Found " + fDistro.size() + " fields in " + ((System.currentTimeMillis() - start)/1000) + "s.");
hasDistroStopped = true;
}
}
/**
* This method evenly populates recursively the field with numbers and allows every field to be
* found without the danger of invalid ones.
* @param f The current field
* @param d The current distribution of numbers
* @param pos The current position in the field. Has to be zero to start the recursion properly.
*/
public void findFieldsRecursive(int[] f, int[] d, int pos){
// Test if we finished the field
if (pos == f.length){
String a = "";
for (int i = 0; i < f.length; i++){
a += Integer.toString(f[i]);
}
synchronized(fDistro){
fDistro.add(a);
}
return;
}
//Test for the numbers
for(int i = 0; i < HEIGHT; i++){
if(d[i] != WIDTH){
f[i] = i;
d[i]++;
findFieldsRecursive(f,d,pos + 1);
}
}
}
}
那麼你有沒有在調試器中加入代碼?如果是這樣,你是否發現你想要的地方?它會緩解,但它沒有? –
這不是說這裏的人是卑鄙的,但大多數時候運行調試器比發佈,格式化和等待答案花費的時間少。你有避免胡思亂想的好處/評論 – efekctive
好的。對不起。我從來沒有真正使用過調試器。但是使用它顯示陣列f和d不會停留在所謂的狀態,而是沿着調用棧。我忘了再次刪除d上的附加值。現在它工作正常。但是我沒有得到的是調試器給我顯示了我分配給它的數字,這些數字進一步分配給調用堆棧,但是應該沒有任何內容,因爲在java中你將一個副本作爲參數傳遞給一個方法,或者我錯了? – Tloy