初学者:在Java中为数组赋值

时间:2009-10-14 15:09:22

标签: java arrays

我试图在阅读一本关于机器学习的书后用Java编写一个简单的遗传算法,并且偶然发现了基础知识。我没有使用Java,所以我可能会错过一些非常简单的东西。

个人

public class Individual {

    int n;
    int[] genes = new int[500];
    int fitnessValue;

    public int getFitnessValue() {
        return fitnessValue;
    }

    public void setFitnessValue(int fitnessValue) {
        this.fitnessValue = fitnessValue;
    }

    public int[] getGenes() {
        return genes;
    }

    public void setGenes(int index, int gene) {
        this.genes[index] = gene;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    // Constructor
    public Individual() {


    }

}

人口

import java.util.Random;

public class Population {

    public Population() {

    }

    public static void main(String[] args) {
        Random rand = new Random();
        int p = rand.nextInt(10);
        int n = rand.nextInt(10);

        Individual pop[] = new Individual[p];

        System.out.println("P is: " + p + "\nN is: " + n);

        for(int j = 0; j <= p; j++) {
            for(int i = 0; i <= n; i++) {
                pop[j].genes[i] = rand.nextInt(2);
            }
        }
    }

    public void addPopulation() {

    }
}

此代码的目的是使用随机数填充Population和Genes。有人可以看看我的代码,看看我哪里出错了吗?

4 个答案:

答案 0 :(得分:4)

pop[j].genes[i] = rand.nextInt(2);

添加

pop[j] = new Individual();

数组的元素为null。

答案 1 :(得分:0)

我相信你需要在做pop [j] .genes [i] = rand.nextInt();

之前初始化pop [j]
    Individual pop[] = new Individual[p];

这只是初始化数组,而不是单个元素。尝试在你的两个循环之间放置pop [j] = new Individual()。

答案 2 :(得分:0)

他们说了什么......

另外,你的意思是调用你的setGenes方法,还是只想直接访问基因数组。

答案 3 :(得分:0)

根据我对您的代码的理解,我认为您需要这样做:

for(int j = 0; j <= p; j++) {
    pop[j] = new Individual();
    for(int i = 0; i <= n; i++) {
        pop[j].setGenes(i, rand.nextInt(2));
    }
}