2010-11-24 31 views
1

Je suis en train de construire une carte avec le temps à partir de 06h00 à 23h59 les clés et je garderai la trace d'un numéro pour chaque fois que value.I besoin de la temps stocké HH.mm au format et je prévois de construire la carte en utilisant une boucle en incrémentant une minute et exécutez le code suivant à l'intérieur du problème est ici depuis boucle.Cathéter je dois définir le format que je HH.MM strictement pour obtenir l'entrée sous forme de chaîne et formater puis analyser en arrière en double qui affecte les perfomance.Is là un paramètre global pour changer de sorte que quel que soit le numéro deux je choisis dans cette classe particulière devrait être du format ##. ##. Aussi pointer ici pour noter est puisqu'il est temps qu'il se termine à 60 minutes et par conséquent je dois casser l'itération actuelle avec l'aide de .6.Réglage du décimal en forme ##. ## en java

Map map = new LinkedHashMap(); 
    //Edit:Moved DecimalFormat Outside the loop 
    DecimalFormat df = new DecimalFormat("##.##"); 
    for (double time= 06.00; time<= 22.00; time= time+ 01.00) 
    { 

     String timeString = df.format(appointmentTime); 
     time = Double.parseDouble(timeString); 

     if (timeString.indexOf(".6") != -1) 
     { 
      time= time+ 00.40; 

     } 
     map.put(time,"<number>"); 
    } 
+0

Je pense que votre fausse route approach.What est-ce que vous exactement essayez de résoudre? – Emil

+0

J'essaie de garder un format commun ##. ## pour toutes les valeurs doubles dans une classe java particulière.Formatage des éléments individuels affecte les performances.Hardcoding affecte la readablity et son une carte fluide et il peut y avoir des valeurs de pas de 1 minute à 30 donc je ne peux pas le coder en dur non plus. – Harish

+0

Si vous êtes en mesure de modifier votre programme d'exemple en un programme qui compile, exécute et imprime des valeurs et des messages significatifs, je pense qu'il nous sera plus facile de comprendre, et donc d'aider. –

Répondre

2

Je beliI crois que vous choisissez l'approche la plus compliquée. Au lieu d'itérer la variable de temps, vous pouvez itérer un nombre simple indiquant les minutes depuis 0 heure et ensuite générer votre temps double seulement pour la carte.

for(int totalMinutes = 6 * 60; totalMinutes <= 22 * 60; totalMinutes ++) { 
    map.put(buildTimeDouble(totalMinutes),”<number>”); 
} 

Mais je crois (je ne comprends pas votre question à ce moment-là), il serait préférable de ne pas utiliser un double de la clé de la carte, à la place, vous pouvez utiliser votre propre classe de temps, quelque chose comme:

0

Ce n'est pas une bonne approche de pré Compute pour tous ces values.Perhaps vous pouvez utiliser un LRU cache .Cet peut être facilement mis en œuvre au moyen d'un LinkedHashMap .Je pense aussi que vous ne devriez pas utiliser un double pour représenter le temps .Go par ce article, il pourrait vous donner de nouvelles idées.

0

Si vous êtes préoccupé par les performances, une modification que vous devez apporter à votre code consiste à construire le DecimalFormat une seule fois, en dehors de la boucle. La même instance peut être réutilisée encore et encore dans la boucle.

+0

en fait c'est un exemple de code et dans mon code actuel il est en dehors de la boucle, mais mon exigence est que je ne devrais pas faire du tout.L'entrée est une décimale non formatée et je la convertis en une chaîne et retour à une décimale analysée – Harish

0

Vous ne devez pas utiliser les doubles comme compteurs, car les erreurs d'arrondi se répercuteront en générant des erreurs.

ont lieu un compteur entier dont vous calculez les temps dont vous avez besoin.