Как я могу присвоить текущую переменную оператору else, чтобы иметь возможность сравнить значение переменной, а затем сохранить его, чтобы получить результат? - PullRequest
0 голосов
/ 09 января 2020

У меня есть оператор If Else для получения ближайшей станции от текущей, что означает, что первая ближайшая станция пуста (не существует), а вторая станция рассчитывается на основе минимального расстояния первой. В остальном я сравниваю текущее расстояние станции с известным минимальным расстоянием, используя Math.Min. Однако я не могу сохранить результат и назначить текущую станцию ​​в операторе Else. Место моей выдачи - строки 14 и 15.

class City : ICity
    {
        private List<Company> _companies;
        private List<Line> _lines;
        private List<Station> _stations;
        internal City(string name)
        {
            this.Name = name;
            _companies = new List<Company>();
            _lines = new List<Line>();
            _stations = new List<Station>();
        }
        public string Name{get;}
        public ILine AddLine(string name){...} 
        public IStation AddStation(string name, int x, int y){...}

        public IStation FindNearestStation(int x, int y)
        {
            int ? minDist = null;
            Station minStation=null;
            foreach (var station in _stations)
            {
                int dis = GetDistancebtween(x1: station.X, y1: station.Y, x2: x, y2: y);
                if (!minDist.HasValue || dis < minDist.Value)
                {
                    minDist = dis;
                    minStation = station;
                }
            }
            return minStation;            
        }

        private int GetDistancebtween(int x1, int y1, int x2, int y2)
        {
            return (x1 - x2) ^ 2 + (y1 - y2) ^ 2; 

        }            
}

Разрывы модульного теста на строке 10.

public void city_returns_effectively_the_closest_station()
{
    ICity c = CityFactory.CreateCity("Paris");

    IStation s = c.AddStation("Opera", 0, 0);
    IStation s1 = c.AddStation("Chatelet", 10, 10);

    c.FindNearestStation(-10, -10).Should().BeSameAs(s);
    //test does not pass in this position
    c.FindNearestStation(10, 10).Should().BeSameAs(s1);
    c.FindNearestStation(15, 15).Should().BeSameAs(s1);
}

1 Ответ

0 голосов
/ 09 января 2020

Если вы измените значение minDist, вам также следует изменить значение minStation. Использование простого if внутри блока else вместо Math.Min должно решить проблему.

....
else
{
    if(dis < minDist.Value)
    {
        minDist = dis;
        minStation = station;
    }
}

, и это приведет к дальнейшим изменениям без использования блока else

foreach (var station in _stations)
{
    var dis = GetDistancebtween(x1: x, y1: y, x2: station.X, y2: station.Y);
    if(!minDist.HasValue || dis < minDist.Value)
    {
        minDist = dis;
        minStation = station;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...