2015-11-24 3 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 были похожи на вас. Я читал, как писать хороший вопрос, и я не знаю, почему они сбрасывают ... –

+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

Ah! Неплохо подмечено. Позвольте мне понять, что делает C++ с этой странной логической математикой, и я исправлю это. –

+2

@BenM. Этот вопрос SO может дать некоторое понимание - [Как работает унарный оператор-минус на боллерах в c?] (Http://stackoverflow.com/questions/11544041/how-does-the-unary-minus-operator-work-on -booleans-in-c) –

Смежные вопросы