IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

ArrayList<Double> Comment trouver la valeur la plus proche


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut ArrayList<Double> Comment trouver la valeur la plus proche
    Bonsoir,

    Je suis dans une impasse !!!

    J'ai une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Arraylist<Double> distance [2.54678, 3.59865, 5.85689, 6.32653, 7.13523, 8.52478, 10.46789]
    double interval = 1.5
    Si j'ajoute l'intervalle au chiffre de l'index demandé comment peut-on trouver l'index du chiffre (supérieur ou inférieur) se rapprochant le plus de la somme ?

    Merci pour l'aide que vous pourrez m'apporter

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Peux-tu poster le code effectif en java ?
    (parce que là, cela ne fonctionne pas ...)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Peux-tu poster le code effectif en java ?
    (parce que là, cela ne fonctionne pas ...)
    Désolé de reprendre si tard.
    En faite j'ai créé un graphique d'un profil altimetrique d'une trace GPX avec JFreeChart.
    Maintenant j'aimerais pouvoir indiquer les pourcentages tous les km ou tous les 500 m.
    Pour cela il faut que je retrouve la valeur la plus proche dans l'ArrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    import java.util.ArrayList;
     
    public class ValeurProche {
     
    	public Double ValeurProche() {
     
    		ArrayList<Double> distance;
    		Double laDistance = (double) 0;
    		Double maDistance = (double) 0;
    		distance = new ArrayList<Double>();
     
     
    		distance.add(0.00);
    		distance.add(1.23456789);
    		distance.add(1.87654321);
    		distance.add(2.5432678);
    		distance.add(2.97865432);
    		distance.add(3.5678432);
    		distance.add(3.987654321);
    		distance.add(4.0756432);
    		distance.add(4.9786543);
     
    		double interval = 1.26578905;
     
    		maDistance = distance.get(0)+ interval;
     
    		for (int i = 0; i< distance.size();) {
     
    			if (maDistance == distance.get(i+1)) {
     
    				return maDistance;
    			}
     
    			else
    				if (maDistance > distance.get(i+1)) {
     
    					laDistance = distance.get(i+2);
     
    				}
    // A partir de là je ne sais plus, je suis complètement perdu
    // J'ai essayé les docs mais n'étant pas du tout anglophone !!!
    // je voudrais récupérer la valeur la plus proche de maDistance dans la liste distance
     
    }
     
    public class main {
     
    	public static void main(String[] args) {
     
    		ValeurProche maValeur = new ValeurProche();
     
    		double valeur = maValeur.ValeurProche();
    		System.out.println(valeur);
     
    	}
     
    }

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Je pense que c'est plus un problème d'algorithmique que de Java.

    Peux-tu déjà poser, sans java, avec des mots simple, le problème?

    Parce que je reconnais ne même pas le comprendre ce qui est demandé.

  5. #5
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Je crois que j'ai enfin compris!!!!

    En fait, c'est super simple à comprendre le principe, plus compliqué dans la résolution.

    Avec ce qui est présenté, on peut faire très simple.
    Il y a deux méthodes. Ici, le problème est présenté de façon simpliste, mais en réalité, il est plus compliqué (j'ai fait de la physique), en particulier si on va d'abord vers les X négatifs avant d'aller vers les X positifs. Pire, en 2D, c'est des intégrales curvilignes.

    Dans ton cas, comme par hasard, le problème devient simple, car comme par hasard, les points sont ordonnés de manière croissante.

    Mieux, on part de l'abscisse X=0.

    Donc, au final, la distance à parcourir est ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double distanceAParcourir = distance.get(distance.size() - 1);
    Je note que le nommage est vraiment horrible, ce qui explique que je n'ai pas compris le problème tout de suite, et le nommage de la Liste ne correspond en rien au nommage de ce qu'elle représente fonctionnellement.

    On en déduit facilement le pourcentage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double pourcentage = (intervalle / distanceAParcourir) * 100.0;
    Là aussi, le nommage de "intervalle" ne correspond pas à la réalité du fonctionnel.
    Difficile de comprendre de quoi on parle par la suite.

    Évidement, le suis resté simpliste car le problème en réalité est plus complexe, surtout si on passe en 2D, voir pire en 3D:
    http://hebergement.u-psud.fr/iut-ors...Curviligne.pdf

    Si je passais en 1D (déplacement sur une droite), et que je me déplaçais dans les 2 sens, il faudrait que j'ai une modélisation plus fine, en introduisant par exemple une classe Point, qui permettrait d'avoir le point précédent, le suivant, ce qui permettrait de calculer sur un trajet définit la distance d'un point. En donnant un point, on déterminerait la distance que l'on a parcouru. Sachant qu'il faudrait prendre en considération le fait que l'on puisse passer 2 fois par un même point....

    Effectivement, même en 1D, ce problème n'est pas facile.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Par défaut Je crois que vous n'avez pas compris
    Bonsoir Philippe,

    Ma ArrayList est ordonnée.

    Si je veux trouver la valeur la plus proche de

    0 + 1.26578905 = 1.26578905

    dans ma liste cette valeur se trouve entre l'index (1) et l'index (2), et plus près de l'index(1)
    la fonction devra me retourner soit la valeur de l'index(1) soit l'index lui-même.
    Ainsi je peux recréer une nouvelle liste.
    Si maintenant je crée une boucle pour trouver toutes les valeurs de la liste

    j'aurai au 2eme tour :

    1.23456789 + 1.26578905 =2,50035694

    la fonction me retournera la valeur de l'index(3) ou l'index 3

    au 3eme tour:

    2.5432678 + 1.26578905 = 3,80905685

    la fonction me retournera la valeur de l'index(5) ou l'index 5

    et ainsi de suite

    et le pourcentage : c'est le pourcentage de la pente dans l'intervalle mais cela je sais le faire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/01/2016, 14h23
  2. Trouver la valeur la plus proche de X dans un vecteur
    Par emiliepin_43 dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/04/2015, 00h37
  3. Trouver la valeur la plus proche (deux dimensions)
    Par cscerim3 dans le forum SAS STAT
    Réponses: 0
    Dernier message: 28/03/2014, 16h14
  4. Trouver la valeur la plus proche dans une ligne
    Par tavita987 dans le forum Excel
    Réponses: 5
    Dernier message: 05/02/2014, 11h12
  5. Réponses: 5
    Dernier message: 02/01/2014, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo