2015-12-15 2 views
-2

Je fais un exercice, qui nécessite DogSchool pour implémenter PetSchool. J'ai l'intention de faire une liste de tableau des animaux qui se sont inscrits dans l'école pour animaux de compagnie, et l'école de chien doivent distinguer les chiens des autres animaux. La caractérisation des chiens est leur cri "Wau! Wau!". J'ai corrigé. Mais il ne peut toujours pas distinguer les chiens des chats.Interface Java et sa mise en œuvre

Niveau = animal

Ceci est le code d'interface.

 import java.util.ArrayList; 


     public interface PetSchool { 

      boolean add(Tier tier); 
      boolean addAll(ArrayList<Tier> tiere); 
      boolean remove(Tier tier); 
      ArrayList<Tier> getTiere(); 

     } 

This is the code of Implementation. 
Please tell me what's wrong with it. 

import java.util.ArrayList; 

public class DogSchool implements PetSchool { 

    public ArrayList<Tier> tiere= new ArrayList<Tier>(); 

     @Override 
     public boolean add(Tier t){ 
      if(t.gibLaut().equalsIgnoreCase("Wau! Wau!")){ 
       return tiere.add(t); 
       } 
      else { 
       return false; 
      } } 


     @ Override 
     public boolean addAll(ArrayList<Tier> tiere){ 
      return this.tiere.addAll(tiere); 

     } 

     @Override 
     public boolean remove(Tier t){ 
      if(!t.gibLaut().equalsIgnoreCase("Wau! Wau!")){ 
       return tiere.remove(t); 
      } 
      else{ 
       return false; 
      } 

     } 

    @Override 
    public ArrayList<Tier> getTiere() { 
     return new ArrayList<Tier>(this.tiere); 

    } 
} 

Eh bien, le problème se produit dans le demoTest:

import java.util.ArrayList; 

public class TierDemo { 
public static void main(String[] args) { 
System.out.println("Test Teil 2:"); 

     DogSchool schule = new DogSchool(); 
     schule.add(new Hund()); 
     schule.add(new Katze()); 
     schule.add(new Hund()); 
     schule.add(new Katze()); 
     schule.addAll(tiere); 
     for (Tier t : schule.getTiere()) { 
      System.out.println(t.gibLaut()); 
     } 

    } 

Après la compilation, il montre:

Test Teil 2: 
Wau! Wau! 
Wau! Wau! 
Miau! 
Wau! Wau! 

ce qui est mieux, mais il ne peut pas dire distinguer les chiens de chats.

+0

Vous n'avez pas expliqué votre code. –

+2

'Mon code ne fonctionne pas' n'est pas un problème clair. Pourriez-vous clarifier? – jhamon

+1

À quoi ressemble l'erreur du compilateur? Aussi, s'il vous plaît poster le code pour votre classe de niveau. –

Répondre

1

Vous avez beaucoup d'erreurs. La principale chose à noter est que vous devez initialiser la liste tiere et l'utiliser dans toutes vos méthodes au lieu de créer une nouvelle ArrayList dans chaque méthode.

public ArrayList<Tier> tiere; // you forgot to initialize this ArrayList 

@Override 
    public boolean add(Tier t){ 
     ArrayList<Tier> neu= new ArrayList<Tier>(); 
     if(t.gibLaut().equalsIgnoreCase("Wau! Wau!")){ 
      return neu.add(t); // this list is local to the method, you should be adding to tiere 
      } 
     else { 
      return false; 
     } } 


    @ Override 
    public boolean addAll(ArrayList<Tier> tiere){ 
     ArrayList<Tier> neu= new ArrayList<Tier>(); // remove this list 
    return tiere.addAll(neu); // should be this.tiere.addAll(tiere); 

    } 

    @Override 
    public boolean remove(Tier t){ 
     ArrayList<Tier> neu= new ArrayList<Tier>(tiere.size()); // remove this 
     if(!t.gibLaut().equalsIgnoreCase("Wau! Wau!")){ 
      return neu.remove(t); // should remove from tiere 
     } 
     else{ 
      return false; 
     } 

    } 

@Override 
public ArrayList<Tier> getTiere() { 
    return new ArrayList<Tier>(); // should either return tiere or a copy of it (i.e. new ArrayList<Tier>(tiere)) 

} 
2

Fondamentalement, tout est faux avec votre code. Aucune de vos implémentations ne modifie votre tiere. De plus, tester le son de l'animal pourrait ne pas être le moyen le plus sûr de vérifier.

En supposant que vous avez une classe de chien

class Dog implements Tier { 
} 

Cela peut fonctionner si votre description manque quelques détails.

public class DogSchool implements PetSchool { 
    // make your internal list private to prevent unqualidfied modification 
    private ArrayList<Tier> dogs = new ArrayList<>(); 

    public boolean add(Tier tier) { 
    // check the type of the animal and add it to your internal list 
    if (tier instanceof Dog) { 
     return this.dogs.add(tier); 
    } 
    return false; 
    } 

    public boolean addAll(ArrayList<Tier> tiere) { 
    // only add the dogs if every animal in the list is a dog 
    for (Tier t: tiere) { 
     if (!(t instanceof Dog)) 
     return false; 
    } 
    return this.dogs.addAll(tiere); 
    } 

    public boolen remove(Tier tier) { 
    return this.dogs.remove(tier); 
    } 

    public ArrayList<Tier> getTiere() { 
    // return a copy so no one can modify your internal list 
    return new ArrayList<>(this.dogs); 
    } 
} 
+0

Merci! J'y suis arrivé! – Anthony

+0

J'ai encore une question. Pourquoi la méthode boolean remove (Tier tier) n'est-elle pas vérifiée? Mais ça marche toujours. Merci – Anthony

+0

@Anthony Jetez un oeil à la [JavaDoc] (http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#remove-java.lang.Object-) pour la méthode 'remove' – Longhup