调试模式与正常模式下的不同排序结果(SortedSet)运行

different sort outcome(SortedSet) in debug mode vs normal run

所以我写了一个比较器来分类 Polynom 类型的对象(多项式,但基本上在我的语言中)。当我用调试器慢慢地迭代它时,我似乎得到了我期望的结果。然而,当我 运行 它时,其中一个出现了问题并且 returns 比较中的错误值应该非常简单。

Polynom对象如下:

public class Polynom<E> implements IPolynom<E> , Comparable<Polynom<E>>{
    private SortedMap<Integer, FieldMember<E>> coefficients = new TreeMap<>();

而 IPolynom 只是一个定义方法的接口 E 可以是一个复数(我也写了它并包括它的方法和两个字段 real 和 image 但它与错误无关)

    public int compareTo(Polynom<E> o) {
    Polynom<E> p1 = new Polynom<>(this);
    Polynom<E> p2 = new Polynom<>(o);
    int deg,co;
    while(!p1.coefficients.isEmpty() && !p2.coefficients.isEmpty())
    {
    deg = p1.degree() - p2.degree();
    if(deg != 0)
        return deg;
    co = p1.getCoefficient(p1.degree()).compareTo(p2.getCoefficient(p2.degree()));
    if(co != 0)
        return co;
    p1.coefficients.remove(p1.degree());
    p2.coefficients.remove(p2.degree());
    
    }
    return (p1.degree() - p2.degree());
}

这是我写的compareTo方法 在这种情况下,方法 degree() 只是 returns x 的度数 在这个例子中从未达到系数部分所以我跳过它 正在比较的对象如下:

p1 = 多项式:(1.00+0.00i)x^5

p2 = 多项式:(-1.00-5.00i)x^7

比较应该是直截了当的,表明 p2 大于 p1 然而当我 运行 返回相反的 当我调试(并且特别是在行发生时迭代)方法 returns 正确的结果。如果我在调试时跳过它,它仍然 returns 是错误的结果 在我的主要方法中,我将一堆 Polynom 类型的对象添加到 SortedSet 中,结果证明仅在单个对象上的排序是错误的(在这种情况下是 p1,它应该是它们中的“最小”对象,并且首先出现在排序的集合) 我真的很茫然...

请告诉我是否需要添加任何其他细节以使情况更清楚,因为这是一个相当大的项目

p.s。所有这些都是在 eclipse 中完成的(没有任何扩展)

我的错误是 .toString() 更改了对象的状态,因此调试器没有说明全部情况。

非常感谢你们!