Le problème se situe aux lignes 23 et 25.

double r.length = Convert.ToDouble(Console.ReadLine());

double r.width = Convert.ToDouble(Console.ReadLine());

Je ne sais pas comment faire la conversion de chaîne en double pour que le programme prenne des nombres doubles de l'utilisateur.

Mon professeur de programmation l'a fait une fois mais j'ai oublié de le noter.

class Rectangle
{
    double length;
    double width;
    public double GetArea()
    {
        return length * width;
    }
    public void Display()
    {
        Console.WriteLine("Length: "+length);
        Console.WriteLine("Width: "+ width);
        Console.WriteLine("Area: "+ GetArea());
    }
}

class ExecuteRectangle
{
    static void Main(string[] args)
    {
        Rectangle r = new Rectangle();
        Console.WriteLine("Length= ");
        double r.length = Convert.ToDouble(Console.ReadLine()); // <===
        Console.WriteLine("Width= ");
        double r.width  = Convert.ToDouble(Console.ReadLine())); // <===
        Console.Writeline("Area= ");
        r.Display();
        Console.ReadLine();
    }
}
c#
0
dennis 26 janv. 2019 à 22:03

3 réponses

Meilleure réponse

Il y a quelques problèmes à résoudre:

Rectangle

  • length et width doivent tous deux être public
  • length et width doivent être des propriétés
    • Autrement dit, ils devraient avoir { get; set; } ajouté
  • Les noms de length et width doivent être en majuscules car ce sont des propriétés
    • Ceci est une convention de dénomination C #
  • Remplacer ToString() pour créer une description / chaîne pour un objet

ExecuteRectangle

  • Vous n'avez pas besoin du mot clé double pour référencer r.length et r.width dans ExecuteRectangle
  • Pour convertir une chaîne en double, utilisez double.TryParse
class Rectangle
{
    public double Length { get; set; }
    public double Width { get; set; }

    public double GetArea()
    {
        return Length * Width;
    }

    public override string ToString()
    {
        var stringBuilder = new StringBuilder();

        stringBuilder.AppendLine("Length: " + Length);
        stringBuilder.AppendLine("Width: " + Width);
        stringBuilder.Append("Area: " + GetArea());

        return stringBuilder.ToString();
    }
}

class ExecuteRectangle
{
    static void Main(string[] args)
    {
        Rectangle r = new Rectangle();

        Console.WriteLine("Length= ");
        double.TryParse(Console.ReadLine(), out r.Length);

        Console.WriteLine("Width= ");
        double.TryParse(Console.ReadLine(), out r.Width);

        Console.Writeline("Area= " + r.GetArea());

        Console.WriteLine(r.ToString());

        Console.ReadLine();
    }
}
1
Brandon Minnick 26 janv. 2019 à 19:57

Outre ce qu'Amir Arbabian a déclaré dans sa réponse, il y a un autre problème. Le niveau de protection pour Rectangle.width et Rectangle.length n'est pas spécifié, ils sont donc par défaut privés. Pour le rendre accessible, ajoutez le mot clé public avant les champs length et width dans Rectangle.

public double length;
public double width;

Une dernière chose est que vous avez une parenthèse fermante supplémentaire ()) sur la ligne

double r.width  = Convert.ToDouble(Console.ReadLine()));

Supprimez simplement l'une des parenthèses fermantes pour supprimer cette erreur. Et supprimez le mot-clé double, comme l'a dit Amir Arbabian.

Aussi, pourquoi avez-vous besoin de ce dernier Console.ReadLine()?

1
Embodiment of Ignorance 26 janv. 2019 à 19:15

Vous devez l'écrire comme

r.width = Convert.ToDouble(Console.ReadLine());

Sans mot clé double . Vous n'utilisez le type que lorsque vous déclarez quelque chose, mais ici, vous affectez simplement une valeur au champ de l'objet. J'espère que cela pourra aider.

0
Amir Arbabian 26 janv. 2019 à 19:09