我目前有一個ArrayList,它包含前1000個素數。我能夠成功地將列表打印到控制檯。ArrayList中不存在Java索引<Double>
我則採用以下方法:
public static ScalesSolution RMHC(ArrayList<Double> weights, int n, int iter){
private String scasol;
ScalesSolution sol = new ScalesSolution(n);
for(int i = 1; i <= iter; i++){
double oldsol = sol.ScalesFitness(weights);
sol.smallChange(n);
sol.println();
double newsol = sol.ScalesFitness(weights);
if(newsol > oldsol){
newsol = oldsol;
}
}
return(sol);
}
主要方法:
public static void main(String[] args){
ArrayList<Double> primes = new ArrayList<Double>();
primes.addAll(CS2004.ReadNumberFile("1000 Primes.txt"));
RMHC(primes, 10, 50);
}
ScalesSolution類:
public class ScalesSolution{
public void smallChange(int n)
{
Random rand = new Random();
int p = (rand.nextInt(n) - 1);
//Checks if p < 0. If so, then p will not have 1 subtracted from it.
if(p < 0){
p = (rand.nextInt(n));
}
String x = new String();
x = scasol.substring(0, p);
if (scasol.charAt(p) == '0')
scasol.replace('0', '1');
else if (scasol.charAt(p) == '1')
scasol.replace('1', '0');
scasol = x;
}//End smallChange()
}
每當我打電話的方法,但是,我收到無論我輸入什麼參數,都會出現以下錯誤。 (僅供參考,ArrayList<Double> weights
是素數的列表,int n
是溶液的大小來尋找和iter
是,該算法將用於運行的迭代次數。)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.substring(Unknown Source)
at ScalesSolution.smallChange(ScalesSolution.java:90)
at Lab8.RMHC(Lab8.java:15)
at Lab8.main(Lab8.java:46)
如上所述,該列表包含1000元素(1000 - 1指數),但我總是收到上述錯誤。
正如你所看到的,它指向指數位置6的錯誤,但有1000 - 1
指數位置,所以爲什麼會發生這種情況?索引位置隨每次運行而改變,但每次運行時都會出現錯誤。
謝謝。
告訴我們在哪裏是scasol聲明 – smas 2011-03-22 18:50:51
值得注意的是你的'scasol.replace()'方法沒有做任何事情,因爲它們返回了一個你沒有做任何事情的新字符串。另外,你的縮進表明你相信'scasol = x'行是else塊的一部分,但它不是。這裏的最佳做法是總是使用大括號,即使它們是可選的。 – dty 2011-03-22 19:08:07
@dty感謝您的評論。我明白你的意思 - 我也懷疑'scasol.replace()'方法沒有做任何事情,但我不知道該怎麼做。我打算做的是做一個小的改變(因此方法名)到一個'String'變量,所以當遇到'1'時,它變爲'0',反之亦然。請問你會推薦什麼? – MusTheDataGuy 2011-03-22 20:29:18