मैं एक समस्या के साथ शीर्ष पर हूं मैं समझ नहीं पा रहा हूं कि यहां क्या हो रहा है। मैं एक TreeMap<Custom_class, TreeMap<Custom_class, Integer>> के साथ काम करता हूं

यहाँ कोड का टुकड़ा है:

TreeMap<Coordenada, Integer> helper_tree;
boolean newLine = false;

for (Linea l : this.lineas) {
  int helper = 0;
  newLine = true;
  Coordenada helper_co = null;

  for (Coordenada c : l.getNodosLinea()) {
    helper++;

    if (!c.getEsEstacion() && !c.getEsCruce()) continue;
    if (newLine) { map.putIfAbsent(c, new TreeMap<>()); helper_co = c; helper = 0; newLine = false; continue; }

    helper_tree = new TreeMap<>();
    helper_tree.put(helper_co, helper * 200);
    map.put(c, helper_tree);
    map.get(helper_co).put(c, helper * 200);
    helper_co = c;
    helper = 0;

  }
}

निष्पादन में हाइलाइट की गई रेखा विफल हो जाती है, एक कुंजी के लिए 0 प्रविष्टि प्राप्त करना: इंटेलिज में डिबग मोड

और यह TreeMap संरचना है: ट्रीमैप संरचना

मुझे समझ में नहीं आता कि .get(key) पर क्यों विफल रहता है जब कुंजी Coordenada(12,2) मौजूद होती है। पहले सब ठीक काम करता है।

Coordenada वर्ग

public class Coordenada implements Comparable<Coordenada>{
private int[] coordenada = new int[2];
private boolean esEstacion = false;
private boolean esCruce = false;

public Coordenada(int[] coordenada){
    this.coordenada[0] = coordenada[0];
    this.coordenada[1] = coordenada[1];
}

public void setCoordenada(int[] coordenada) {
    this.coordenada = coordenada;
}

public int[] getCoordenada() {
    return coordenada;
}

public void switchEstacion(){
    this.esEstacion = !this.esEstacion;
}

public void switchCruce() { this.esCruce = !this.esCruce; }

public boolean getEsEstacion() {
    return this.esEstacion;
}

public boolean getEsCruce() { return this.esCruce; }

@Override
public boolean equals(Object coord){
    Coordenada coordTemp = (Coordenada) coord;
    if (this.coordenada[0] != coordTemp.coordenada[0])
        return false;
    if (this.coordenada[1] != coordTemp.coordenada[1])
        return false;
    return true;
}

@Override
public int compareTo(Coordenada o) {
    if (this.coordenada[0] > o.coordenada[0] )
        return 1;
    if (this.coordenada[1] > o.coordenada[1] )
        return 1;
    if (this.coordenada[0] < o.coordenada[0])
        return -1;
    if (this.coordenada[1] < o.coordenada[1])
        return -1;
    return 0;
}

@Override
public String toString() {
    return "(" + coordenada[0] + ", " + coordenada[1] + ")";
}

}

पूरी तरह से सम्मिलित करता है Coordenada(12,2) और पिछले helper_co = Coordenada(10,2) को संशोधित करता है डीबगर वैरिएबल

किसी भी मदद के लिए धन्यवाद!

1
sckv 11 मई 2018, 22:57

1 उत्तर

सबसे बढ़िया उत्तर

अपने compareTo फ़ंक्शन को देखें

(0,1) compareTo (1,0) returns 1
(1,0) compareTo (0,1) returns 1

यह अस्पष्ट है।

0
dehasi 11 मई 2018, 23:30