我在java中并不是那么专业。我正面临着这样的错误:charArrays = s.toCharArray(); 我不知道原因。虽然我的阵列尺寸太大但仍不清楚。
我添加了另一个发送到交叉的功能
.....
public void chr_intval(){
int[] array = new int[100] ;
float[]af = new float[6];
String [] gf =new String[7]; // for generating generation therefore copying
Random randomGenerator = new Random();
System.out.println("Chromosome Genes Integer value f(x) f'(x) Fitness ratio");
for(int i=1,j=1 ; i<=6; i++,j++){
array[i] = randomGenerator.nextInt(100); // generate random 6 integers from 1<x<100
float[] ar2 = new float[array.length];
ar2[i]= (float)array[i];
System.out.println("C"+j+ " "+Genes(array[i])+" "+array[i]+" "+f_x(ar2[i])+" "+fitness_function(f_x(array[i]))+" ");//+fit_ratio(fitness_function(f_x(array[i])))); // print c1, c2,....
af = new float[array.length];
// gf= new String[array.length];
af[i]= fitness_function(f_x(array[i]));
gf[i]= Genes(array[i]); // send to cross_over
// System.out.println(fit_ratio(af));
}
// System.out.print("gf"+gf[2]);
Cross_over(gf,af);
}
public void Cross_over(String[] gf, float[] af) {
// System.out.print("gf"+gf[3]); all values are coming successfully
char[] charArrays = new char[1000];
Character[] characterArray = new Character[charArrays.length];
int i = 0;
for(int j = 0; j < af.length; j++) { // comparing fit-funct
if(af[j] > af[0]){
af[0]= af[j];
}
}
if(af[0] >= 95) {
System.out.println("candidate's fitness "+af[0]);
}
else{ // start cross-over by tokenizing the array
// charArrays[] = gf.toCharArray();
for (String s : gf) {
charArrays = s.toCharArray(); // <--- Error here
}
}
for(int y = 0; y < 8; y++) {
System.out.print( characterArray[y] );
}
}
答案 0 :(得分:3)
NPE:
charArrays = s.toCharArray();
表示s
为null
,因此gf
中至少有一个元素为空。
您应该在此行之前检查s != null
,或者确保永远不要将null
元素添加到gf
。
答案 1 :(得分:0)
试试这个:
for (String s : gf)
{
if(s!=null)
{
charArrays = s.toCharArray();
}
}