Gestion du tampon dans ONE simulator
Résolu/Fermé
A voir également:
- Gestion du tampon dans ONE simulator
- One piece kai ✓ - Forum Cinéma / Télé
- Yandere simulator gratuit - Télécharger - Stratégie
- Telecharger one piece - Forum Téléchargement
- One outlook - Guide
- Driver support one - Forum Windows 10
1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
30 juil. 2017 à 02:11
30 juil. 2017 à 02:11
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é...
Modifié le 7 août 2017 à 17:40
quand j'introduit le code proposé,
, dans mon programme ainsi libellé:
/* * Copyright 2016 Aalto University, ComNet * Released under GPLv3. See LICENSE.txt for details. */ package bufdrop; 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 { 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,Comparator.comparingInt(Message::getForwardCount)); /* 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; } }je reçoit l'erreur suivante: Syntax error on tokens, delete these tokens
7 août 2017 à 17:43
Par défaut je suppose que tu as la dernière version, mais ton erreur laisse à penser que tu en utilises une plus ancienne...
9 août 2017 à 01:55
9 août 2017 à 12:39
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 :
Collections.sort(messages, new Comparator<Message>() { @Override public int compare(Message m1, Message m2) { return m1.getForwardCount() - m2.getForwardCount(); } });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 !
19 août 2017 à 20:58
j;ai suivi vos conseils. je me suis mis à java 8