Aide Java2

Résolu
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013 - 29 mai 2013 à 18:07
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 - 3 juin 2013 à 18:07
Bonjour, je suis étudiant et debutant en Java, j'aurais besoin d'aide pour un appel de fonction:

J'ai céée cette fonction:

public boolean ajouterLivre(Livre livre) {
boolean resultat;
if(nombreLivre<nombreLivresMax) {
livres[nombreLivre]=livre;
nombreLivre++;
resultat=true;
}
else{
resultat=false;
}
return resultat;

Je cherche maintenant a ajouter des livres mais je n'y arrive pas:
public static void main(String[] args) {
ajouterLivre(livre1);
}

ajouterLivre... est soulibné en rouge. Merci pour votre aide !

32 réponses

Bonjour !

Pour la classe point je comprend mieux: on utilise un constructeur pour pouvoir recuperer et modifier l'objet, objet que l'on initialise par instanciation, et que l'on utilise avec P1.x.

J'ai modifié le programme est ce mieux ? (il est censé definir un point par raport auquel on mesure une distance a un point variable P1)

package tp1ex3;

/**
*
* @author 12mi143
*/
public class Point {
public int a=1;
public int b=2;
public int x;
public int y;

/** Creates a new instance of Point */
public Point(int x, int y) {
this.x=x;
this.y=y;
Point P1 = new Point(x,y);
}
public int distance (Point P1) {
return (int) Math.sqrt((a-P1.x)*(a-P1.x)+(b-P1.y)*(b-P1.y));
}
public void affichage () {
System.out.println("Point:" +x +y);
}
}



Pour la classe blibliothèque, je pense qu'il faut utliser le constructeur de la classe livre et initialiser, est ce ca ? :

public class Livre {
private String titre;
private String auteur;
/** Creates a new instance of Livre */
public Livre(String titre, String auteur) {
this.auteur=auteur;
this.titre=titre;}
Livre livre1 = new Livre("titre1","auteur1");
Livre livre2 = new Livre("titre1","auteur1");



public String getTitre() {
return titre;
}

public void setTitre(String titre) {
this.titre = titre;
}

public String getAuteur() {
return auteur;
}

public void setAuteur(String auteur) {
this.auteur = auteur;
}

}


Merciii... !
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
Modifié par tksteph le 2/06/2013 à 20:56
Commençons par la deuxième question: Peux tu la reformuler?
Et j'insiste, ta classe Livre ne doit pas avoir des lignes comme

"Livre livre1 = new Livre("titre1","auteur1");
Livre livre2 = new Livre("titre1","auteur1"); "

Ce sont là des lignes ou tu crée 2 livres, et il n'ya aucun intérêt à le faire dans la classe Livre.



La première questinon (Ta classe Point)

Si je te suis bien tu as une classe Point qui représente un Point(Affine) avec 2 coordonnées x et y, et tu veux faire une méthode distance qui évalue la distance entre ton point et un autre point qui lui est passé en paramètre.

--1on utilise un constructeur pour pouvoir recuperer et modifier l'objet
Non!! Le constructeur comme son nom l'indique, te sert à "construire" un objet et l'initialiser.

Ci-dessous ta classe modifiée




/**
 *
 * @author Stephane T
 */
public class Point {
    private final int x; //Abscisse
    private final int y; // Ordonnée
    /** Creates a new instance of Point */
    public Point(int x, int y) {
        this.x=x;
        this.y=y;
    }
    
    public double distance (Point P) {
        return  Math.sqrt((this.x-P.getX())*(this.x-P.getX())+(this.y-P.getY())*(this.y-P.getY()));
    }
    
    public void affichage () {
        System.out.println("Point:: Abscisse x: "+x+" Ordonee y: " +y);
    }
    
    public int getX(){ 
        return x;
    }
    
    public int getY(){
        return y;
    }
    
    public static void main(String[] args){
        Point P1 = new Point(1,2);
        Point P2 = new Point(4,3);
        
        P1.affichage();
        P2.affichage();
        
        System.out.println("Distance entre P1 et P2 : "+ P1.distance(P2));
        System.out.println("Distance entre P2 et P1 : "+ P2.distance(P1));
        System.out.println("Distance entre P1 et P1 : "+ P1.distance(P1));
        System.out.println("Distance entre P2 et P2 : "+ P2.distance(P2));

        

    }
} 









Donc voilà une classe point qui fait ce que je décris plus haut.

Remarque le type de retour de ta méthode distance (Point P);
Je l'ai remplacé par double (C'est traduit plus la réalité) mais tu peux remettre le int si tu le souhaite et faire un cast.

Je t'ai aussi rajouté un main pour illustrer ce que je dis
Voici le résultat en sortie:



Point:: Abscissex: 1 Ordonee: 2
Point:: Abscissex: 4 Ordonee: 3
Distance entre P1 et P2 : 3.1622776601683795
Distance entre P2 et P1 : 3.1622776601683795
Distance entre P1 et P1 : 0.0
Distance entre P2 et P2 : 0.0












Si tu veux être le meilleur, il faut que tu battes le meilleur!
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
Modifié par hedii le 2/06/2013 à 23:38
Pour ajouter les livres, il faudrait donc instancier avec cela:
Livre livre1 = new Livre("titre1","auteur1");
Livre livre2 = new Livre("titre1","auteur1");
Puis utiliser la methode avec:
livre1.ajouterLivre()

Ou faire cela ? Pourriez vous simplement me montrer un exemple dans Bibliothèque donc pour que je comprenne, comme cela c'est bon ?

Pour la classe Point, cela suffit il comme j'ai fait, on entrerai x et y dans le main, je supprimerais bien cette ligne avec Point P1 = new Point(x,y);, mais quand on etrerais le x et y ce serait en initialisant simplement: x=3; ou alors avec le constructeur

(c'est pour cela que j'ai mit dedas l'instanciation, pour creer alors le point... on dit d'ailleur dans mon cours cela:

Une fois un objet instancié, on peut utiliser toutes ses variables et méthodes
publiques de la manière suivante :
Objet o = new Objet();
o.méthode();

). Ou faut il faire des methodes getX comme vous l'avez bien fait ?

Merci a toi si je peux vous tutoyez !
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
Modifié par tksteph le 3/06/2013 à 00:11
Tu ne peux pas faire livre1.ajouterLivre() pour ajouter un livre car ta classe Livre n'a pas de méthode ajouterLivre en plus tu n'ajoutes pas des livres à des livres mais à des bibliotheqes plustôt donc logiquement tu dois faire biblio.ajouterLivre(livre1) pour ajouter le livre livre1 à la bibliotheque biblio.

Voici le code comple de la bibliotheque
Je viens de modifier les méthodes retirerLivre et contenu (tu peux voir la façon dont elles sont implémentées) mais concentre toi surtout sur la méthode main et tu auras ton exemple d'utilisation.


public class Bibliothèque {

    private final int nombreLivresMax = 5;
    private int nombreLivre;
    private Livre[] livres;

    /**
     * Creates a new instance of Bibliothèque
     */
    public Bibliothèque() {
        nombreLivre = 0;
        livres = new Livre[5];
    }

    public boolean ajouterLivre(Livre livre) {
        boolean resultat;
        if (nombreLivre < nombreLivresMax) {
            livres[nombreLivre] = livre;
            nombreLivre++;
            resultat = true;
        } else {
            resultat = false;
        }
        return resultat;
    }

    public boolean retirerLivre(Livre livre) {
        boolean resultat=false;

        int i=0;
        while ((!resultat)&&(i<nombreLivre)){
            resultat = (livres[i].equals(livre)) ;
            i++;
        }
        if(resultat){
            livres[i-1] = new Livre("","");
        }
        return resultat;
    }

    public void contenu() {
        Livre livre;
        for (int i = 0; i < nombreLivre; i++) {
            livre = this.livres[i];
            if((livre.getTitre()!="")||(livre.getAuteur()!="")){
                System.out.println("Live: " +livre.getTitre());
            }
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        //Création de la bibliotheque
        Bibliothèque biblio = new Bibliothèque();
        
        //Création de 5 Livres
        Livre livre0 = new Livre("TITRE0", "AUTEUR0");
        Livre livre1 = new Livre("TITRE1", "AUTEUR1");
        Livre livre2 = new Livre("TITRE2", "AUTEUR2");
        Livre livre3 = new Livre("TITRE3", "AUTEUR3");
        Livre livre4 = new Livre("TITRE4", "AUTEUR4");
        
        //Ajout des 5 livres dans la bibliotheque
        
        biblio.ajouterLivre(livre0);
        biblio.ajouterLivre(livre1);
        biblio.ajouterLivre(livre2);
        biblio.ajouterLivre(livre3);
        biblio.ajouterLivre(livre4);
        
        //Affichage des livres
        System.out.println("Contenu de Ma bibliotheque");
        biblio.contenu();

        //Retrait des livres: 1 et 2
        biblio.retirerLivre(livre1);
        biblio.retirerLivre(livre2);
        
        //On liste une fois de plus pour vérifier qu'on a bien retiré les livres
        System.out.println("Contenu de Ma bibliotheque après le retrait des deux livres");
        biblio.contenu();

    }
}



Le résultat en sortie:


Contenu de Ma bibliotheque
Live: TITRE0
Live: TITRE1
Live: TITRE2
Live: TITRE3
Live: TITRE4
Contenu de Ma bibliotheque après le retrait des deux livres
Live: TITRE0
Live: TITRE3
Live: TITRE4








Si tu veux être le meilleur, il faut que tu battes le meilleur!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

Merci bien. J'aimerais savoir a quoi sert l'instanciation de biblio.

Et pour la question sur la classe Point ?

Mercii
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
3 juin 2013 à 10:34
J'aimerais savoir a quoi sert l'instanciation de biblio
?? A créer une bibliotheque!

si tu souhaites avoir plusieurs bibliotheques, comment tu les crée?
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
Modifié par hedii le 3/06/2013 à 13:46
Ok je comprend c'est pour créer le tableau de livre du constructeur. Merci bien.
Et pour la classe Point ^^" dans le programme que j'ai fait est ce utile de laisser le Point P1 = new Point(x,y); du constructeur ? Et deja mon programme convient il ? ou faut il rajouter les get comme tu l'as fait ?

PS: Voici la derneire question pour la classe bibliothèque, je vais y reflechir:

et définissez une
fonction qui prend comme paramètre le nom d'un auteur, et qui renvoie une
bibliothèque contenant tous les ouvrages présents de cet auteur dans la
bibliothèque courante.
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
3 juin 2013 à 14:00
Dans ton cours on dit:


Une fois un objet instancié, on peut utiliser toutes ses variables et méthodes
publiques de la manière suivante :
Objet o = new Objet();
o.méthode();


C'est bien vrai!
Mais quand tu fais ce ci : Object o = new Object(), du dmande au constructeur de s'executer.

Donc si dans ton constructeur, tu fais Point P1 = new Point(x,y); Alors tu viens de créer un point dans ton constructeur, que tu ne vas pas utiliser et là dailleurs tu rentre dans une boucle infinie de création de points (A chaque fois que tu vas faire un new Point(x,y); le new Point(x,y) du constructeur sera appelé et ainsi de suite... on s'arrêtera jamais et ta mémoire risque d'être saturée.)

Et pour ton programme, Retien que les méthodes get/set (Accesseurs et mutateurs) sont utilisées pour modifier les variables privées donc si tes variables sont publiques c'est pas la peine de les utiliser.

Toute fois il est souvent préférable d'utiliser des variables privées pour éviter qu'on ne puisse les modifier de l'extérieure du programme.


0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
Modifié par hedii le 3/06/2013 à 15:08
Tres bien ! c'est compris.

Plus qu'une question et je vous laisser tranquille ! si vous permetez:

et définissez une
fonction qui prend comme paramètre le nom d'un auteur, et qui renvoie une
bibliothèque contenant tous les ouvrages présents de cet auteur dans la
bibliothèque courante.

Je suis actuellement entrain d'y reflechir. Je me demande comment detecter dans le tableau si certains caracteres sont presents dans une cases (donc le nom de l'auteur)
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
3 juin 2013 à 16:20
Il te suffit alors de faire un test sur les caractères en question:

Supposons par exemple que ton paramètre soit : param
Alors tu devras vérifier si param est présent parmis les noms d'auteurs des livres de ton tableau, en fesant par exple
if (param==livre.getAuteur()){
// Ce livre ci fait parti des livres recherchés

}

Je te laisse implémenter la méthode
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
3 juin 2013 à 16:56
Juste pour la ligne pour tester juste l'auteur je n'ai pas reussi comme vous l'avez fait:

public void contenuAuteur(String auteur) {
for(int i=0; i<nombreLivre; i++) {
if (livres[i]==(livres.auteur)) {
System.out.println("livre"+i+": "+livres[i]);
}
}
}
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
Modifié par tksteph le 3/06/2013 à 17:07

(livres[i]==(livres.auteur))


Trouves tu normal de faire ça?
(Je pense que ton problème réside au niveau de la manipulation des objets, variables et méthodes: Revoir le cours à ce niveau)
En attendant essaie de m'expliquer à quoi fait réference livre[i] et à quoi fait réference livres.auteur ?? (Si tu réussis, je pense que tu comprendra beaucoup de choses de là)
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
3 juin 2013 à 17:13
Non justement. livres[i] fait reference au titre et a l'auteur et livres.auteur a l'auteur. Qu'ecrire donc pour cette comparaison ? Je vais comprendre ce que vous marquerez maintenant, je progresse ^^.

Merci
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
3 juin 2013 à 17:19
livres[i] fait reference au titre et a l'auteur et livres.auteur a l'auteur
NON!
livres[i] c'est l'élément à la ième position du tableau livres[], soit le livre qui se trouve à la ième position;

et livres.auteur ne represente rien du tout! vu que livres est un tableau.

Logiquement ton IDE(Eclipse/Netbeans) devrait te l'avoir souligné et si tu approches le curseur dessus il te dit quel est le problème.
Donc ce que tu dois comparer c'est le paramètre auteur que tu passe à la méthode, avec l'auteru du livre à la position i soit ceci

(auteur==livre[i].getAuteur()))

ou encore (auteur==livre[i].auteur)) // si ton attribut auteur est public

ou alors utiliser des "equals" à la place des"=="
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
3 juin 2013 à 17:26
Evidemment livre[i].auteur je suis bete, c'est une erreur d'inattention. Merci je test de suite !
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
3 juin 2013 à 17:40
Voici:

public void contenuAuteur(String auteur) {
for(int i=0; i<nombreLivre; i++) {
if (auteur.equals(livres[i].getAuteur())) {
System.out.println("livre"+i+": "+livres[i]);
}
}
}

Je vous remercie pour tout tksteph vraiment ! J'espere que vous reponderez, si vous le voulez, a mes prochaines questions car j'ai encore quelques exos a faire !

Grace a vous je comprend mieux java. Merci et a bientot
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
3 juin 2013 à 18:07
Oublie pas de marquer ton sujet en résolu
0