翻译C++;函数到Java 首先,对不起,如果问题是基本的,但我不是C++专家。< /P>

翻译C++;函数到Java 首先,对不起,如果问题是基本的,但我不是C++专家。< /P>,java,c++,genetic-algorithm,genetic-programming,Java,C++,Genetic Algorithm,Genetic Programming,我正在研究Java中的遗传算法,我找到了这个链接,其中包含有趣的信息: 然而,我很不明白这种方法在做什么: int fitness(bool* chromosome) { // the ingredients are: 0 1 2 3 4 5 6 // salt sugar lemon egg water onion apple return ( -chromosome[0] + chromosome[1] +

我正在研究Java中的遗传算法,我找到了这个链接,其中包含有趣的信息:

然而,我很不明白这种方法在做什么:

int fitness(bool* chromosome)
{
    // the ingredients are:  0     1     2     3   4    5     6
    //          salt sugar lemon egg water onion apple
    return ( -chromosome[0] + chromosome[1] + chromosome[2] 
         -chromosome[3] + chromosome[4] - chromosome[5] 
         -chromosome[6] );  
}

在学术上,我试图把C++程序翻译成java,但我不理解这个方法,到底是什么东西?(我假设它使用数组操作。)

它返回一个整数。布尔值在被加/减之前被转换成整数。真的是1。False是0

下面是Java翻译。在我们的例子中,我们必须自己将布尔数转换成整数

int fitness(boolean[] chromosome)
{
    int[] intChromosome = toInt(chromosome);

    // the ingredients are:  0     1     2     3   4    5     6
    //          salt sugar lemon egg water onion apple
    return ( -intChromosome [0] + intChromosome [1] + intChromosome [2] 
         -intChromosome [3] + intChromosome [4] - intChromosome [5] 
         -intChromosome [6] );  
}

int[] toInt(boolean[] values) {
    int[] integers = new int[values.length];
    for (int i = 0; i < values.length; i++) {
        integers[i] = values[i] ? 1 : 0;
    }
    return integers;
}
int适应度(布尔[]染色体)
{
int[]int染色体=toInt(染色体);
//成分是:01 2 3 4 5 6
//盐糖柠檬鸡蛋水洋葱苹果
返回(-intchromose[0]+intchromose[1]+intchromose[2]
-Int染色体[3]+Int染色体[4]-Int染色体[5]
-染色体[6]);
}
int[]到int(布尔[]值){
int[]整数=新的int[values.length];
对于(int i=0;i
谢谢Ben,但它不起作用,它说operator-不能应用于booleanAh!这是一个很好的观点。让我来了解C++在这个奇怪的布尔运算中的作用,我来纠正这个问题。@ BenM。这个问题可能会提供一些见解-@stackman在C/++中,布尔表达式产生
0
1
,如果你在前面加一个一元负号,它就会变成
-0(0)
-1
。Java也可以这样做,只是不那么直截了当。与其创建一个新数组,不如将其内联:
-(染色体[0]?1:0)+(染色体[1]?1:0)+……
并将它们对齐7行,使其更具可读性。如果你打算否决投票,至少通过评论留下一些建设性的反馈。至少OP没有仅仅发布代码并说“请翻译成Java”。@JonnyHenly谢谢。我希望每个人都像你一样。我读了如何写一个好的问题,我不知道他们为什么会投票……链接中的代码是C不是c++@ toBi303它是C++。如果你花时间编译程序,我用C编译器给出的链接,你会看到它不工作。你可能是正确的,但页面声称它的C和我没有看到任何C++在那里。