|
|
|
|
Configuration: Windows XP Firefox 2.0.0.15
|
Ton objet Vector <String> queue; est private (puisque tu l'as déclaré comme tel).
Pour le récupérer, tu dois créer une classe du genre: public queue getvector(){ return queue; } Assure toi donc que l'objet dans quoi tu vas le mettre sera aussi un vecteur ;) Pour ton deuxième cas, comme tu peux le voir, le nom de ta class est "Monnaie" et le nom des deux méthodes nommées est "Monnaie". Lorsqu'une méthode porte le même nom que sa classe, elle est appelée un constructeur. Ma parole, tu n'as pas appris les bases du java toi. :P Lorsque tu fais: Monnaie m = new Monnaie(); La méthode appelée dans ta classe "Monnaie" sera "Monnaie" (donc ton constructeur). En programmation objet il a la notion de polymorphisme. Un exemple de polymorphisme est la "surcharge" c'est-à-dire le fait de donner plusieurs fois le même nom à plusieurs méthodes différentes dans une même classe mais en leur spécifiant des paramètres différents. Donc ton polymorphisme c'est ici la surcharge de ta méthode Monnaie. Ta première méthode ne prend aucun paramètre et la deuxième prend un string et un float. Donc pour construire un objet de cette classe, tu as deux façons: 1- Monnaie m = new Monnaie(); //appellera ta première méthode 2- Monnaie m = new Monnaie("salut",0.1); //appellera ta deuxième méthode Et comme tu peux le voir, dans ton cas, le but d'avoir deux fois cette méthode est bien simple. La première méthode est utilisée lorsque l'utilisateur ne spécifie aucun paramètre (on donne donc des valeurs par défaut qui sont "" pour le name et 0.0 pour le taux). La deuxième est utilisée dans le cas où l'utilisateur a entré deux paramètres et donc name prendra la valeur donnée en paramètre et taux de même). "Can't we learn from history, why's it such a mystery?" |
|
Bonjour X fan
Merci pour tes explications. Déjà pour ma 2eme question , je sais qu'une méthode de même nom que la classe est un constructeur mais je ne voyais pas l'utilité du polymorphisme donc merci à toi. Pour ma première question en fait ma classe Queue existe déjà ainsi que ses méthodes comme tu l'as vu. J'ai peut être mal formulé ma question je ne voulais pas récupérer par un return mais en fait une instance queue de Queue pour travailler dessus avec Produceur par exemple. Mais l'appel de type Queue queue = new Queue(); ne semble pas fonctionner. Comprends-tu ma question? Merci beaucoup à toi en tous cas Math |
Bonjour mathyass,
première chose, il me semble, si j'ai bien compris que ce que tu souhaites faire avec Vector c'est une Pile!!! donc je te conseillerai d'utiliser la classe Stack plutot que Vector!!! Elle possède les méthodes dont tu as besoin! push et pop!!! Pour ton problème d'appel de ta classe Queue dans un main, verifie que ta variable est soit locale : public static void main(String[] args) { Queue q = new Queue(); } s'il s'agit d'un attribut de ta classe, vérifie qu'il soit bien static!! private static Queue q; public static void main(String[] args) { q = new Queue(); } j'espère avoir répondu à ta question!
|
|
Merci à vous j'ai réussi à régler mon soucis en utilisant Queue q = new Queue(); que j'avais mal utilisé.
Par contre après j'ai eu un soucis avec un string utilisé comme paramètre dans une classe à part private int numero; private String message; private long intervale; private Queue queue; public Producteur (int numero, String message, long intervalle, Queue queue){ this.numero = numero; this.message=message; this.intervale=intervale; this.queue=queue; } Pour entrer le paramètre message quand j'appel un producteur dans ma méthode main : Producteur p1 = new Producteur(1,mess,1000,queue1); J'ai eut une erreur sur le mess: tout d'abord je ne l'avais pas déclaré (dans ma classe main) public String mess = "message test"; ensuite le programme me demandai de le passer en static public static String mess = "message test"; ce qui a fonctionné. D'où une question que je me pose: quand on entre un parametre int (dans un appel d'une instance dans la méthode main) on a nul besoin de le déclarer mais un string oui il a une raison? (désolé si ma question est bête mais je m'y met en essayant de bien comprendre ) Et une autre petite question o passage. Si j'écrit par exemple Boolean test = false; while (!test) j'ai un doute avec cette condition quelqu'un peut il me dire clairement? car j'hésite avec tant que test est false => !test est true donc on reste dans la boucle mais je ne suis pas certain. Merci à vous tous pour votre aide :) |
|
Oups j'ai écrit une bétise et je peux pas éditer
Mais c'est bon pour mon histoire de static j'ai juste oublié de mettre les "" dans la déclaration : Producteur p1 = new Producteur(1,"mess",1000,queue1); honte à moi lol je m'excuse Par contre pour le ! je veux bien vos eclaircissement ^^ Mathyass |
|
Boolean test = false;
while (!test) { blablabla... } Cela veut dire, tant que différent de test. Mais je suppose que comme il n'y a pas d'élément de comparaison, soit c'est une boucle infinie soit ça ne passe pas dedans (essaie avec le débugger). Je sais que while (test) est infini mais j'ai jamais essayé avec un ! devant mais peut-être que ce sera le même résultat (vu que rien a comparé donne toujours vrai). Fait un test en mettant un System.out.println("salut"); et regarde si ça affiche. "Can't we learn from history, why's it such a mystery?" |
|
Bon il semblerait que ce soit une boucle infinie à part si la tache est interrompue merci :)
|
|
Re à tous,
Bon j'ai encore des eclaircissements à vous demander mais comme j'ai commencé un topic je pense continuer dessus à part si un modérateur y vois un inconvénient. Donc voilà c'est au sujet d'un programme de type: client serveur base de données oracle Voici l'interface : import java.rmi.Remote; import java.rmi.RemoteException; import java.util.ArrayList; public interface Connex extends Remote { ArrayList<Monnaie> afficher() throws RemoteException; int ajoute(Monnaie monnaie) throws RemoteException; int modifier(Monnaie monnaie) throws RemoteException; int supprimer(Monnaie monnaie) throws RemoteException; } Voici la classe Monnaie : import java.io.Serializable; public class Monnaie implements Serializable { /** * */ private static final long serialVersionUID = 5292042252928489543L; String name; float taux; public Monnaie() { this.name = ""; this.taux = (float)0.0; } public Monnaie( String nom, float t ) { this.name = nom; this.taux = t; } } et le début de la classe client : import java.io.BufferedReader; import java.io.InputStreamReader; import java.rmi.*; import java.util.ArrayList; public class ConnexClient { private static void afficher( Connex connect ) { ArrayList<Monnaie> result; try { result = connect.afficher(); for( Monnaie monnaie : result) { System.out.println("Devise: "+monnaie.name+"\tValeur: "+monnaie.taux); } } catch (RemoteException e) { e.printStackTrace(); } } Ici la méthode afficher renvoi le résultat de la méthode connect.afficher() de l'interface implémentée par le serveur (car la méthode executeQuery de jdbc retourne un ResultSet qui n'est pas sérialisable et ne peut donc pas être renvoyé directement via un RMI et il faut donc recopier les données du ResultSet dans une collection de données sérialisable) mais je ne comprend pas la condition for( Monnaie monnaie : result)...? De plus voici l'implémentation sur le serveur: public synchronized ArrayList<Monnaie> afficher() throws RemoteException { ArrayList<Monnaie> monnaies = new ArrayList<Monnaie>(); try { System.out.println(InetAddress.getByName(getClientHost()).getHostName() + " affiche"); String requete = "SELECT * FROM monnaie"; System.out.println("requete: "+requete); ResultSet result = stmt.executeQuery(requete); while( result.next() ) { monnaies.add(new Monnaie(result.getString(1),Float.parseFloat(result.getString(2)))); } return monnaies; } catch (Exception e) { e.printStackTrace(); return null; } } Ici je ne comprend pas : monnaie (dans la commande SELECT * monnaie) représente quoi ici?? (ce n'est pas monnaies créée ni le type d'objet Monnaie). De plus monnaies va donc contenir tous les résultats que result va parcourir mais comment la méthode du client parcours monnaies pour les afficher? Mon post est lourd et j'ai posé pas mal de questions je suis désolé mais j'aimerai bien comprendre. Si vous avez des questions complémentaires avant de me répondre n'hésitez pas. Merci d'avance :) Mathyass
|
|
Ok merci par contre j'avais compris pour la boucle d'affichage mais c'est la condition for( Monnaie monnaie : result) que je ne comprend pas... |
|
Désolé je n'ai jamais vu ça et je n'ai jamais fait de java avec des bases de données en même temps. J'ai fait les deux mais c'était séparé et je ne connais que SQL et pas Oracle.
Donc je pourrais pas te dire. ;) "Can't we learn from history, why's it such a mystery?" |
|
Arf pas grave Xfan
Qulequ'un peut m'aider? |
|
Bon j'ai trouvé c'est une maniere particulère de faire les boucles mais j préfère avec les itérateurs et la syntaxe normale merci à tous
|
Résultats pour demande d'explication sur un problème java
Résultats pour demande d'explication sur un problème java
Résultats pour demande d'explication sur un problème java
Résultats pour demande d'explication sur un problème java
Résultats pour demande d'explication sur un problème java