[Noob] Appeler une méthode

Appeler une méthode [Noob] - Java - Programmation

Marsh Posté le 11-10-2013 à 20:42:19    

Bonjours à tous, je suis entrains de m'arracher les cheveux...
Je suis un gros débutant en java, et je cherche simplement comment appeler une méthode d'une autre classe.
 
Je souhaite appeler la méthode "genCrystal()", contenue dans la class GenEnd que voici:
 

Code :
  1. package regen3000end;
  2. import org.bukkit.Location;
  3. import org.bukkit.Material;
  4. import org.bukkit.World;
  5. import org.bukkit.block.Block;
  6. import org.bukkit.craftbukkit.Main;
  7. import org.bukkit.entity.Entity;
  8. import org.bukkit.entity.EntityType;
  9. public class GenEnd
  10. {
  11. private Main plugin;
  12. public GenEnd(Main par0)
  13. {
  14.  this.plugin = par0;
  15. }
  16. public void genCrystal()
  17. {
  18.  World w = ((Entity) this.plugin).getServer().getWorld("world_the_end" );
  19.  Block b;
  20.                 if (w == null)
  21.                         return;
  22.  for (int z=-200; z < 200; z++)
  23.  {
  24.   for (int y=64; y < 150; y++)
  25.   {
  26.    for (int x=-200; x<200; x++)
  27.    {
  28.     b = w.getBlockAt(x, y, z);
  29.     if (b.getType().equals(Material.BEDROCK) && !crystalExist(w, x, y + 1, z))
  30.      w.spawnEntity(b.getLocation().add(0, 1, 0), EntityType.ENDER_CRYSTAL);
  31.    }
  32.   }
  33.  }
  34. }
  35. private boolean crystalExist(World w, int x, int y, int z)
  36. {
  37.                 Location loc;
  38.  for (Entity e : w.getEntities())
  39.  {
  40.   if (e.getType().equals(EntityType.ENDER_CRYSTAL))
  41.   {
  42.                                 loc = e.getLocation();
  43.    if (loc.getBlockX() == x && loc.getBlockY() == y && loc.getBlockZ() == z)
  44.     return true;
  45.   }
  46.  }
  47.  return false;
  48. }
  49. }


 
Je sais que normalement il faut faire  

Code :
  1. MaClasse  maclasse = new MaClasse(par1, par2);
  2. maclasse.maMethode(param1, param2);


 
Mais je galère avec ça, et je ne sais pas quoi mettre à la place des "par1, par2"...
 
Merci d'avance, pour avoir aider un gros débutant qui modifie des plugins en java et qui bloque là :)

Reply

Marsh Posté le 11-10-2013 à 20:42:19   

Reply

Marsh Posté le 11-10-2013 à 23:05:34    

Tout d'abord, une question rituelle : "Quel est le message d'erreur ?"
 
Ensuite, par1 et par2, c'est juste un exemple pour montrer 2 paramètres.
Mais dans le cas présent, je ne vois aucune fonction ayant deux paramètres.
- public GenEnd(Main par0) a un seul paramètre.
- public void genCrystal() n'a pas de paramètre.
- private boolean crystalExist(World w, int x, int y, int z) a quatre paramètres.
 
Les paramètres nécessaires à la création d'une instance de l'objet GeEnd() sont les paramètres du constructeur souhaité.
Ici, il n'y a qu'un seul constructeur qui est public GenEnd(Main par0), et il a besoin d'un paramètre.
 
Ensuite pour l'appel de la fonction genCrystal(), il n'y a pas de paramètre à passer.

Reply

Marsh Posté le 12-10-2013 à 00:15:10    

Je sais bien pour le GenCrystal, mais justement, je ne sais pas quel paramètre entrer pour GenEnd.
Au niveau des erreurs, bah aucune, je cherche juste le paramètre de GenEnd, car sans lui cela ne peux pas tourner...
Le problème, c'est que je ne sais pas lequel mettre

Reply

Marsh Posté le 12-10-2013 à 01:05:03    

La demande devient plus clair.  :)  
 
En théorie, il faut simplement faire :

private Main m = new Main();
GenEnd maclasse = new GenEnd(m);


Si ça ne marche pas, par exemple parce que cela ferait une sorte de boucle,
alors prendre la solution qui est indiquée en bas de la page https://forums.bukkit.org/threads/g [...] es.134366/


Message édité par olivthill le 12-10-2013 à 01:05:27
Reply

Marsh Posté le 12-10-2013 à 11:07:33    

Je test ça, et je te dis :)
 
Edit: Avec cela, il appelle bien la méthode GenEnd, mais pas la méthode genCrystal, la plus importante.


Message édité par splint33 le 12-10-2013 à 11:23:11
Reply

Marsh Posté le 12-10-2013 à 13:36:29    

Ensuite : maclasse.maMethode(param1, param2);
C'est à dire : GenEnd.genCrystal(); ou autrenomdelinstanceGenEnd.genCrystal();

Reply

Marsh Posté le 16-10-2013 à 11:19:58    

Attention, GenEnd(Main par0) est un constructeur (=/= méthode), c'est à dire une "fonction" qui construit une instance de la classe GenEnd.
 
Tu ne peux pas appeler genCrystal au début parce qu'il n'y a aucune instance de GenEnd, c'est à dire aucun objet de classe "GenEnd" qui pourrait effectuer cette méthode.
 
C'est pour cela qu'Olivthill t'a dit de créer un objet GenEnd (= faire une instance)
 
GenEnd genEnd= new GenEnd(m);
 
genEnd (minuscule au début, convention) est une variable, c'est un objet, de classe GenEnd (majuscule, convention aussi).
 
Maintenant que tu as un objet représentant de la classe GenEnd, qui en connaît les méthodes, tu peux lui demander, à lui, d'effectuer la méthode genCrystal(), comme dit au dessus :
 
genEnd.genCrystal();
 
Tu n'as rien à mettre entre les parenthèses puisque la description de la méthode genEnd() dans ton message commence par :
 
public void genCrystal()
 
C'est à dire une méthode publique (public), pouvant être appelée de n'importe où (par un représentant de GenEnd bien sûr), qui ne retourne rien (void) et qui ne prend pas de paramètre ( "()" ).


Message édité par -Sniper-Wolf- le 16-10-2013 à 11:24:33

---------------
⮚ Les Archives de Sniper ⮘
| Science!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed