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

Langage Java Discussion :

erreur dans une boucle


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut erreur dans une boucle
    Bonjour
    j'essaye d'écrire une classe Distance qui prends en paramètre une liste de Ville
    chaque ville a un numéro,un X, un Y et un prix par km.
    mon bute c'est de :
    1/prendre une ville au hasard de la Liste comme ville initial.
    2/ trouvé la ville la plus proche (grasse a ma méthode distance(Ville v,Ville v1))
    3/se rendre a la ville la plus proche et calculer de nouveau ou se trouve la ville la plus proche sans revenir a la ville de départ
    exemple
    j'ai 4 ville:
    ville1
    ville2
    ville3
    ville4
    je pars de ville 3>>ville1 et de la je cherche la ville la plus proche on va dire que c'est 3 mais je peux pas revenir car je suis déjà passé donc il me reste la ville4 et 2
    je cherche la plus proche des 2.
    j'ai écrit un code mais j'arrive pas a trouvé mon erreur ce n'est pas une erreur de langage mais de raisonnement
    Cordialement
    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
    59
    60
    61
    62
    import java.util.ArrayList;
    import java.util.Random;
     
     
    public class Distance {
    public Distance (ArrayList res){
    	calculChemin(res);
    }
     
    public void calculChemin (ArrayList loc){
    	Object tmp[]=loc.toArray();
    	boolean visite=false;
    	int rand = new Random().nextInt(loc.size());
    	while(rand==0){
    	rand = new Random().nextInt(loc.size());
    	}
    	int j = 0,index=0;
    	int loca=rand;
    	System.out.println("Ville de départ avec : "+rand);
    	//while(visite==false){
    	double y=distance((Ville)loc.get(loca),(Ville)loc.get(j));
    	tmp[rand]=0;
    	for (int p =0;p<50;p++){
     
     
     
    						for( int i=0;i<loc.size();i++){
    									if (y>distance((Ville)loc.get(loca),(Ville)loc.get(i))&&loca!=i&&((Object) tmp[i]).equals(0)!=true){ 
    										y=distance((Ville)loc.get(loca),(Ville)loc.get(i));
    									    index=i;	
    															}
    														}
    						System.out.println("La ville suiviante est  : "+index);
    						tmp[index]=0;
    						loca=index;
    												y=distance((Ville)loc.get(loca),(Ville)loc.get(j));
    												int ran = new Random().nextInt(loc.size());
    												while(y==0){
    												ran = new Random().nextInt(loc.size());
    												j=ran;
    												}
    												for (int l=0;l<tmp.length;l++){
    													if (tmp[l].equals(0)){
    														visite=true;
    																			}
    													else{visite=false;
    																break;}
    																		}
    	}
    	for (int l=0;l<tmp.length;l++){System.out.println("tmp["+l+"] = "+tmp[l]);}
    	System.out.println("la valeur de visite = "+ visite);
     
    }
    //													}
    	public double distance(Ville v,Ville v1){
    		double dis=Math.sqrt(Math.pow((v1.getPosX()-v.getPosX()),2)+Math.pow((v1.getPosY()-v.getPosY()),2));
    		return dis;
     
     
    }
     
    }
    j'ai mis un for jusqu'à 50. en attendant que je trouve le problème et le remplacer par un while qui est en commentaire

  2. #2
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Bonjour,
    as-tu écrit un algo avant de coder ?

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Non
    en fait, ce que je voulais faire
    0/crée un tableau ou mettre les objets de la liste .
    1/ prendre une Ville au hasard de la liste
    2/initialiser la distance avec la 1er ville de la liste
    3/parcourir la liste est voir si il y a une distance inférieur a la distance initiale
    4/une fois la distance la plus courte trouver.affiché la ville suivante et remplacer dans le tableau des objets sa valeur par 0 afin de savoir que j'ai visité déjà cette ville.
    5/je retourne a 3/ tant que mon tableau d'objets contient des objets différent de 0 et remplacer ma ville de départ soit "la ville hasard" par la nouvelle ville qui sera mon point de départ .

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(y==0){
    													int ran = new Random().nextInt(loc.size());
    												ran = new Random().nextInt(loc.size());
    												j=ran;
    												y=distance((Ville)loc.get(loca),(Ville)loc.get(j));
    c'est la partie du code qui cause problème .
    une fois enlevé sa marche mais il reste un problème

    ex: ville0 ville1 ville2 ville3 ville 4
    ville1>>ville3>>ville0
    sauf que la il va initialisé la distance avec le 1er élément de liste qui est lui meme donc distance c'est 0
    il trouve pas plus petit
    mais je vois pas comment corrigé sa

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Par exemple :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
     
    public class Ville {
     
    	String nom;
    	double x, y;
     
    	public Ville(String nom, double x, double y) {
    		this.nom = nom;
    		this.x = x;
    		this.y = y;
    	}
     
    	public double distance(Ville autreVille) {
    		return Math.sqrt(Math.hypot(autreVille.x - x, autreVille.y - y));
    	}
     
    	@Override
    	public String toString() {
    		return nom + "[" + x + "," + y + "]";
    	}
     
    	public static void main(String[] args) {
    		Ville depart = new Ville("Paris", 15, 10);
    		Distance d = new Distance(new Ville("Lille", 10, 10), depart,
    				new Ville("Nice", 20, 15), new Ville("Rouen", 10, 20),
    				new Ville("Marseille", 20, 10), new Ville("Bordeaux", 10, 15));
    		System.out.println(d.calculCheminLePlusCourt(depart));
    	}
     
    	static class Distance {
     
    		private List<Ville> listeVilles;
     
    		public Distance(Ville... villes) {
    			if (villes.length == 0) {
    				throw new IllegalArgumentException(
    						"la liste de villes est vide");
    			}
    			this.listeVilles = new ArrayList<Ville>(Arrays.asList(villes));
    		}
     
    		public List<Ville> calculCheminLePlusCourt(Ville villeDepart) {
    			List<Ville> trajet = new ArrayList<Ville>();
    			ajouterVilleAuTrajet(trajet, villeDepart);
     
    			while (!listeVilles.isEmpty()) {
    				Ville prochaineVille = villeLaPlusProche(villeDepart);
    				ajouterVilleAuTrajet(trajet, prochaineVille);
    				villeDepart = prochaineVille;
    			}
    			return trajet;
    		}
     
    		private void ajouterVilleAuTrajet(List<Ville> trajet, Ville ville) {
    			trajet.add(ville);
    			listeVilles.remove(ville);
    		}
     
    		private Ville villeLaPlusProche(Ville villeDepart) {
    			double minDistance = Double.MAX_VALUE;
    			Ville villeLaPlusProche = null;
     
    			for (Ville ville : listeVilles) {
    				double distance = villeDepart.distance(ville);
    				if (distance < minDistance) {
    					minDistance = distance;
    					villeLaPlusProche = ville;
    				}
    			}
    			return villeLaPlusProche;
    		}
    	}
    }

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Par défaut
    Merci le code fonctionne
    j'essaye de comprendre encore la façon comment il est écrit
    Merci encore
    juste pour comprendre : je vois toujours pas pourquoi mon code ne fonctionne pas

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

Discussions similaires

  1. [MySQL] erreur dans une boucle ?You have an error in your SQL syntax; check the manual that c
    Par keokaz dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/10/2008, 23h08
  2. Gestion des erreurs dans une boucle While
    Par Gregory.M dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2008, 20h57
  3. erreur dans une boucle
    Par levac dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/06/2007, 09h46
  4. Erreur dans une boucle et ne marche pas ?
    Par mitherkiller dans le forum SDL
    Réponses: 8
    Dernier message: 21/04/2007, 14h17
  5. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 13h45

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