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(connectionUrl, "sa", "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 geneLength,int 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]处无法执行,请问这个怎么解决啊

5个回答

 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{null,null, ... ,null};
完成初始化

new Individual[10]

这个只是声明了变量,初始都是null的,你调用他的方法当然会报错。
在使用的时候使用pop[i] = new Individual();实例化就可以使用了。

可是new了之后不就是相当于赋了10个null值吗

danielinbiti  回答是正确的

pop=new Individual[10]; 你只是创建了一个数组,并没有初始化元素,数组的每个元素都是null;
pop[i] 是null 你在调用 pop[i].setGene 会报 空指针异常的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问