2017-06-27 5 views
1

Im Versuch, die Überschreibung Komparator Methode der Priorityqueue und i verwenden möchten folgendes erreichen:Komparator von Priorityqueue in Java

i die aktuelle Liste haben:

RG3 

PR1 

PR2 

RG4 

RG1 

RG2 

die RG bezieht sich auf eine regelmäßige Person und die PR bezieht sich auf eine Person mit Priorität, die Zahlen stellen die Wendungen dar. was ich will, ist eine First-in-first-out-Reihenfolge zu erhalten, außer wenn es eine Priorität Person ist, die an die Spitze der Warteschlange in seinem Zug gehen wird. so in der Liste möchte ich folgendes Ergebnis

PR1 

PR2 

RG1 

RG2 

RG3 

RG4 

heres was ive bisher getan:

Queue<Ficha> cola = new PriorityQueue<>(6, idComparator); 


while (!list.isEmpty()) //this list is the unsorted list. 
     { 
      aux = list.remove(0); 

      cola.add(aux); // adds it to the priority queue 

     } 

     while(!cola.isEmpty()) 
     { 
      aux = cola.poll(); 
      System.out.println(aux.getCod_priority()+aux.getTurn()); // this shows me the order of the queue 
     } 


    } 

    public static Comparator<Ficha> idComparator = new Comparator<Ficha>() 
    { 

     @Override 
     public int compare(Ficha f1, Ficha f2) { 
      return (int) ((f1.getTurn()+prioridad(f1.getCod_priority())) - (f2.getTurn()+prioridad(f2.getCod_priority()))); 
     } 
    }; 


    private static long prioridad(String cod_priority) // this method i use it to give the cod_priority a int value to compare 
    { 
     if(cod_tipo_ficha=="PR") 
     { 
      return 10000; 
     } 
     else 
     { 
      return 1; 
     } 
    } 

und wenn ich es laufen bekomme ich die folgende Reihenfolge:

PR1 

RG1 

RG2 

PR2 

RG3 

RG4 

ich weiß, mein Problem ist in der Vergleichsmethode, aber ich weiß nicht, wie man die Warteschlange erreicht, die ich will.

Ich weiß, es gibt viele Fragen im Zusammenhang mit dem Vergleich, aber die einzigen Antworten, die ich sehe, ist, wenn Sie Zeichenfolgen vergleichen. und diese muss ich die Prioritätszeichenfolge und das int vergleichen.

Antwort

0

Nur cod_tipo_ficha ändern == "PR" zu

if("PR".equals(cod_tipo_ficha)) { 
    ... 
} 

arbeiten Sollte

+0

@amique dass häufiger Fehler ist. Ich mache 5 solche Bugs pro Tag. – alexey28

Verwandte Themen