Aide Java2

Résolu/Fermé
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

tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
30 mai 2013 à 15:13
Bonjour,
Pour les opérations sur les livres, tu en fait ce que tu souhaites selon tes besoins.

PS: je ne comprend pas ce que vous faites pour ajouter un livre; ne peut on pas juste appeler la fonction comme en C++ ?

NON Que ce soit en java ou en c++, si tu fais de l'Orienté Objet, alors les appels de méthodes se font comme je l'ai fait (Prend l'habitude de le faire comme celà),
Sauf pour des méthodes interne (Je t'invite à chercher un petit tuto de débutant en java, tu devrais très rapidement trouver ton compte).


Ajoutez plusieurs Livre d'un même Auteur dans la bibliothèque, 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.


On retombe dans le scénario de ton programme de départ, Ou il faut(Pas nécessairement, mais idéalement) une Classe Livre
Ou un livre est un objet avec un titre, un auteur,un éditeur,une date de parution...
Toute fois tu pourrais t'en passer et utiliser des tableaux à deux entrées, une pour le titre, et une pour l'auteur (MAIS lorsque les infos à rajouter sur le livre augmentent, alors tu te retrouve très vite coincé)


Au fait vous avez remplacer pour le tableau Livre par String pour pouvoir comparer dans retirer livre avec == au lieu de equals

NON PAS DUTOUT!!
Je l'ai fait juste pour faire simple, vu que tu utilisais une classe Livre dont tu n'avais pas conaissance de l'existence.

Et je pense qu'au final c'est une bonne chose car maintenant avec ce que je viens de te dire sur le stockage de tes livres dans les tableaux tu vois bien la nécessité d'utiliser plustôt un objet Livre au lieu de chaines de caractères comme précedement.

La difficulté(Qui n'en n'est pas vraiment une) est maintenant de réfléchir à ton objet Livre.
Je te laisse y réfléchir!
1
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
29 mai 2013 à 18:09
Je vous donne le programme en entier, si besoin est:

package tp1ex2;

/**
*
* @author 12mi143
*/
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 void contenu() {
for (int i=0; i<nombreLivre; i++) {
System.out.println("contenu:" +livres[i]);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ajouterLivre(livre1);
}

}
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
29 mai 2013 à 21:13
remplace ajouterLivre(livre1); par

Livre livre1 = new Livre();
Bibliotheque biblio = new bibliotheque();
biblio.ajouterLivre(livre1);

En supposant que tu aies bien une classe qui s'appelle Livre
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
29 mai 2013 à 21:43
Bonjour merci pour votre aide, cela ne marche pas :s.

Votre ligne Bibliotheque... ca ne me parait pas etre cela.

J'ai ecrit mon programme complet en réponse.

Merci pour votre aide!
0

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

Posez votre question
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
29 mai 2013 à 22:04
En effet je n'ai pas fait attention en ecrivant.

1- je t'ai proposé 3 lignes et non 1
2- Ta classe Bibliotheque a un accent grave sur le e (Bibliothèque) vérifies que Bibliotheque dans ce que je t'ai proposé a la même écriture que ce que tu as.
3-Rassure toi que tu as effectivement une classe Livre à coté!
4- Voici un main de test: (Tu remplace ton main une fois que toutes les conditions ci-dessus sont remplies)

public static void main(String [] args){
Livre livre = new Livre();
Bibliotheque biblio = new Bibliotheque();
if (biblio.ajouterLivre()){
System.out.println("Le Livre a été ajouté!");
}
else {
System.out.println("Le livre n'a pas été ajouté");
}

}
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
29 mai 2013 à 22:13
Bonjour, il n'y a pasde classe livre ! (désolé pour la remarque sur le bibliotheque c'est parce que je me suis trompé avec un exercice où la classe est "Livre" donc ca m'aparru bizarre).

Voici le programme entier:

package tp1ex2;

/**
*
* @author 12mi143
*/
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;
for (int i=0; i<nombreLivre; i++) {

}
}
public void contenu() {
for (int i=0; i<nombreLivre; i++) {
System.out.println("contenu:" +livres[i]);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

}

}
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
29 mai 2013 à 22:34
Ok , Je t'explique le truc :
Tu as une classe Bibliotheque qui manipule des Objets "Livre".

Les opérations qu'on peut effectuer sur ta bibliotheque sont les suivants:

-Ajouter un livre: Dans ce cas une valeur booléenne (oui ou non) est retournée pour dire si oui ou non ton livre a été ajouté.
-retirer un livre : pareil, un booléen est retourné et te dis si oui ou non le livre a été retiré
-lister le contenu de ta bibliotheque.

Dans ton exercice, on ajoutais probabablement des objets Livre, crées préalablement:

On va faire autrement. et remplacer les livres juste par leurs noms (Des chaines de caractères.)

Voici un code identique au tiens, à la seule difference que Les livres sont désormais des chaines de caractères (On va dire qu'il s'agit de leur intitulés)

Il te suffit alors de copier et de remplacer en totalité ton code et de voir les differences ; ce sera pas difficile à comprendre.


public class Bibliothèque {

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

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

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

public boolean retirerLivre(String livre) {
boolean resultat=false;
for (int i = 0; i < nombreLivre; i++) {
if (livres[i]==livre){
resultat = true;
livres[i] = " ";
}
}
return resultat;
}

public void contenu() {
for (int i = 0; i < nombreLivre; i++) {
System.out.println("contenu:" + livres[i]);
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

Bibliothèque biblio = new Bibliothèque();

for (int i=0; i<5;i++){
if(biblio.ajouterLivre("Livre Numero"+i)){
System.out.println("Le Livre Numero"+i+" a été ajouté");
};
}
//Ici on liste les livres qui ont été ajoutés

System.out.println("Contenu de Ma bibliotheque");
biblio.contenu();

// Tu peux t'amuser aussi à retirer des livres.
}
}
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 29/05/2013 à 23:48
Merci a vous tksteph ! Je regarde tout ca demain et vous dis si cela correspond ben a ce que je dois faire.

Mais il y a juste une erreur a la derniere ligne

biblio.contenu(); => reached end of file while parsing

PS: a quoi servent les 2 derneires lignes a l'exterieur du main ? sont elles obligatoires ?
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 30/05/2013 à 13:55
Bonjour, le probleme pour retirer les livres c'est qu'il ne faut pas qu'il y ait un blanc a la place mais que les livres se decalent pour qu'il y en ait un en moins.

J'ai donc juste remplacé votre " " par livre[i+1]

PS: je ne comprend pas ce que vous faites pour ajouter un livre; ne peut on pas juste appeler la fonction comme en C++ ?

Voici la question qui sera la derniere si le retirer livre est correct:
7) Ajoutez plusieurs Livre d'un même Auteur dans la bibliothèque, 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.

PS: Au fait vous avez remplacer pour le tableau Livre par String pour pouvoir comparer dans retirer livre avec == au lieu de equals ?
0
Merci pour les infos :) je comprends mieux le programme.

Nous avons en effet créer une classe livre que voici:

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;}

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;
}

}


C'est compliqué pour moi :s, comment donc ajouter un livre d'une manière simple ?
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
30 mai 2013 à 23:01
Bien tu rajoutes ta classe Livre ci-dessus à coté de ta classe bibliothèque, et dans le code de la classe bibliothèque tu remplace les tableaux de String par des tableaux de livres.
E.g : String[] livres devient Livre[] livres;

Les méthodes ajouter et retirer seront aussi à modifier légèrement.

Essaie déja de faire ça
0
hedii Messages postés 39 Date d'inscription samedi 7 janvier 2012 Statut Membre Dernière intervention 19 juin 2013
31 mai 2013 à 12:24
Bonjour!
J'ai donc remi le programme precedent, il y en effet une erreur a la ligne:

Et voici le retirer livre^où il y avait alors une erreur:

public boolean retirerLivre(String livre) {
boolean resultat=false;
for (int i = 0; i < nombreLivre; i++) {
if (livres[i].equals(livre)){
resultat = true;
livres[i] = livres[i+1];
}
}
return resultat;

PS: Ma classe livre est dans un autre fichier du meme projet.

Merci pour votre aide franchement !
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
31 mai 2013 à 14:59
J'ai donc remi le programme precedent, il y en effet une erreur a la ligne:

A quelle ligne?


Ta méhtode retirerLivre ainsi écrite ne "Retire" pas vraiment un livre.
Elle le remplace par le livre à la position suivante dans ton tableau.

Problème: Imagine que tu souhaites retirer le livre à la dernière case du tableau, alors ta méthode va vouloir remplacer par le livre à la case suivante (qui n'existe pas!!) Donc!!! Revoir ça!!!


Pour la classe Livre, pas de pb, rassure toi juste que tu y as accès depuis ta classe bibliotheque(Si jamais les deux ne sont pas dans le même repertoire, tu devras l'importer : import "chemin de ta classe")
0
Bonsoir,

J'ai donc remi le programme precedent, il y en effet une erreur a la ligne:

A quelle ligne?

Problème: Imagine que tu souhaites retirer le livre à la dernière case du tableau, alors ta méthode va vouloir remplacer par le livre à la case suivante (qui n'existe pas!!) Donc!!! Revoir ça!!!




Voici le programme, avec la correction, je ne sais pas trop si c'est juste, pour le retirer livre:

package tp1ex2;

/**
*
* @author 12mi143
*/
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(String livre) {
boolean resultat=false;
for (int i = 0; i < nombreLivre; i++) {
if (livres[i].equals(livre)){
resultat = true;
livres[i] = livres[i+1];
}
if (livres[nombreLivre].equals(livre)) {
livres[nombreLivre]=null;
}
} public void contenu() {
for (int i=0; i<nombreLivre; i++) {
System.out.println("contenu:" +livres[i]);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

}

}


Pour la classe Livre, pas de pb, rassure toi juste que tu y as accès depuis ta classe bibliotheque(Si jamais les deux ne sont pas dans le même repertoire, tu devras l'importer : import "chemin de ta classe") Pour la classe Livre, pas de pb, rassure toi juste que tu y as accès depuis ta classe bibliotheque(Si jamais les deux ne sont pas dans le même repertoire, tu devras l'importer : import "chemin de ta classe")

Les classes sont toutes les deux dans:: projet tp1ex2 / Source packages / tp1ex2 / et la il y a les 2 fichiers (bibliotheque et livre)
0
Ah j'ai mal lu votre propos, l'erreur etait a la ligne avec le "==" je crois bien.
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
1 juin 2013 à 09:49
Bien évidement cette fois ci si tu manipules les Livre, alors pour retirer un livre il faudra cette fois-ci,pas utiliser le == ou equals sur les objets livres, mais plustôt sur leurs auteurs et titres.
En gros deux livres qui ont le même auteur et le mêmee titre sont égaux.

Et de cette façon tu peux supprimer un livre si tu le retrouves déja dans ta collection.

0
Bonjour!

Mon programme est il quand meme juste ? Pourriez vous m'en dire plus sur ce qu'il fait par rapport a ce qu'il faut faire ? comme ca il me parait retirer le livre si le nom entré est correct, mais ce que j'ai rajouter avec "null" est ce correct ?

voici la question clairement:
Dans Bibliothèque, ajoutez une méthode qui permet de retirer un Livre, et qui
renvoie un booléen à vrai si le Livre a été trouvé et retiré. (pensez à définir des méthodes pour tester l'égalité entre 2 Auteur et 2 Livre)

Merci comme toujours

PS: comme indication on a eu qu'il faut utiliser un: for, un livres[i].equals

Si il faut utiliser l'autre classe ca devient compliqué pour moi la..
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
1 juin 2013 à 11:51
comme ca il me parait retirer le livre si le nom entré est correct, mais ce que j'ai rajouter avec "null" est ce correct


ça marchera, mais s'il t'arrive de manipuler ton tableau de livres, alors ton programme va te retourner des erreurs (NullPointerException).

Autre chose, avec ça, ne t'attend pas à comparer deux livres qui ont le même titre et le même auteur, si ce n'es le même objet.
exemple si tu fais: Livre livre1 = new Livre("titre1","auteur1");
Livre livre2 = new Livre("titre1","auteur1");

ALors livre1 sera different de livre2.


0
Bien ^^. Je vais garder ca pour l'instant et voir avec mon prof si ca suffit.

Par contre pour ca je ne sais pas trop comment ajouter les livres, j'ai fait comme vous avez dit pour l'instant avec l'instanciation dans le main

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


7) Ajoutez plusieurs Livre d'un même Auteur dans la bibliothèque, 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.


PS: une petite quesion en parallele si vos me l'accordez:

Voici un programme dans lequel je ne comprend pas certaines choses:

package tp1ex3;

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



pour la methode distance, que veux dire en java distance(Point P1) et P1.x comment cela va marcher si on ne parle pas du x de P1 ?
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
2 juin 2013 à 00:37
Attention!!! Je n'ai pas dit d'ajouter dans le main:

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

C'était un exemple que je prenais pour illustrer mes propos.

Tes livres tu les crée de la même manière en donnant un livre et un auteur.

7??? Celà ne devrait pas te poser de problème!

Pour ton programme, Et bien distance(Point) est une méhtode appelée distance et qui prend en paramètre un objet de type Point. l'expression en soi n'a aucune signification "en java" mais dans ton programme si.
P1.x c'est l'attribut x de ton objet P1.

comment cela va marcher si on ne parle pas du x de P1
Et bien P1 c'est juste un nom générique, on aurait pu noter X ou Y ou Z ce serait pareil (à la place de P1 biensur).

Et quand tu parles de comment ça va mercher, je suppose que tu parles de la méthode affichage,
affichage est une méthode de la classe Point et qui utilise des attributs de la classe (notament x et y).

Donc x et y sont des attributs de La classe Point et non de l'objet P1 qui est une sorte de point , utilisé dans ta méthode distance (En dehors de distance, P1 n'a plus de sens)
La méthode va donc bien "marcher" car par défaut tes attributs x et y ont des valeurs (1 et 2 respectivement)



0