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 programme java sur des vecteurs 3D


Sujet :

Langage Java

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut erreur dans programme java sur des vecteurs 3D
    Bonjour,

    Premier fichier nommé Point3D.java

    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
    public class Point3D
    {
    	private double x,y,z ;
    	public Point3D (double x, double y, double z)
    	{
    		this.x=x;
    		this.y=y;
    		this.z = z;
    	}
    	public void deplace(double dx, double dy, double dz)
    	{
    		x+=dx;y+=dy;z+=dz;
    	}
    	public void affiche()
    	{
    		System.out.println("coordonnées = " +x+" "+y+" "+z);
    	}
    	public double GetX()
    	{
    	return x;
    	}
    	public double GetY()
    	{
    	return y;
    	}
    	public double GetZ()
    	{
    	return z;
    	}
    	public void SetX(double x)
    	{ this.x = x;}
    	public void SetY(double Y)
    	{ this.y = y;}
    	public void SetZ(double z)
    	{ this.z = z;}
    }
    Deuxième fichier nommé Vecteur3D.java

    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
    public class Vecteur3D{
     
    	private Point3D origine, extremite;
    	private double composante_1, composante_2, composante_3;
    	private static Vecteur3D sommeAB;
     
    	Vecteur3D(double composante_1, double composante_2, double composante_3){
    	origine.SetX(0);
    	origine.SetY(0);
    	origine.SetZ(0);
    	this.composante_1=composante_1;
    	this.composante_2=composante_2;
    	this.composante_3=composante_3;
    	extremite.SetX(composante_1);
    	extremite.SetY(composante_2);
    	extremite.SetZ(composante_3);
    	}
     
     
     
    	public void affiche(){
    	System.out.println("Les coordonnées sont : <"+composante_1+", "+composante_2+", "+composante_3+" >");
    	}
     
    	public double norme(){
    	return Math.sqrt((extremite.GetX()-origine.GetX())*(extremite.GetX()-origine.GetX())+(extremite.GetY()-origine.GetY())*(extremite.GetY()-origine.GetY())+(extremite.GetZ()-origine.GetZ())*(extremite.GetZ()-origine.GetZ()));
    	}
     
    	public static Vecteur3D sommeVecteur3D(Vecteur3D A, Vecteur3D B){
    	sommeAB = new Vecteur3D(A.GetComposante_1()+B.GetComposante_1(), A.GetComposante_2()+B.GetComposante_2(), A.GetComposante_3()+B.GetComposante_3() );
    	return sommeAB;
    	}
     
    	public double produitScalaire(Point3D origine1, Point3D extremite1, Point3D origine2, Point3D extremite2){
    	double produit;
    	produit = ((extremite1.GetX()-origine1.GetX())*(extremite2.GetX()-origine2.GetX())+(extremite1.GetY()-origine1.GetY())*(extremite2.GetY()-origine2.GetY())+(extremite1.GetZ()-origine1.GetZ())*(extremite2.GetZ()-origine2.GetZ()));
    	return produit;}
     
    	public void SetOrigine(Point3D origine ){
    	this.origine = origine;}
     
    	public void SetExtremite(Point3D extremite){
    	this.extremite = extremite;}
     
    	public Point3D GetOrigine(){
    	return origine;}
     
    	public Point3D GetExtremite(){
    	return extremite;}
     
    	public void SetComposante_1(double composante_1){
    	this.composante_1 = composante_1;}
     
    	public void SetComposante_2(double composante_2){
    	this.composante_2 = composante_2;}
     
    	public void SetComposante_3(double composante_3){
    	this.composante_3 = composante_3;}
     
    	public double GetComposante_1(){
    	return composante_1;}
     
    	public double GetComposante_2(){
    	return composante_2;}
     
    	public double GetComposante_3(){
    	return composante_3;}
     
     
    }
    Troisième fichier nommé Test2.java

    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 class Test2{
    
    	public static void main(String [] args){
    	Vecteur3D A, B;
    	A = new Vecteur3D(2.0, 3.0, 4.0);
    	B = new Vecteur3D(5.0, 6.0, 7.0);
    	A.affiche();
    	B.affiche();
    	System.out.println("Produit Scalaire = "+produitScalaire(A.GetOrigine(), A.GetExtremite(), B.GetOrigine(), B.GetExtremite()));
    	System.out.println("Norme de A = "+A.norme());
    	System.out.println("Norme de B = "+B.norme());
    
    	}
    }
    Une erreur s'affiche au niveau de la ligne en rouge dans le dernier fichier.
    Si je la retire, j'ai une erreur :
    Exception thread main java.lang.NullPointerException
    at Vecteur3D.<init><Vecteur3D.java : 8>
    at Test2.main<Test2.java5>

    Impossible de régler le problème. J'ai essayé d'enlever toutes les lignes de mon fichier Test2.java et l'erreur viendrait en fait de quand je déclare mes deux vecteurs A et B dans main. Pourtant mon constructeur a l'air juste dans Vecteur3D.

    Merci pour votre aide

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par HighSchool2005

    Une erreur s'affiche au niveau de la ligne en rouge dans le dernier fichier.
    Si je la retire, j'ai une erreur :
    Exception thread main java.lang.NullPointerException
    at Vecteur3D.<init><Vecteur3D.java : 8>
    at Test2.main<Test2.java5>
    et quand tu retires pas la ligne, c'est quoi l'erreur ?

    En fait dans ton constructeur, tu n'initialise pas "origine", d'où le nullpointer ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut quand je ne retire pas la ligne erreur
    Quand je ne retire pas la ligne, mon erreur est :
    Test2.java:9: cannot find symbol
    symbol : method produitScalaire(Point3D,Point3D,Point3D,Point3D)
    location : class Test2
    la ligne en question avec ^ sous les parenthèses de B.GetExtremite()


    J'ai rejouté ces lignes pour initialiser mais 2 erreurs lors de la compilation de Vecteur3D.java :
    <identifier> expected
    et ^ sous le = de chaque ligne ajoutée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    origine = new Point3D(0., 0., 0.);
    	extremite = new Point3D(0., 0., 0.)

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par HighSchool2005

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    origine = new Point3D(0., 0., 0.);
    	extremite = new Point3D(0., 0., 0.)
    euh tu peux me dire ce que c'est 0., une erreur de frappe ?

    parce qu'un double c'est plutot 0.0


    PS : n'envisages tu pas d'utiliser un IDE ? Ce genre d'erreur est directement detecté et en plus on te propose de les corriger automatiquement ... enfin je dis ça ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut
    J'envisage d'utiliser un IDE quand je ne ferais plus des erreurs de ce genre parce que je veux maitriser le langage avant. J'ai déjà Eclipse de téléchargé et qui ne demande qu'à être utilisé mais je programme dans le cadre de mes études et le jour de l'examen, il faut que je sois capable de résoudre mes problèmes sans un IDE...
    Avec juste 0, 0. ou 0.0, il y a aussi l'erreur. toujour le ^ sous le =
    Merci encore pour ton aide.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 119
    Par défaut
    OKOK je suis sur que c ç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 class Vecteur3D{
     
    	private Point3D origine, extremite;
    	private double composante_1, composante_2, composante_3;
    	private static Vecteur3D sommeAB;
     
    	Vecteur3D(double composante_1, double composante_2, double composante_3){
    
                 origine = new Point3D(0,0,0);
    
    	this.composante_1=composante_1;
    	this.composante_2=composante_2;
    	this.composante_3=composante_3;
    
                 extremite = new Point3D(0,0,0);
    
    	}
    Tu ne peux affecter tes valeurs car ton objet n'est pas instancier en memoire !
    La fonction Set est utilisé si tu veux changer une valeur particuliere de ta classe Objet3D.
    Tu dois donc utiliser ton constructeur Objet3D que tu as surcharger pour pouvoir affecter tes nouvelles données.

    Tient moi au courant pour ton programme.

    Bon courage

  7. #7
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par in, dans son PREMIER message
    En fait dans ton constructeur, tu n'initialise pas "origine", d'où le nullpointer ...

    ben oui, c'est ce que je disais depuis le début .... en plus en ce moment, la deuxième paire est à un € même en progressif solaire

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 119
    Par défaut
    LOL et oui )))))

    J'espere qu'il regardera le forum ça serait con de rester bloquer sur cette erreur ))))

    En plus les produit scalaire ça ressemble au TP qui te file ne cours ))

    Ils peuvent pas trouvé un peu plus simple quand meme comme opération ???

    Je v ecrire un tp moi aussi :

    Creer une classe qui calcul la tangeante derivé du produit scalaire en rapport avec la troisieme derivé de l'hyperbole de la classe Hyperbole3D.java que vous devrez ecrire

    Vous avez 30 min !!

    Bref à la fin vous serez un roi des math et une bille en java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut merci à tous
    ah c'était ça mon erreur !!!

    Merci, oui oui je regarde le forum. Ce sont des erreurs auxquelles je n'avais pas pensé mais c'est super important. Donc, on ne peut appliquer une méthode sur un objet qu'une fois qu'il est créé et qu'on lui a donné une valeur dans la case mémoire. C'est l'encapsulation qui m'a piégé !

    Petite question supplémentaire : on applique produitScalaire sur un objet même si c'est une méthode static ?

  10. #10
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par HighSchool2005
    Petite question supplémentaire : on applique produitScalaire sur un objet même si c'est une méthode static ?
    je comprends pas la question ...

    une méthode static peut être appelée indépendemment de toute instance.

    tu l'appelles de cette manière normalement :

    MaClasse.maMethodeStatic

    Tu peux évidemment l'appeler sur un objet, enfin je veux dire, tu n'auras pas d'erreur, mais en réalité c'est MaClasse.maMethodeStatic qui est exécutée ...

    [EDIT] d'ailleurs c'est ce que tu devrais faire, histoire d'être plus propre

Discussions similaires

  1. Petite erreur dans un cours sur la gestion des dates
    Par Alexandre T dans le forum Langage SQL
    Réponses: 0
    Dernier message: 05/02/2012, 15h39
  2. Gestion des erreurs (type Exception java) sur un tMap
    Par gavelin dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 31/01/2011, 10h25
  3. Réponses: 4
    Dernier message: 07/12/2006, 09h53
  4. [MAC] Installer un programme java sur mac
    Par spekal dans le forum Général Java
    Réponses: 10
    Dernier message: 17/07/2006, 16h17
  5. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40

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