J'essaie de coder une chanson en utilisant le polymorphisme, mais je suis assez nouveau dans le codage Java et j'ai une expérience vraiment basique. Je pourrais avoir besoin d'aide avec les classes, mais mon plus gros problème est que je ne sais pas comment écrire la partie principale du code, je serais très reconnaissant si quelqu'un pouvait m'aider avec cela.

Voici ce que j'ai jusqu'à présent

public class OldMacdonald {
public interface Farm{
    public String getName();
    public String getNoise();
}

class Dog implements Farm{
    String name;
    String noise;
    
    public Dog(String name, String noise) {
        name=name;
        noise=noise;
    }
    
    public String getName() {
        return name;
    }
    
    public String getNoise() {
        return noise;
    }
}

class Cat implements Farm{
    String name;
    String noise;
    
    public Cat(String name, String noise) {
        name=name;
        noise=noise;
    }
    
    public String getName() {
        return name;
    }
    
    public String getNoise() {
        return noise;
    }
}
    
class Duck implements Farm{
    String name;
    String noise;
        
    public Duck(String name, String noise) {
        name=name;
        noise=noise;
    }
        
    public String getName() {
        return name;
    }
        
    public String getNoise() {
        return noise;
    }

}
    
class Cow implements Farm{
    String name;
    String noise;
        
    public Cow(String name, String noise) {
        name=name;
        noise=noise;
    }
        
    public String getName() {
        return name;
    }
        
    public String getNoise() {
        return noise;
    }

}
    
class Pig implements Farm{
    String name;
    String noise;
        
    public Pig(String name, String noise) {
        name=name;
        noise=noise;
    }
        
    public String getName() {
        return name;
    }
        
    public String getNoise() {
        return noise;
    }

}
    
class Song{
    private Farm [] animal = new Farm[5];
        
    Song() {
        animal[0] = new Dog("dog", "woof");
        animal[1] = new Cat("cat", "meow");
        animal[2] = new Duck("duck", "quack");
        animal[3] = new Cow("cow", "moo");
        animal[4] = new Pig("pig", "oink");
    }
        
    public void lyrics() {
        int i;
            
        for(i=0; i<animal.length; i++) {
            System.out.println("Old MacDonald had a farm, E I E I O,\r\n" + 
            "And on his farm he had a " + animal[i].getName() + ", E I E I O.\r\n" + 
            "With a " + animal[i].getNoise() + " " + animal[i].getNoise() + " here and a " + animal[i].getNoise() + " " + animal[i].getNoise() + " there,\r\n" + 
            "Here a " + animal[i].getNoise() + ", there a " + animal[i].getNoise() + ", evrywhere a " + animal[i].getNoise() + " " + animal[i].getNoise() + ".\r\n" + 
            "Old MacDonald had a farm, E I E I O.\r\n\r\n");
            }
        }
    }

public static void main(String[] args) {
    // TODO Auto-generated method stub

}

}

-2
kivodva 28 août 2020 à 12:54

3 réponses

Meilleure réponse

Vous devez "lancer" votre code d'une manière ou d'une autre, dans un programme autonome Java comme celui-ci qui serait fait à partir de la méthode principale:

public static void main(String[] args)

Il semble que Song soit votre classe qui commence réellement tout, vous devez donc en créer une instance:

public static void main(String[] args) {
   Song mySong = new Song();
}

Les paroles sont générées par la méthode lyrics (), nous devons donc l'appeler:

public static void main(String[] args) {
   Song mySong = new Song();
   mySong.lyrics();
}

Vous voudrez également modifier votre méthode de constructeur Song ():

public Song() {

Vous voudrez peut-être également mettre à jour vos constructeurs dans les classes d'animaux, vous vous assigniez le paramètre à lui-même (facile à faire en utilisant les mêmes noms pour les variables dans les paramètres et les champs privés):

public Cat(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }
2
DaFoot 28 août 2020 à 11:01

Il y a trois problèmes avec votre code:

  1. Vous n'avez pas besoin de déclarer toutes les interfaces et classes à l'intérieur de la classe, OldMacdonald.
  2. Vous n'avez affecté aucune des valeurs de paramètre aux variables d'instance, par exemple vous devez utiliser this.name = name pour attribuer la valeur du paramètre name à la variable d'instance, name.
  3. Vous devez instancier la classe Song afin d'appeler la méthode lyrics sur l'instance.

Ci-dessous le code intégrant ces commentaires:

Farm.java:

public interface Farm {
    public String getName();

    public String getNoise();
}

OldMacdonald.java:

class Dog implements Farm {
    String name;
    String noise;

    public Dog(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }

    public String getName() {
        return name;
    }

    public String getNoise() {
        return noise;
    }
}

class Cat implements Farm {
    String name;
    String noise;

    public Cat(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }

    public String getName() {
        return name;
    }

    public String getNoise() {
        return noise;
    }
}

class Duck implements Farm {
    String name;
    String noise;

    public Duck(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }

    public String getName() {
        return name;
    }

    public String getNoise() {
        return noise;
    }

}

class Cow implements Farm {
    String name;
    String noise;

    public Cow(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }

    public String getName() {
        return name;
    }

    public String getNoise() {
        return noise;
    }

}

class Pig implements Farm {
    String name;
    String noise;

    public Pig(String name, String noise) {
        this.name = name;
        this.noise = noise;
    }

    public String getName() {
        return name;
    }

    public String getNoise() {
        return noise;
    }

}

class Song {
    private Farm[] animal = new Farm[5];

    Song() {
        animal[0] = new Dog("dog", "woof");
        animal[1] = new Cat("cat", "meow");
        animal[2] = new Duck("duck", "quack");
        animal[3] = new Cow("cow", "moo");
        animal[4] = new Pig("pig", "oink");
    }

    public void lyrics() {
        int i;

        for (i = 0; i < animal.length; i++) {
            System.out.println("Old MacDonald had a farm, E I E I O,\r\n" + "And on his farm he had a "
                    + animal[i].getName() + ", E I E I O.\r\n" + "With a " + animal[i].getNoise() + " "
                    + animal[i].getNoise() + " here and a " + animal[i].getNoise() + " " + animal[i].getNoise()
                    + " there,\r\n" + "Here a " + animal[i].getNoise() + ", there a " + animal[i].getNoise()
                    + ", evrywhere a " + animal[i].getNoise() + " " + animal[i].getNoise() + ".\r\n"
                    + "Old MacDonald had a farm, E I E I O.\r\n\r\n");
        }
    }
}

public class OldMacdonald {
    public static void main(String[] args) {
        new Song().lyrics();
    }
}

Sortie:

Old MacDonald had a farm, E I E I O,
And on his farm he had a dog, E I E I O.
With a woof woof here and a woof woof there,
Here a woof, there a woof, evrywhere a woof woof.
Old MacDonald had a farm, E I E I O.


Old MacDonald had a farm, E I E I O,
And on his farm he had a cat, E I E I O.
With a meow meow here and a meow meow there,
Here a meow, there a meow, evrywhere a meow meow.
Old MacDonald had a farm, E I E I O.


Old MacDonald had a farm, E I E I O,
And on his farm he had a duck, E I E I O.
With a quack quack here and a quack quack there,
Here a quack, there a quack, evrywhere a quack quack.
Old MacDonald had a farm, E I E I O.


Old MacDonald had a farm, E I E I O,
And on his farm he had a cow, E I E I O.
With a moo moo here and a moo moo there,
Here a moo, there a moo, evrywhere a moo moo.
Old MacDonald had a farm, E I E I O.


Old MacDonald had a farm, E I E I O,
And on his farm he had a pig, E I E I O.
With a oink oink here and a oink oink there,
Here a oink, there a oink, evrywhere a oink oink.
Old MacDonald had a farm, E I E I O.
0
Arvind Kumar Avinash 28 août 2020 à 11:00

Si je vous ai bien compris, dans votre méthode main(), il vous suffit de créer une instance de Song et d'appeler lyrics() dessus, non? Cela remplira le tableau Farm avec les animaux et appellera les méthodes appropriées lors de l'impression des paroles.

1
JustAnotherDeveloper 28 août 2020 à 09:59