【问题标题】:different sort outcome(SortedSet) in debug mode vs normal run调试模式与正常运行中的不同排序结果(SortedSet)
【发布时间】:2022-01-20 13:10:32
【问题描述】:

所以我编写了一个比较器来整理多项式类型的对象(多项式,但基本上在我的语言中)。当我用调试器慢慢迭代它时,我似乎得到了我期望的结果。然而,当我运行它时,其中一个会出错并在比较中返回错误的值,这应该是非常直接的。

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() 只是返回 x 的度数 在此示例中从未达到系数部分,因此将跳过它 被比较的对象如下:

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

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

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

请告诉我是否还有其他需要补充的细节,因为这是一个相当大的项目

附言所有这些都是在eclipse中完成的(没有任何扩展)

【问题讨论】:

  • 您似乎正在制作两个对象 (p1, p2) 的副本 - 这些副本是否正在制作 coefficients 映射的深层副本?然后,您将从地图中删除条目,如果您没有制作深层副本,您也会从原始地图中删除值。你真的需要展示一个人们可以实际测试的minimal reproducible example
  • 是的,这些是深拷贝,因为如果我要从原始地图中删除值,我会更改多项式值。整个项目相当大...超过 10 个文件,讨论的文件已经结束每条 300 行,问题是,我根本无法重新创建它重新创建问题,但我怀疑我无法像过去 4 小时那样尝试但没有成功

标签: java eclipse debugging


【解决方案1】:

我的错误是让.toString() 改变了对象的状态,所以调试器没有说出整个故事。

非常感谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多