2015-11-24 91 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) –