Почему я получаю ошибку, неявно преобразующую тип double в int? - PullRequest
0 голосов
/ 31 марта 2020

Как исправить ошибку "Не удается неявно преобразовать тип 'double' в 'int'. Существует явное преобразование (вы пропустили приведение типа?). Я не вижу, где я изменяю int на double. Вот следующий код, с которым я работаю:

namespace Chapter_9
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle create = new Circle();
            create.SetRadius(2);
            WriteLine("Radius = {0}", create.GetRadius());
            WriteLine("Diameter = {0}", create.GetDiameter());
            WriteLine("Area = {0}", create.GetArea());
        }
    }
    class Circle
    {
        private int Radius;
        private readonly int Diameter;
        private readonly double Area;

        public Circle()
        {
            CircleRadius = 1;
        }
        public int CircleRadius { get; set; }
        public int GetRadius()
        {
            return Radius;
        }
        public void SetRadius(int radius)
        {
            Radius = radius;
        }
        public int GetDiameter()
        {
            int Diameter = Radius * 2;
            return Diameter;
        }
        public int GetArea()
        {
            double Area = Radius * Radius * Math.PI;
            return Area; <--------- !!!!ERROR IS HERE!!!
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

Как вы сказали, ваша главная проблема в том, что вам нужен точный десятичный расчет по целым числам. Тем не менее, ваш тип возврата public int GetArea() равен int. Чтобы исправить вашу непосредственную проблему - просто измените ее тип на удвоенный, и это будет все!

Однако есть несколько других улучшений, которые вы можете сделать. Прежде всего - у вас есть public int CircleRadius { get; set; }, который не используется. Затем, как сказал @Enigmativity, вы пишете это в стиле Java. Используйте автопринадлежности немного больше, это будет намного проще. И обратите внимание на ваши поля - вы объявили их, но не использовали ...

Вот очищенный класс:

class Circle
{
    public double Radius {get; set;}
    public double Diameter 
    { 
        get 
        {
            return Radius * 2;
        }
    }
    public double Area
    { 
        get 
        {
            return Radius * Radius * Math.PI;
        }
    }

    public Circle()
    {
        this.Radius = 1;
    }
}

И ваш главный будет

static void Main(string[] args)
{
    Circle create = new Circle();
    create.Radius = 2;
    WriteLine("Radius = {0}", create.Radius);
    WriteLine("Diameter = {0}", create.Diameter);
    WriteLine("Area = {0}", create.Area);
}
1 голос
/ 31 марта 2020

Похоже, вы намеревались вернуть double, но вы объявили свой метод как возвращающий int.

...