#java #junit #drjava
#java #junit #drjava
Вопрос:
Я довольно новичок в написании кода, и я не лучший, но я не понимаю, почему мой код не проходит ни один из тестов JUnit, которые я настроил.
public class PA3Test {
public static void main(String[] args) {
}
public static int countMajority(int count0, int count1, int count2) {
int allVotes = (count0 count1 count2);
int halfVotes = (allVotes / 2);
int winner = 999;
if (count0 >= halfVotes) {
winner = 0;
} else {
winner = -1;
}
if (count1 >= halfVotes) {
winner = 1;
} else {
winner = -1;
}
return winner;
}
Тест выглядит так:
import junit.framework.TestCase;
public class PA3TestTest extends TestCase {
public static void testCountMajority() {
assertEquals("0th param should win:", 0,
PA3Test.countMajority(100, 50, 40));
assertEquals("1st param should win:", 1,
PA3Test.countMajority(50, 100, 40));
}
Предполагается, что он возвращает 0, но возвращает -1. Любая помощь приветствуется.
Комментарии:
1. Тест не выполняется, потому что ваша функция должна возвращать 0, но она возвращает -1, а также потому, что тест проверяет, что ваша функция возвращает 0, чего она не делает.
2. @immibis какова ценность повторения вопроса в качестве комментария?
3. @HadenSchlemmer Вы просматривали код в своем отладчике IDE, чтобы увидеть, где он делает что-то неожиданное?
4. Я должен звучать глупо, но почему функция возвращает -1?
5. Очень внимательно рассмотрите, что происходит после выполнения строки
winner = 0;
. Какая следующая строка для выполнения и следующая за ней?
Ответ №1:
В вашем первом тесте
allVotes = 190
halfVotes = 95
count0 = 100> 95, победитель = 0
count1 = 50 < 95, победитель = -1
Попробуйте ниже и узнайте, что вы делаете неправильно.
public static int countMajority(int count0, int count1, int count2) {
int allVotes = (count0 count1 count2);
int halfVotes = (allVotes / 2);
int winner = -1;
if (count0 >= halfVotes) {
winner = 0;
}
else if (count1 >= halfVotes) {
winner = 1;
}
return winner;
}
Комментарии:
1. Черт возьми, операция была настолько близка, что я надеялся, что он сможет разобраться в этом самостоятельно, основываясь на моих подсказках. Ну что ж…
2. Хорошо, теперь я понимаю проблему, но теперь я получаю сообщение об ошибке «else без if». Все еще немного смущен
3. Это намного проще, чем то, что я пытался сделать, и имеет смысл, спасибо!
Ответ №2:
Не уверен, почему вы усредняете его на 2, когда у вас 3 счета. Но, основываясь на вашем заявлении о проблеме, это должно сработать.
public static int countMajority(int count0, int count1, int count2) {
int allVotes = (count0 count1 count2);
int halfVotes = (allVotes / 2);
int winner = -1;
if (count0 >= halfVotes) {
winner = 0;
}
if (count1 >= halfVotes amp;amp; count1 > count0) {
winner = 1;
}
return winner;
}