Java - “方法___未定义类型___”

时间:2015-09-01 12:47:59

标签: java methods undefined

我正在建立一个基于this guide的简单遗传算法。我创建了一个“个人”课程,如下所示。

package simpleGA;

public class Individual {

    public static int defaultGeneLength = 64;

    private static byte genes[] = new byte[defaultGeneLength];

    private int fitness = 0;

    public void generateIndividual(){
        for (int i = 0; i < defaultGeneLength; i++){
            byte gene = (byte) Math.round(Math.random());
            genes[i] = gene;
        }
    }

    public byte getGene(int index) {
        return genes[index];
    }

    public int size(){
        return genes.length;
    }

    public int getFitness(){
        if (fitness == 0){
            fitness = FitnessCalc.getFitness(this);
        }
        return fitness;
    }
}

我还创建了一个名为'FitnessCalc'的课程,如下所示。

package simpleGA;

import java.util.Scanner;

public class FitnessCalc {

    static byte[] solution = new byte[64];

    static String newSolution;

    static Scanner input = new Scanner(System.in);

    static void setSolution(){
        do{
            newSolution = null;
            System.out.println("Please enter a string of '1's and '0's of length 64.");
            newSolution = input.next();
        }
        while(newSolution.length() != 64);
        solution = new byte[newSolution.length()];
        for (int i = 0; i < newSolution.length(); i++) {
            String character = newSolution.substring(i, i + 1);
            solution[i] = Byte.parseByte(character);
            }
    }

    static int getFitness(Individual individual){
        int fitness = 0;
        for (int i = 0; i < solution.length && i < individual.size(); i++) {
            if (individual.getGene(i) == solution[i]) {
                fitness++;
            }
        }
        return fitness;
    }
}

我的问题是,在'FitnessCalc'类的getFitness方法中,编译器会为sizegetGene方法返回错误,说

“方法大小()未定义为Individual”和

类型

“方法getGene(int)未定义为Individual”。

我不确定这意味着什么。我看过这样的其他问题,但没有一个场景似乎与我有关。有人可以帮忙吗?

修改

清理并重建项目后(我正在使用Eclipse),错误仍然存​​在,并且我的剩余课程“人口”中出现了一个新错误。

package simpleGA;

public class Population {

    Individual[] individuals;

    public Population (int populationSize, boolean initialise){
        individuals = new Individual[populationSize];
        if (initialise){
            for (int i = 0; i < size(); i++){
                Individual newIndividual = new Individual();
                newIndividual.generateIndividual();
                saveIndividual(i, newIndividual);
            }
        }
    }

    public int size(){
        return individuals.length;
    }

    public void saveIndividual(int index, Individual indiv){
        individuals[index] = indiv;
    }
}

错误是在generateIndividual方法中调用Population方法,并且与其他两个方法相同:

“方法generateIndividual()未定义为Individual”类型。

generateIndividual方法在“个人”类中定义。

1 个答案:

答案 0 :(得分:0)

对于任何想知道的人,我通过稍微重写代码来摆脱这个问题。我将getFitness方法移到了&#39;个人&#39;上课,这似乎有效。在此之后,我确保了&#39;个人&#39; class只使用自己类中的方法,因此类并不相互依赖。