Тестовый запуск Junit зависает - PullRequest
0 голосов
/ 07 июня 2018

Сегодня был мой первый контакт с Junit, поэтому я немного потренировался с некоторыми программами, которые возвращают целые числа, и все работало нормально.Затем я хотел попытаться вернуть логическое значение, и когда я запускаю тестовый пример, он ничего не делает, он работает, но полоса не становится зеленой или красной.

это класс:

public class primcheck {

    public boolean prim(int n) {
        int nr=0;
        int i;
        while(nr==0) {
            for(i=2;i<=n/2;i++) {
                if(n%i==0) nr++;
            }

        }
        if(nr==0) return true;
         return false;


    }       
}

и тестовый пример Junit

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

class primeTest {

    @Test
    void test() {
        primcheck pc = new primcheck();
        boolean output = pc.prim(5);
        assertEquals(false,output);
    }

}

Не могли бы вы объяснить мне, что я сделал не так?Заранее спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Проблема не связана с JUnit.У вас возникла бы та же проблема, если бы вы запустили ее «вручную».

    int nr=0;
    int i;
    while(nr==0) {
        for(i=2;i<=n/2;i++) {
            if(n%i==0) nr++;
        }

    }

Если вы никогда не найдете фактор с самым внутренним значением if, вы просто будете продолжать цикл бесконечно, потому что ничего не делает nr==0 false: после однократного выполнения цикла for вы просто продолжаете выполнять цикл while без выполнения тела цикла for.

Удалите цикл while и добавьте условие в защиту цикла for(или просто опустить его полностью):

        for(i=2;i<=n/2 && nr==0;i++) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...