Discussion: Problème de syntaxe

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2016
    Messages : 5
    Points : 3
    Points
    3

    Par défaut Problème de syntaxe

    Alors voilà, j'ai comme projet de gérer des championnats d'autos et de motos, mais je rencontre une problème lorsque je recherche le pilote d'un véhicule, en effet je parcours ma liste de pilote d'un championnat, pour chaque pilote appartenant à cette liste je regarde si ce véhicule lui appartient et si c'est le cas alors je retourne l'id du pilote. Malheureusement je pense avoir un problème de Syntaxe (je ne comprend pas d'où vient l'erreur)
    Apelle de la fonction dans le main : idtp = c1.recherchePiloteOfV(m2);
    idtp étant un entier, c1 un championnat et m2 un véhicule.
    J'espère que vous pourrez m'aider Merci d'avance
    rechercheVehiculeForPilote étant dans ma classe Pilote
    recherchePiloteOfV étant dans ma classe Championnat

    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
    public abstract class Vehicule implements VehiculeInterface{
    	private String Modele ;
    	private int Cylindre;
    	private double VitesseMax;
    	private int Identifiant;
     
     
     
    	public Vehicule(String modele, int cylindre, double vitesseMax, int id) {
    		super();
    		Modele = modele;
    		Cylindre = cylindre;
    		VitesseMax = vitesseMax;
    		setIdentifiant(id);
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getIdentifiant() {
    		return Id;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public boolean rechercheVehiculeForAPilote(Vehicule v)
    	{
    		boolean a = false;
    		int i =0;
    		while(a == false || i<ListVehicule.size())
    		{
    			if(ListVehicule.get(i).getIdentifiant() == v.getIdentifiant())
    			{
    				a=true;
    			}
    			i++;
    		}
    		return a;
    	}
    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
    public int recherchePiloteOfV(Vehicule v)
    	{
    		int id1 = 0;
    		int i =0;
    		boolean ver = false;
    		while (!ver || i<listPilote.size())
    		{
    			if(listPilote.get(i).rechercheVehiculeForAPilote(v))
    			{
    				id1 = listPilote.get(i).getIdentifiant();
    				System.out.println("Le pilote numero : " + listPilote.get(i).getIdentifiant() + " possède le véhicule " + v.getIdentifiant());
    				ver = true;
    			}
    			i++;
    		}
    		return id1;
    	}

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 074
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 074
    Points : 18 744
    Points
    18 744

    Par défaut

    Hello,

    pour commencer il faut que tu enlèves ces captures d'écran, et à la place tu copies/colles ton code sous forme de texte que nous pouvons nous aussi copier/coller dans nos propres environnements de dev.

    En pensant à mettre ce code entre balises [CODE] quand tu postes le message (le bouton # dans la barre d'outils)

    De plus, il manque la classe Vehicule et sa méthode getIdentifiant().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2016
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Citation Envoyé par thelvin Voir le message
    Hello,

    pour commencer il faut que tu enlèves ces captures d'écran, et à la place tu copies/colles ton code sous forme de texte que nous pouvons nous aussi copier/coller dans nos propres environnements de dev.

    En pensant à mettre ce code entre balises [CODE] quand tu postes le message (le bouton # dans la barre d'outils)

    De plus, il manque la classe Vehicule et sa méthode getIdentifiant().
    Merci pour l'astuce je débute sur le forum

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    9 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 9 463
    Points : 23 356
    Points
    23 356
    Billets dans le blog
    2

    Par défaut

    Salut,

    Déjà je trouve étrange que tu aies une variable nommée Identifiant (private int Identifiant;) alors que ta méthode retourne une variable nommée Id qu'on ne voit pas dans les attributs de la classe Véhicule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getIdentifiant() {
    		return Id;
    	}
    Ce ne serait pas return Identifiant que tu voulais écrire ?

    A ce sujet, en plus du code, nous décrire l'erreur que tu rencontres ne serait pas un luxe (la trace de l'exception le cas échéant, le résulat attendu et le résultat obtenu, etc).
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    août 2006
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 3 419
    Points : 6 741
    Points
    6 741

    Par défaut

    Ok c'est mieux mais il manque toujours de quoi exécuter le code qui pose problème, il manque des bouts.

    Cela dit, les recherches que tu fais tu pourrais la simplifier un peu déjà pour plus de lissibilité en faisant genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public boolean rechercheVehiculeForAPilote(Object v)
    	{
    		for (int i = 0; i < ListVehicule.size(); i++)
    			if (ListVehicule.get(i).getIdentifiant() == v.getIdentifiant())
    				return true;
    		return false;
    	}
    pareil pour recherchePiloteOfV()
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2016
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Retour du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    	at java.util.ArrayList.rangeCheck(Unknown Source)
    	at java.util.ArrayList.get(Unknown Source)
    	at org.tp.java.Pilote.rechercheVehiculeForAPilote(Pilote.java:148)
    	at org.tp.java.Championnat.recherchePiloteOfV(Championnat.java:204)
    	at org.tp.java.Championnat.main(Championnat.java:246)
    Avec ce code j'espère le numero d'identifiant du pilote possédant le véhicule V

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    9 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 9 463
    Points : 23 356
    Points
    23 356
    Billets dans le blog
    2

    Par défaut

    Là, au moins, c'est tout de suite plus clair et évident. Tu as une exception qui signifie que tu essayes d'accèder à un élément d'une liste à la position 0 dans la liste, mais que cette liste est vide, et, donc, n'a pas d'élément de position 0.

    Le problème vient de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(a == false || i<ListVehicule.size())
    Tu dis qu'on doit parcourir la liste tant que a est faux, ou tant que i est inférieur à la taille de la liste. La seconde condition devient bien fausse lorsque i devient >= ListVehicule.size(). Mais a reste false, donc la première condition est vraie. Or vrai ou faux est toujours vrai.

    Remplace-le ou par un et (le || par &&). Ensuite, il y a d'autres façons de procéder.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2016
    Messages : 5
    Points : 3
    Points
    3

    Par défaut

    Merci beaucoup pour l'éclairage que vous m'avez apporté, j'avais un peu de mal avec les opérateurs logique dans les conditions.
    J'ai finalement contourné le problème et simplifié mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public int recherchePiloteOfV(Vehicule v)
    	{
    		int id1 = 0;
    		for(int i =0;i<listPilote.size();i++)
    		{	
    			if(listPilote.get(i).rechercheVehiculeForAPilote(v))
    			{
    				id1 = listPilote.get(i).getId();
    				System.out.println("Le pilote numero : " + listPilote.get(i).getId() + " possède le véhicule " + v.getIdentifiant());
    			}
    		}
    		return id1;
    	}
    Encore merci

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    août 2006
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 3 419
    Points : 6 741
    Points
    6 741

    Par défaut

    Certes mais la tu continue la boucle jusqu'a la fin, même si tu as trouvé le pilote. Ce qui n'a aucun intérêt sinon de faire tourner le cpu pour rien. De plus si d'aventure tu avais plusieurs ID les meme dans la liste (ce qui n'est normalement pas logique mais admettons), tu obtiendras toujours le dernier et non le premier (ce qui pourrait être voulu aussi mais bon... un id se doit d'être unique donc on part de ce postulat).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    9 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 9 463
    Points : 23 356
    Points
    23 356
    Billets dans le blog
    2

    Par défaut

    Juste une petite chose :
    Tu devrais ne pas initialiser id1 à 0. En effet, si la position du pilote est 0 alors la méthode retourne 0 et si le pilote n'existe pas dans la liste, la méthode va aussi retourner 0 : tu n'as donc aucun moyen de distinguer les 2 cas. En plus, tu risques d'utiliser la valeur 0 pour récupérer un pilote dans une liste alors qu'il n'y existe pas. Retourne une valeur impossible, comme -1 par exemple. Dans le code appelant, tu pourras faire un test de comparaison avec -1 pour tester si le pilote a été trouvé ou non.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

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