ArrayList<Double> Comment trouver la valeur la plus proche
Bonsoir,
Je suis dans une impasse !!!
J'ai une :
Code:
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
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
Valeur la plus proche resolu
Bonsoir,
J'ai trouvé la solution.
peut être pas orthodox à vous de me le dire.
le code ci dessous si cela peux rendre service:
Code:
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
import java.util.ArrayList;
public class RechercheValeur {
public double RechercheValeur() {
double maValeurRecherchee = 1234.56790;
double maValeurApprochee = (double) 0;
ArrayList<Double> maListe = new ArrayList<Double>();
maListe.add(0.00);
maListe.add(125.387694);
maListe.add(234.56789);
maListe.add(567.89432);
maListe.add(890.76543);
maListe.add(1098.76543);
maListe.add(1234.56789);
maListe.add(1567.89432);
maListe.add(1876.54328);
maListe.add(2123.45678);
int i = 1;
double d = maListe.get(0);
while(d < maValeurRecherchee) {
d = maListe.get(i);
double e = maListe.get(i+1);
// Conversion e et de maValeurRecherchee en int pour permettre de faire la condition
// Java ne permet pas à une condition de comparer 2 doubles de cette manière
int ee = (int) Math.round(e);
int recherchee = (int) Math.round(maValeurRecherchee);
if(recherchee > d && recherchee < ee) {
double differenceInferieur = maValeurRecherchee - d;
double differenceSuperieur = e - maValeurRecherchee;
System.out.println(" --- " + d);
System.out.println("differenceInferieur -- " + differenceInferieur);
System.out.println("differenceSuperieur -- " + differenceSuperieur);
if(differenceInferieur < differenceSuperieur) {
maValeurApprochee = d;
}
else if(differenceInferieur > differenceSuperieur){
maValeurApprochee = e;
}
}
i++;
}
System.out.println("ma valeur approchee est : " + maValeurApprochee);
return maValeurApprochee;
}
}
import java.io.IOException;
public class main {
public static void main(final String[] args) throws IOException {
RechercheValeur maValeur = new RechercheValeur();
double lesValeurs = maValeur.RechercheValeur();
System.out.println("la distance resultante : " + lesValeurs);
}
} |