2015-12-09 2 views
3

У меня есть этот Java-код в Eclipse, который я бы хотел отлаживать.Eclipse Debugger не останавливается при условной точке останова

Это код:

public Double repulsion(Node n1, Node n2) { 
    Double rep = 0.0; 
    rep = Math.pow(K, 2)/distEuc(n1, n2); 
    System.out.println("Répulsion : " + rep); 
    listForcesRep.add(rep); 
    return rep; 
} 

    private Double distEuc(Node n1, Node n2) { 
    Double d = 0.0; 
    Object[] n1Attributes = n1.getAttribute("xy"); 
    Double x1 = (Double) n1Attributes[0]; 
    Double y1 = (Double) n1Attributes[1]; 
    Object[] n2Attributes = n2.getAttribute("xy"); 
    Double x2 = (Double) n2Attributes[0]; 
    Double y2 = (Double) n2Attributes[1]; 
    d = Math.sqrt((Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2))); 
    return d; 
} 

Я переключен контрольная точка в строке: rep = Math.pow(K, 2)/distEuc(n1, n2);, и я побежал отладчик в значениях по умолчанию, и она отлично работает.

Дело в том, что в какой-то момент переменная rep принимает значение NaN, и мне нужна условная точка останова, чтобы понять почему.

Я установил условную точку останова, как это:

Conditional Breakpoint

Но когда я бегу отладки, он пропускает точки останова и цикл продолжает идти.

Что я сделал не так? И как я могу это исправить?

Спасибо!

+1

Я ничего не знаю о Java, так что это просто предположение: на некоторых языках (например, Python) 'NaN == NaN' всегда' False'. Вам нужно проверить, является ли rep числом или использовать какой-либо метод, чтобы проверить, является ли это NaN. – iled

+0

@iled yes есть функция 'isNan()', которая выполняет задание, как @andrucz упоминает в своем правильном ответе. Теперь это работает! – user1885868

ответ

7

Это потому, что rep по-прежнему равен 0.0 в этой строке: Double rep = 0.0;

Вам необходимо поставить условную точку останова на System.out.println("Répulsion : " + rep);, после вычисления rep значения, а затем, когда выполнение останавливается на этой строке, «Капля в кадр» снова выполнить этот метод.

Вы должны также использовать Double.isNaN(rep) или rep.isNaN() вместо rep == Double.NaN.