Manipulation d'un objet?

Fermé
Melissa75 Messages postés 16 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 23 mai 2012 - 19 avril 2012 à 09:10
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 20 avril 2012 à 08:59
Bonjour,
J'ai la méthode suivante, j'ai besoin de faire une modification de telle sorte à avoir un tableau searchPoints non pas de type double mais supportant deux types de valeurs "entières" pour la première colonne pour servir d'index et "réelles" pour la deuxième colonne correspondante à l'index de la première colonne. Et si je définis une méthode de trie qui me permet de trier un tel tableau par ordre décroissant de la deuxième colonne,comment procéder pour maintenir chaque valeur réelle indexée par sa valeur entière??? merci beaucoup d'avance
[CODE]
public void run() {
double searchPoints[][] = new double[n][var + 1];

for (int i = 0; i < n; i++) {
double[] tmpX = new double[var];
for (int j = 0; j < var; j++) {
searchPoints[i][j] = this.random(upperLimit, lowerLimit);
tmpX[j] = searchPoints[i][j];
}
double tmp = function(tmpX);
searchPoints[i][var] = tmp;
}

for (int itr = 1; itr <= iteration; itr++) {
sort(searchPoints);

for (int i = 0; i < e; i++) {
double[] x = new double[var];
double[] x_best = new double[var];
for (int j = 0; j < var; j++) {
x[j] = searchPoints[i][j];
x_best[j] = x[j];
}
double f = searchPoints[i][var];
double f_best = f;

for (int indx = 0; indx < nep; indx++) {
double[] x_elite = new double[var];
for (int j = 0; j < var; j++) {
x_elite[j] = this.random(x[j] + ngh, x[j] - ngh);
}
double f_elite = function(x_elite);
if (f_elite > f_best) {
for (int j = 0; j < var; j++) {
x_best[j] = x_elite[j];
}
f_best = f_elite;
}
}

for (int j = 0; j < var; j++) {
searchPoints[i][j] = x_best[j];
}
searchPoints[i][var] = f_best;

}

for (int i = e; i < m; i++) {
double[] x = new double[var];
double[] x_best = new double[var];
for (int j = 0; j < var; j++) {
x[j] = searchPoints[i][j];
x_best[j] = x[j];
}
double f = searchPoints[i][var];
double f_best = f;

for (int indx = 0; indx < nsp; indx++) {
double[] x_elite = new double[var];
for (int j = 0; j < var; j++) {
x_elite[j] = this.random(x[j] + ngh, x[j] - ngh);
}
double f_elite = function(x_elite);
if (f_elite > f_best) {
for (int j = 0; j < var; j++) {
x_best[j] = x_elite[j];
}
f_best = f_elite;
}
}

for (int j = 0; j < var; j++) {
searchPoints[i][j] = x_best[j];
}
searchPoints[i][var] = f_best;

}

for (int i = m; i < n; i++) {
double[] tmpX = new double[var];
for (int j = 0; j < var; j++) {
searchPoints[i][j] = this.random(upperLimit, lowerLimit);
tmpX[j] = searchPoints[i][j];
}
searchPoints[i][var] = function(tmpX);
}
}

sort(searchPoints);

for (int j = 0; j < var; j++) {
optimalPoint[j] = searchPoints[0][j];
}
optimalPoint[var] = -searchPoints[0][var];
}
/CODE

4 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
19 avril 2012 à 10:41
Je ne suis pas sûr d'avoir tout compris, un exemple serait le bienvenu !

"comment procéder pour maintenir chaque valeur réelle indexée par sa valeur entière?"
Si c'est bien ce que je comprends tu auras besoin d'un Comparator
0
Melissa75 Messages postés 16 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 23 mai 2012
19 avril 2012 à 19:46
Salut, ce que je veux c'est qu'au lieu de (double searchPoints[][]) pour des valeurs réelles.utiliser searchPoints un tableau avec deux types de valeurs par exemple:
index valeurs
1 0.3
5 0.1
3 0.01
par la suite je veux faire une méthode de tri qui me permet de trier un tel tableau selon l'ordre décroissant des "valeurs".On m'a dit qu'il faut utiliser OBJECT pour manipuler un truc pareil..Mais pour mon programme je ne sais pas comment?? franchement!!Je veux de l'aide sur ça Merci beaucoup d'avance :)
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
19 avril 2012 à 20:05
Tu devrais faire une petite classe pour contenir tes deux valeurs, et bien sûr implémenter Comparable pour pouvoir les comparer. D'ailleurs toute méthode de tri devrait être généralisée pour trier des Comparable quelconques.

class Point implements Comparable<Point>
{
	public final int index;
	public final double valeur;
	
	public Point(int n, double val)
	{
		index = n;
		valeur = val;
	}

	@Override
	public int compareTo(Point p)
	{
		if (index==p.index)
			return Double.compare(valeur, p.valeur);
		else
			return Integer.compare(index, p.index);
	}
}
0
Melissa75 Messages postés 16 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 23 mai 2012
20 avril 2012 à 07:47
Bonjour, merci KX pour vos réponses..
Je rajoute que mes index sont des nombres entiers aléatoires générés entre deux limites (upperLimit, lowerLimit)..En fonction du nombre généré je fais appel à une fonction qui me donne comme résultat la valeur réelle...Cette étape me permet de donner le résultat du tableau précédent dans l'exemple.que je dois trier....
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié par KX le 20/04/2012 à 09:04
Je ne vois pas ce que ça change...
Pour faire ton tri, tu récupères tes données (index,valeurs) que tu mets dans un tableau de Point, que tu peux alors trié en les comparant deux à deux, puis une fois trié tu récupères tes données...
0