问题描述
- java for循环无法执行
- public static void main(String[] args) {
// TODO Auto-generated method stub
Population population = new Population(3 10 30);
population.initPopulation();
String[]gene;
Individual [] pop;
try {
Class.forName(""com.microsoft.sqlserver.jdbc.SQLServerDriver"");
String connectionUrl =""jdbc:sqlserver://localhost:1433;databaseName=commentData"";
Connection connection = DriverManager.getConnection(connectionUrlsa""zangai"");
String sql=""select comment from commentData "";
PreparedStatement preparedStatement=connection.prepareStatement(sql);ResultSet resultSet = preparedStatement.executeQuery(); pop=new Individual[10]; for(int i=0;i<population.getGroupCount();i++) { gene=new String[30]; for (int j = 0; j < population.getGeneLength(); j++) { resultSet.next(); gene[j] = resultSet.getString(""comment""); } for(String a:gene) System.out.println(a); pop[i].setGene(gene); } population.setPopulation(pop); } }
public class Individual {
private String []gene ;//
private double fitness = 0;// 适应度
private double selectedProbability=0.0;//选择概率
private double cumulativeProbability=0.0;//变异概率
private int selectedCount=0;// 选择计数
private StringBuilder stringBuilder;//随机分配public void initGene(int geneLengthint k){ stringBuilder=new StringBuilder(); gene=new String[geneLength]; for (int i = 0; i< geneLength; i++) { Random random = new Random(); stringBuilder.append(Math.abs(random.nextInt() % k) + 1); } } }
public class Population {
private Individual[] population;
private int groupCount = 0;//种群
private int k = 0;//上下文重组数目
private int geneLength = 0;//编码长度// public Population(int k int groupCount int geneLength) { this.groupCount = groupCount; this.k = k; this.geneLength = geneLength; population = new Individual[groupCount]; for(int i=0;i<groupCount;i++) population[i]=new Individual();}
}
上面是三个主要类和其中属性的定义,但是在main中循环pop[i]处无法执行,请问这个怎么解决啊
解决方案
pop=new Individual[10]; for(int i=0;i<population.getGroupCount();i++) { gene=new String[30]; for (int j = 0; j < population.getGeneLength(); j++) { resultSet.next(); gene[j] = resultSet.getString(""comment""); } for(String a:gene) System.out.println(a); pop[i] = new Individual();//需要new实例否则为null的,下面一句就报错了。 pop[i].setGene(gene); }
解决方案二:
pop=new Individual[10];改成pop=new Individual{nullnull ... null};
完成初始化
解决方案三:
new Individual[10]
这个只是声明了变量,初始都是null的,你调用他的方法当然会报错。
在使用的时候使用pop[i] = new Individual();实例化就可以使用了。
解决方案四:
可是new了之后不就是相当于赋了10个null值吗
解决方案五:
danielinbiti 回答是正确的
pop=new Individual[10]; 你只是创建了一个数组,并没有初始化元素,数组的每个元素都是null;
pop[i] 是null 你在调用 pop[i].setGene 会报 空指针异常的。