2015-11-24 22 views
0

首先感谢抱歉,如果问题是基本的,但我不是C++专家。将C++函数转换为Java

我调查的Java遗传算法和我来到这个链接,其中包含有趣的信息:http://web.archive.org/web/20100216182958/http://fog.neopages.org/helloworldgeneticalgorithms.php

不过,我很不容明白这是什么方法做:

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,但我不理解这种方法,究竟返回什么? (我认为它是与数组一起运行的。)

+2

如果你打算投票,至少留下一些建设性的意见,通过评论。至少OP不只是发布代码并说“请翻译成Java”。 –

+0

@JonnyHenly谢谢。我希望StackOverFlow中的每个人都像你一样。我读了如何写一个很好的问题,我不知道他们为什么downvoting ... –

+0

链接中的代码是C而不是C++ – user463035818

回答

2

它返回一个整数。布尔值在被加/减之前被转换为整数。 True是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; 
} 
+2

谢谢本,但它不工作,它说运算符 - 不能用于布尔值 –

+1

啊!那是个很好的观点。让我弄清楚C++在用这个奇怪的布尔数学算法做什么,我会纠正这个问题。 –

+2

@BenM。这个SO问题可能会提供一些见解 - [一元减操作符如何在C中的bolleans上工作?](http://stackoverflow.com/questions/11544041/how-does-the-unary-minus-operator-work-on -booleans-in-c) –