2016-10-14 3 views
-1

Я довольно новичок в написании кода, и я не лучший, но я не понимаю, почему мой код не передает один из тестов JUnit, которые я установил.JUnit Test failing and not sure why

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. Любая помощь приветствуется.

+3

Тест не работает, потому что ваша функция должна возвращать 0, но она возвращает -1, а потому, что тест проверяет, что ваша функция возвращает 0, а это не так. – immibis

+0

@immibis Какова ценность повторения вопроса как комментария? –

+0

@HadenSchlemmer Вы прошли через код в своем отладчике IDE, чтобы узнать, где он делает что-то неожиданное? –

ответ

0

В своем первом тесте,
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; 
} 
+0

Дарн, ОП был так близок. Я надеялся, что он сможет понять это самостоятельно, основываясь на моих намеках. Ну хорошо ... –

+0

OK Я понимаю проблему сейчас, но теперь я получаю сообщение об ошибке «else without if». Все еще немного запутано –

+0

Это намного проще, чем то, что я пытался сделать, и имеет смысл, спасибо! –

0

Не знаете, почему вы усредняете его по 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 && count1 > count0) { 
     winner = 1; 
    } 

    return winner; 
}