Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > десятичный счетчик


Автор: aleeex 17.12.2010, 21:02
Задание: Описать класс, реализующий десятичный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство, позволяющее получить его текущее состояние. При выходе за границы диапазона выбрасываются исключения. 
Написать программу, демонстрирующую все разработанные элементы класса.

сама программа:
Код

using System;
 
namespace App
{
    class Counter
    {
        int count;
        int max;
        int min;
        public Counter()
        {
            this.count = 0;
            this.min = 0;
            this.max = 100;
        }
        public Counter(int min_, int max_)
        {
            this.min = min_;
            this.max = max_;
            Random rnd = new Random();
            this.count = rnd.Next(this.min, this.max);
        }
        public int Count
        {
            get
            {
                return this.count;
            }
        }
        public static Counter operator ++(Counter Ob)
        {
            if (++Ob.count > Ob.max)
                throw new Exception("Range error");
            return Ob;
        }
        public static Counter operator --(Counter Ob)
        {
            if (--Ob.count < Ob.min)
                throw new Exception("Range error");
            return Ob;
        }
    }
 
    class Applic
    {
        static void Main()
        {
            int min = 0, max = 0;
            Console.WriteLine("Enter minimum: ");
            min = int.Parse(Console.ReadLine());
            Console.WriteLine("Enter maximum: ");
            max = int.Parse(Console.ReadLine());
            Counter Obj = new Counter(min, max);
            try
            {
                Obj++;
                Console.WriteLine(Obj.Count);
                Obj--;
                Console.WriteLine(Obj.Count);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
    }
}


Помогите сделать так чтобы увеличение и уменьшение происходило с помощью методов, а не с помощью операторов.
Пробовала заменить на 
Код

public Counter increment()
        {
            return new Counter(++this.count);
        }
 
        public Counter decrement()
        {
            return new Counter(--this.count);
        }

но вылазеет 2 ошибки.

Автор: Fortnox 17.12.2010, 22:19
А зачем возвращать новый счетчик? Нужно ведь, просто увеличить значение:
Код

    public class Counter
    {
        public int Min { get; private set; }
        public int Max { get; private set; }
        public int Current { get; private set; }

        public Counter(int min, int max, int current)
        {
            Min = min;
            Max = max;
            Current = current;
        }

        public Counter(int min, int max)
        {
            Min = min;
            Max = max;
            Current = new Random().Next(min, max);
        }

        public void Increase()
        {
            if (++Current > Max)
                throw new Exception();
        }

        public void Decrease()
        {
            if (--Current < Min)
                throw new Exception();
        }
    }

Автор: aleeex 17.12.2010, 23:18
Это уже другой код программы...
а как сделать в моём? 

Автор: Fortnox 17.12.2010, 23:22
Просто вставить методы Increase и Decrease, и чуть подправить названия свойств:
Код

using System;
 
namespace App
{
    class Counter
    {
        int count;
        int max;
        int min;
        public Counter()
        {
            this.count = 0;
            this.min = 0;
            this.max = 100;
        }
        public Counter(int min_, int max_)
        {
            this.min = min_;
            this.max = max_;
            Random rnd = new Random();
            this.count = rnd.Next(this.min, this.max);
        }
        public int Count
        {
            get
            {
                return this.count;
            }
        }
        public void Increase()
        {
            if (++count > max)
                throw new Exception();
        }

        public void Decrease()
        {
            if (--count < min)
                throw new Exception();
        }
    }
 
    class Applic
    {
        static void Main()
        {
            int min = 0, max = 0;
            Console.WriteLine("Enter minimum: ");
            min = int.Parse(Console.ReadLine());
            Console.WriteLine("Enter maximum: ");
            max = int.Parse(Console.ReadLine());
            Counter Obj = new Counter(min, max);
            try
            {
                Obj.Increase();
                Console.WriteLine(Obj.Count);
                Obj.Decrease();
                Console.WriteLine(Obj.Count);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
    }
}

Автор: aleeex 17.12.2010, 23:27
Большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)