Сбой теста JUnit и не уверен, почему

#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;
}