Gestion du tampon dans ONE simulator
Résolu
pudya
-
pudya -
pudya -
Bonjour,
Afin de simuler mon modèle que je dois écrire en java, je souhaiterais une aide en java pour résoudre le problème de comparaison de deux messages selon leur nombre de transmission.
quand j'exécute ce programme, il me donne le même résultat comme si la partie de ci-dessous n'existe pas.
Afin de simuler mon modèle que je dois écrire en java, je souhaiterais une aide en java pour résoudre le problème de comparaison de deux messages selon leur nombre de transmission.
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import core.Message; import core.Settings; import routing.ActiveRouter; /** * Drop the messages with the maximum number of transmissions first, i.e., the most forwarded * messages. */ public class MOFODropPolicy extends DropPolicy { /** * Used to configure the initial value of forward count. When configured to 0, a message * that hasn't be sent yet will never be dropped. When configured to a positive number * the algorithm will always drop a message. */ public MOFODropPolicy(Settings s) { super(s); // It doesn't need specific settings. } @Override public boolean makeRoomForMessage(ActiveRouter router, Message incomingMessage) { int size = incomingMessage == null ? 0 : incomingMessage.getSize(); if (size > router.getBufferSize()) { return false; // message too big for the buffer } int freeBuffer = router.getFreeBufferSize(); // Check if there is enough space to receive the message before sorting the buffer if (freeBuffer >= size) { return true; } // Sort the messages by forward count ArrayList<Message> messages = new ArrayList<Message>(router.getMessageCollection()); Collections.sort(messages, new MOFOComparator()); /* Delete messages from the buffer until there is enough space */ while (freeBuffer < size) { if (messages.size() == 0) { return false; // couldn't remove more messages } // Get the message that was most forwarded Message msg = messages.remove(messages.size()-1); // Check if the router is sending this message if (this.dropMsgBeingSent || !router.isSending(msg.getId())) { // Delete the message and send signal "drop" router.deleteMessage(msg.getId(), true); freeBuffer += msg.getSize(); } } return true; } private class MOFOComparator implements Comparator<Message> { @Override public int compare(Message msg1, Message msg2) { int m1= msg1.getForwardCount(); int m2= msg2.getForwardCount(); if (msg1 == msg2){ return 0; } if (m1 < m2){ return -1; }else if (m1 > m2){ return 1; } return ((Integer)msg1.getForwardCount()).compareTo(msg2.getForwardCount()); } } }
quand j'exécute ce programme, il me donne le même résultat comme si la partie de ci-dessous n'existe pas.
public int compare(Message msg1, Message msg2) { int m1= msg1.getForwardCount(); int m2= msg2.getForwardCount(); if (msg1 == msg2){ return 0; } if (m1 < m2){ return -1; }else if (m1 > m2){ return 1;
A voir également:
- Gestion du tampon dans ONE simulator
- Yandere simulator - Télécharger - Stratégie
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- One ui - Guide
- Windows xp simulator - Télécharger - Études & Formations
1 réponse
Bonjour,
La classe de comparaison MOFOComparator ne sert à rien, tu peux la remplacer par un comparateur standard :
Il faudrait que tu affiches la liste avant et après mais il n'y a pas de raison pour que ce ne soit pas trié...
La classe de comparaison MOFOComparator ne sert à rien, tu peux la remplacer par un comparateur standard :
Collections.sort(messages,Comparator.comparingInt(Message::getForwardCount));
Il faudrait que tu affiches la liste avant et après mais il n'y a pas de raison pour que ce ne soit pas trié...
quand j'introduit le code proposé,
, dans mon programme ainsi libellé:
je reçoit l'erreur suivante: Syntax error on tokens, delete these tokens
Par défaut je suppose que tu as la dernière version, mais ton erreur laisse à penser que tu en utilises une plus ancienne...
Donc il n'y a pas de raison de te limiter à Java 6 pour coder, tu peux utiliser les dernières versions.
Mais s'il fallait le faire en Java 6 tu pourrais écrire :
Remarque : Java 6 est sorti en 2006 ! Donc sachant que Java 9 sort en septembre, en continuant à coder en Java 6 tu auras bientôt 3 versions majeures de retard !
j;ai suivi vos conseils. je me suis mis à java 8