Problème Java

Bonsoir, je viens de terminer un exercice en java et le programme me trouve une erreur que je n'arrive pas du tout à résoudre (je prog sous eclipse)
voilà la ligne qui ne va pas :

public void toString()
{
String str;
if (forfait == true)
{
//Si la personne possède un forfait on retourne une phrase qui l'indique
System.out.println(super.toString() + " a un forfait");
}
else
{
//Sinon on retourne une phrase qui indique qu'elle n'en a pas
System.out.println(super.toString() + " n'a pas de forfait");
}
}

j'ai mis en gras ce que le programme me souligne si quelqu'un à une idée car c'est à rendre demain
merci

7 réponses

  1. je vais te poster tout le prog sa va être long désolé

    Classe personne

    public class Personne
    {
    //Déclaration des variables protégées
    protected String nom;
    protected int age;

    //Constructeur de la classe recevant en parametre une chaine et un entier
    public Personne(String nom, int age)
    {
    this.nom = nom;
    this.age = age;
    }

    //Setter de nom
    public void setNom(String nom)
    {
    this.nom = nom;
    }

    //Setter de age
    public void setAge(int age)
    {
    this.age = age;
    }

    //Getter de nom
    public String getNom()
    {
    return (nom);
    }

    //Getter de age
    public int getAge()
    {
    return (age);
    }

    //Méthode qui permet de retourner une chaine contenant nom et age
    public String toString()
    {
    //On retourne la phrase ainsi créée
    return (nom + "(" + age + " ans)");
    }

    //Programme principal qui utilise les méthodes de la classe
    public static void main(String[] args)
    {
    Personne P = new Personne("Prénom Nom", 22); //Ajout d'une personne

    //On affiche nom et age à l'aide des getters
    System.out.println("Nom: " + P.getNom());
    System.out.println("Age: " + P.getAge());

    System.out.println(P.toString()); //Affichage avec appel de toString

    P.setNom("Thomas Caillot"); //On change le nom
    P.setAge(21); //On change l'age
    System.out.println(P.toString()); //Affichage avec appel de toString
    }

    }

    __________________________________________________________________________________________

    Classe Skieur

    public class Skieur extends Personne
    {
    //Déclaration d'une variable protégée
    protected boolean forfait;

    //Constructeur de la classe qui reçoit une chaine, un entier, un booléen
    public Skieur(String nom, int age, boolean forfait)
    {
    super(nom, age); //Construction d'une personne
    this.forfait = forfait;
    }

    //Setter de forfait
    public void setForfait(boolean forfait)
    {
    this.forfait = forfait;
    }

    //Getter de forfait
    public boolean getForfait()
    {
    return (forfait);
    }

    //Méthode qui affiche une chaine contenant nom, age
    //et si la personne possède ou non un forfait
    public void toString()
    {
    String str;
    if (forfait == true)
    {
    //Si la personne possède un forfait on retourne une phrase qui l'indique
    System.out.println(super.toString() + " a un forfait");
    }
    else
    {
    //Sinon on retourne une phrase qui indique qu'elle n'en a pas
    System.out.println(super.toString() + " n'a pas de forfait");
    }
    }

    //Programme principal qui utilise les méthodes de la classe
    public static void main(String[] args)
    {
    Skieur S = new Skieur("Prénom Nom", 22, true); //Ajout d'un skieur
    S.toString(); //Affichage avec appel de toString

    S.setForfait(false); //Changement du parametre de forfait
    S.toString(); //Affichage avec appel de toString
    }

    }

    __________________________________________________________________________________________

    Classe Slalomeur

    public class Slalomeur extends Skieur
    {
    //Déclaration d'une variable privée
    private double temps;

    //Constructeur recevant en parametre un skieur
    public Slalomeur(Skieur S)
    {
    super(S.nom, S.age, S.forfait);
    if (forfait == false)
    {
    //On affiche un avertissement si le skieur n'a pas de forfait
    System.out.println(S.nom + " doit se procurer un forfait avant le début de l'épreuve");
    }

    temps = 0; //Initialisation du temps à 0
    }

    //Setter de temps
    public void setTemps(double temps)
    {
    if (forfait == true)
    {
    //On enregistre le temps si le skieur a un forfait
    this.temps = temps;
    }
    else
    {
    //Sinon on affiche un avertissement
    System.out.println("Le skieur n'a pas de forfait");
    }
    }

    //Getter de temps
    public double getTemps()
    {
    return (temps);
    }

    //Méthode qui affiche nom, age et temps de course
    public void toString()
    {
    if (forfait == true)
    {
    //Si le slalomeur a un forfait on affiche la phrase
    System.out.println(nom + " (" + age + "): " + temps + " secondes");
    }
    else
    {
    //Sinon on affiche un avertissement
    System.out.println(nom + " ne peut pas participer sans forfait");
    }
    }

    //Programme principal qui utilise les méthodes de la classe
    public static void main(String[] args)
    {
    Skieur S = new Skieur("Prénom Nom", 22, true); //Ajout d'un skieur
    Slalomeur Sl = new Slalomeur(S); //Ajout d'un slalomeur à partir du skieur

    Sl.setTemps(188); //On met le temps à 188
    Sl.toString(); //On affiche avec toString

    Sl.setForfait(false); //On change l'etat du forfait
    Sl.setTemps(118); //On essaie de mettre un nouveau temps
    Sl.toString(); //Et on affiche pour voir le cas interdit
    }

    }

    ___________________________________________________________________________________________

    voilà merci d'avance
    1. Bonjour,

      Il manque des choses, t'as pas tout mis là non ?

      Il manque la déclaration du booléen forfait. de "super"???
      Chose très bizarre, tu appelles une méthode (toString()) alors que tu es à l'intérieur de celle-ci?. Très bizarre ton code...
      Peut être que ton soucis viens que ToString existe déjà dans le framework.
      1. juste à l'endroit que j'ai mis en gras au premier post, il n'y a pas d'autres erreurs
        1. Moi je fais du C#, pas de Java.

          t'es sur que l'on peut faire un System.out.println dans une méthode?
          1. oui on peu faire çà on java
        2. oui une methode main pour chaque classe car dans l'exercice il est demander de tester chaque classe a chaque fois, après ne faire qu'une méthode je vois pas trop comment faire
          1. je ressent que le souci vient quand tu a définit la méthode main dans chaque classe , ce que je savoir moi qu'il faut définit une seul méthode ,tu es sûr de ça ?