0
非常感謝。我很困惑開發一個學術工作,所有的遞歸線程產生正確的結果,但我試圖存儲解決方案(一列的整數數組行),在一個ArrayList,但我的問題是ArrayList的方法add()替換arraylist的內容而不是添加一個新的,我想這是一個實例相關的問題,但我不知道如何解決它。當然是愚蠢的事實,因爲我的Java水平很差。非常感謝您的光顧!java arraylist add replace instead
package preda2.package_Preda_Reinas;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
public class Vuelta_atras_reinas {
ArrayList<Integer[]> vector_solucion = new ArrayList<>();
public void reinas(Integer s[],Integer n,Integer k) {
s[k] = 0;
while (s[k]<= n-1)
{
s[k]++;
if(computable(s,k))
{
if(k==(n-1))
{
vector_solucion.add(s);
System.out.println("solución encontrada: "+Arrays.toString(s));
for(int i=0;i<vector_solucion.size();i++)
{
System.out.println("Size: "+vector_solucion.size()+" ["+i+"]"+Arrays.toString((Integer[]) vector_solucion.get(i)));
}
}
else reinas(s,n,k+1);
}
}
}
public boolean computable(Integer s[],Integer k)
{
for(Integer i=0;i<=k-1;i++)
{
// System.out.println("s[i] es "+s[i]+" s[k] es "+s[k]+" Math.abs(s[i]-s[k])es "+Math.abs(s[i]-s[k])+" Math.abs(i-k) es "+Math.abs(i-k));
if(s[i] == s[k] || (Math.abs(s[i]-s[k])==Math.abs(i-k)))
return false;
}
return true;
}
}
我通話功能與其他類的方法主要有senteces reinas:
Vuelta_atras_reinas Vuelta_atras_reinas_Bi = new Vuelta_atras_reinas();
Integer s[]= new Integer[4];
Vuelta_atras_reinas_Bi.reinas(s,4,0);
而且結果是:
solución encontrada: [2, 4, 1, 3]
Size: 1 [0][2, 4, 1, 3]
solución encontrada: [3, 1, 4, 2]
Size: 2 [0][3, 1, 4, 2] <--- It must be [2,4,1,3]
Size: 2 [1][3, 1, 4, 2]
Thaks對於快速反應,我曾嘗試過,但我做得很糟糕。我這樣做: Integer s_local [] = new Integer [n]; s_local = s; vector_solucion.add(s_local); –
創建一個填充null的新數組並將其分配給變量s_local,然後通過將對原始數組的引用分配給s_local來丟棄它。根本沒有拷貝。 Google爲「如何用Java創建一個數組副本」,點擊第一個鏈接並閱讀。 –
非常感謝。 s_local = s.clone();是解決方案!!!。 –