سؤال

أنا لا يمكن معرفة ما يجري هنا.فشل هذا الاختبار:

@Test
    public void testSimpleCase() {
        assertTrue(JGraphtUtilities.graphEquality(ChooseRootTest.generateSimpleCaseGraph(), ChooseRootTest.generateSimpleCaseGraph()));
    }

public static <V, E> boolean graphEquality(Graph<V, E> g0, Graph<V, E> g1) {

    boolean result = true;

    if (g0.edgeSet().equals(g1.edgeSet()) && g0.vertexSet().equals(g1.vertexSet())) {
        for (E e : g0.edgeSet()) {
            if (g0.getEdgeWeight(e) != g1.getEdgeWeight(e)) {
                result = false;
            }
        }
    }
    else {
        return false; //for the above test, this is what is returned
    }

    return result;
}

المصحح يدل على أن طريقة تقرر أن اثنين من قمة الرأس مجموعات حافة مجموعات ليست متساوية ، لذلك بإرجاع false.كيف يكون هذا ممكنا ؟

ملاحظة جانبية:أنا أحاول أن أكتب المساواة تحقق JGraphT الرسوم البيانية.كيف من الممكن أن هذا لم يحدث بالفعل ؟

تحديث: أعتقد أن DefaultWeightedEdge لا تجاوز يساوي ، بحيث لن يعمل.لم تختلف طريقة التحقق من أن حواف موجودة بين كل ما يلزم من القمم ، والآن يبدو أن العمل.

هل كانت مفيدة؟

المحلول

وفقا جافادوك DefaultWeightedEdge لم تنفذ equals() و hashCode() وبالتالي يستخدم أساليب محددة في java.lang.Object.وهذا يعني أن اثنين من DefaultWeightedEdge الكائنات a و b مع نفس القيم لا عودة true من a.equals(b).التي من شأنها أن العودة فقط true إذا a و b تشير في الواقع إلى نفس الكائن.

تحتاج إلى استخدام ميزة التنفيذ الفئة التي تطبق .equals() و hashCode() للحصول على نتائج مفيدة هنا.

نصائح أخرى

أنا لست على دراية JGraphT ، ولكن هناك نوعان من القضايا أستطيع أن أفكر.

أولا ماذا يعني ذلك بالنسبة مجموعتين من حواف يعادل?ما هو الذي يجعل حواف اثنين ما يعادل?إن إنشاء الرسم البياني ، وخلق متطابقة الرسم البياني على حدة ، سواء قد يكون لها نفس الهيكل.ولكن إذا edge مقارنة بين اثنين من مطابقة حواف يستخدم عقدة الهويات حواف اثنين لن يكون "المساواة".

ثانيا ، لقد لاحظت هذا في JavaDocs:

"على الرسم البياني التنفيذ قد الحفاظ على مجموعة معينة الطلب (مثلا ، عبر LinkedHashSet) عن حتمية التكرار ، ولكن ليس هذا هو المطلوب.بل هي مسؤولية من المتصلين الذين يعتمدون على هذا السلوك فقط استخدام الرسم البياني التطبيقات التي تدعمها."

وأود أن محاولة (على الأقل بالنسبة التعقل) للتأكد من أن مجموعتين تحتوي على بعضها البعض ، كما أنه من الممكن أن يساوي لم تنفذ بشكل صحيح (على سبيل المثال ، قد يستغرق الأمر بعين الاعتبار).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top