Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher le contenu d'un vaisseau grâce à son nom

    21 avril 2017 à 0:10:01

    Bonjour à tous, le titre n'étant pas très explicite, je vais expliquer ce que je tente de faire.
    Dans mon projet de Programmation objet, je dois réaliser la chose suivante: afficher l'ensemble des personnels affectés à un vaisseau.
    Alors pour cela j'ai créer une fonction verifVaisseau dans une classe Vaisseau, pour pouvoir afficher le contenu d'un vaisseau en fonction de son nom. Mais le terminal me donne une erreur lorsque j'essaye d'afficher le résultat dans la classe Application.
    La vérité, c'est que je suis un peu perdu dans la manière de coder quelque chose qui me permette de prendre un vaisseau par rapport à son nom. (Ou la variante sélectionner une personne par rapport à son nom), j'ai tenté pleins de choses depuis hier, notamment quelques test similaire dans la classe Flotte (un tableau de véhicule). Dans le doute je vous donne mes deux classe et un bout de la classe Application (qui est trop long donc je montre l'essentiel). J'utilise aussi une classe personnalisé nommé Clavier, c'est l'équivalent d'un Scanner.

    import liste.Liste;
    
    class Vaisseau {
     private String nom;
     private String type;
     private Liste equipage;
    
     public Vaisseau(String sonNom, String sonType) {
      this.nom=sonNom;
      this.type=sonType;
      this.equipage=new Liste();}
    
     public String verifVaisseau(String sonNom) {
      if (this.nom==sonNom) {
       StringBuilder res = new StringBuilder();
       for (int i=0; i<equipage.size(); i++ ) {
        res.append(equipage.get(i) + " ");}
       return "\nEquipage : " + "\n" + res;
      } else {return "\nCe vaisseau n'existe pas.";}}
    
     public String toString() {
      StringBuilder res = new StringBuilder();
      for (int i=0; i<equipage.size(); i++ ) {
       res.append(equipage.get(i) + " ");}
      return "\nNom du vaisseau : " + this.nom +  "\nType du vaisseau : " + this.type + "\n" + "\nEquipage : " + "\n" + res; }
    }
    class Flotte {
    
     private Vaisseau[] vaisseau;
     private int nb;
     private int sommet=0;
    
     public Flotte() {
      this(50);
      }
    
     public Flotte(int nb) {
      this.vaisseau=new Vaisseau[nb];
      }
    
     public boolean ajouterVaisseau(Vaisseau v) {
      if (sommet==50) {
       return false;
      } else {
       vaisseau[sommet]=v;
       sommet++;
       return true;
       }
      }
    
     public String toString() {
      StringBuilder res = new StringBuilder();
       for (int i=0; i<this.sommet; i++ ) {
        res.append(this.vaisseau[i] + " ");
       }
       return res.toString();
      }
    }
    
    class Application {
    
     public static void main(String[] args) {
      int sousmenu = 0;
      boolean arret = false;
      while (!arret){
      System.out.println("--Menu--");
      System.out.println("[6] Afficher le personnel affecter a un vaisseau");
      System.out.println("[9] Quitter");
      sousmenu = Clavier.readInt();
      switch(sousmenu){
       case 6 : System.out.println("Entrez le nom du vaisseau");
       String nomves = Clavier.readString();
       System.out.println(verifVaisseau(nomvers));
       break;
       case 9 : arret = true;
       break;
      }
     }
    }
    Merci à ceux qui voudront m'aider.
    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2017 à 0:18:15

      En effet le vaisseau n'existera jamais tant que cette ligne est là xD : 
       if (this.nom==sonNom) {

      utilise plutôt la methode equals de String : 

       if (this.nom.equals(sonNom)) {
        ....
       }else{
        
       }



      • Partager sur Facebook
      • Partager sur Twitter
      MSKD
        21 avril 2017 à 9:55:24

        Bonjour,

        La fonction verifVaisseau est mal utilisée (d'ailleurs attention, en argument tu as une faute de frappe dans le nom de ta variable (nomves/nomvers)).

        Dans ta fonction verifVaisseau la condition qui vérifie le nom n'a rien à faire là, voici les étapes à suivre.

        • Créer une Collection de vaisseau (ou un tableau comme tu as fait dans ta classe Flotte mais attention à ne pas dépasser la limite du tableau, vérifie bien).
        • Dans ta classe Application, instancier et déclarer ton objet Flotte (Flotte f = new Flotte(); etc).
        • Avec le nom du vaisseau entré par l'utilisateur, rechercher le vaisseau. Il faut créer une méthode dans ta classe Flotte qui parcourra le tableau et renverra l'index du vaisseau qui a le même nom.
        • Ajouter une autre méthode (getter) qui te retourne un Vaisseau qui se trouve à l'index du tableau que tu mettra en argument.
        • La méthode verifVaisseau dans ta classe Vaisseau te retournera simplement la liste des passagers (sans condition).
        • Il reste plus qu'à faire appelle à tout ça : 
        int indexV = f.rechercheVaisseau(nomVaisseau);
        System.out.println(f.getVaisseau(indexV).verifVaisseau());

        J'espère que ça t'aidera, bonne continuation !
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2017 à 22:27:10

          Merci pour vosaides.
          Avec l'aide de quelqu'un, j'ai fait quelque chose qui marche à moitié.
          Dans la classe Vaisseau j'ai rajouté ceci:

          public String getNom() {
          		return this.nom;
          	}
          public String getEquipage() {
          		StringBuilder equip = new StringBuilder();
          		for (int i=0; i<equipage.size(); i++ ) {
          			equip.append(equipage.get(i) + " ");
          		}
          		return equip.toString();
          	}
          Dans la classe Flotte, ceci:
          public Vaisseau getVaisseau(String sonNom) {
          		int i = 0;
          		boolean trouve = false;
          		do {
          			if(this.vaisseau[i].getNom().equals(sonNom)){
          				trouve = true;
          			}
          			i++;
          		} while(i<this.sommet && trouve==false);
          		if(trouve==true) {
          			return this.vaisseau[i];
          		} else {return null;}
          	}
          
          	public String verifVaisseau(String sonNom){
          		Vaisseau v = getVaisseau(sonNom);
          		if(v==null) {
          			return "Le vaisseau n'existe pas";
          		}
          		else { return v.getEquipage(); }
          	}
          Et dans Application, ceci:
          case 6 : System.out.println("Entrez le nom du vaisseau");
          		String nomves = Clavier.readString();
          		System.out.println(f.verifVaisseau(nomves));
          		break;
          Et tout cela fonctionne avec le 1er vaisseau, mais dès que je veux accéder au deuxième vaisseau, ça me met constamment que le vaisseau n'existe pas, comme si il passait la boucle while. Pourtant j'écris bien le nom du vaisseau.

          EDIT: J'ai fini par résoudre mon problème tous seul, merci de votre aide.

          -
          Edité par piko43 22 avril 2017 à 0:11:16

          • Partager sur Facebook
          • Partager sur Twitter

          Afficher le contenu d'un vaisseau grâce à son nom

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown