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


Автор: Julia9311 1.10.2014, 19:37
Программа вычисляет порядковый день в году с учетом високосного года. Если дней больше 30 (31) и и февраль больше 28(29), необходимо генерировать исключения. Но следующее условие проверяется только тогда, когда все вышеперечисленные условия прошли успешно. Как мне сделать так, чтобы проверялось по одному условию и если оно не верно, генерировалось исключение?

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _1Б_задание_4
{
    class Data
    {
        public double Year { get; set; }
        public double Month { get; set; }
        public double Day { get; set; }
        public void setYear(double y)
        {
 
            Year = y;
 
            if (y < 1600)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
        }
 
        public void setMonth(double m)
        {
            Month = m;
 
            if (m > 12)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
        }
        public void setDay(double d)
        {
            Day = d;
            if ((d > 30) && (Month == 4)) 
            
                if ((d > 30) && (Month == 6))
               
                    if ((d > 30) && (Month == 9))
                  
                        if ((d > 30) && (Month == 11))
                        
                            if ((d > 31) && (Month == 1))
                           
                                if ((d > 31) && (Month == 3))
                                
                                    if ((d > 31) && (Month == 5))
                                   
                                        if ((d > 31) && (Month == 7))
                                        
                                            if ((d > 31) && (Month == 8))
                                              if ((d > 31) && (Month == 10))
                                               
                                                    if ((d > 31) && (Month == 12))
                                                    {
                                                        throw new System.ArgumentException("Parameter cannot be null", "original");
                                                    }
                                                    
            if ((((Year % 4) == 0) && (Month == 2)) || (Day > 29))
           
            if ((((Year % 4) == 1) && (Month == 2)) || (Day > 28))
            
            if ((((Year % 4) == 2) && (Month == 2)) || (Day > 28))
            
            if ((((Year % 4) == 3) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
 
 
        }
 
 
 
        static void Main()
        {
            int[] myArr = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            int i;
            double t = 0;
            double t1;
            Data data1 = new Data();
            Console.WriteLine("Введите год");
 
            double y = Convert.ToDouble(Console.ReadLine());
            data1.setYear(y);
            Data data2 = new Data();
            Console.WriteLine("Введите месяц");
 
            double m = Convert.ToDouble(Console.ReadLine());
            data2.setMonth(m);
 
            Data data3 = new Data();
            Console.WriteLine("Введите день");
 
            double d = Convert.ToDouble(Console.ReadLine());
            data3.setDay(d);
            if ((y % 4) == 0)
            {
                myArr[2] = 29;
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;
 
                Console.WriteLine(t1);
            }
            else
            {
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;
 
                Console.WriteLine(t1);
            }
 
        }
    }
}

Автор: jonie 1.10.2014, 20:59
вместо всех этих if-ов:
Код

 if ((d > 30) && (Month == 4)) 
            
                if ((d > 30) && (Month == 6))
               
                    if ((d > 30) && (Month == 9))
                  
                        if ((d > 30) && (Month == 11))
                        
                            if ((d > 31) && (Month == 1))
                           
                                if ((d > 31) && (Month == 3))
                                
                                    if ((d > 31) && (Month == 5))
                                   
                                        if ((d > 31) && (Month == 7))
                                        
                                            if ((d > 31) && (Month == 8))
                                              if ((d > 31) && (Month == 10))
                                               
                                                    if ((d > 31) && (Month == 12))

заведите массив (readonly static) на 12 элементов (индекс элемента есть номер месяца, только не забывайте что массивы индексируются с нуля), где значением элемента будет длина месяца в днях.
далее просто сравните элемент массива по индексу [Month-1] с d и сгенерируйте исключение.

Т.о. сложность алгоритма станет О(1).

Автор: Julia9311 1.10.2014, 21:38
Сделала, но все равно неправильно генерируются исключения
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _1Б_задание_4
{
    class Data
    {
        public double Year { get; set; }
        public double Month { get; set; }
        public double Day { get; set; }
        public void setYear(double y)
        {

            Year = y;

            if (y < 1600)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }

        }

        public void setMonth(double m)
        {
            Month = m;

            if (m > 12)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }

        }
        public void setDay(double d)
        {
            Day = d;

       

            if ((((Year % 4) == 0) && (Month == 2)) || (Day > 29))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 1) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 2) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((((Year % 4) == 3) && (Month == 2)) || (Day > 28))
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }


        }



        static void Main()
        {
            int[] myArr = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            int[] myArray = new int[12];
            myArray[0] = 31;
            myArray[1] = 28;
            myArray[2] = 31;
            myArray[3] = 30;
            myArray[4] = 31;
            myArray[5] = 30;
            myArray[6] = 31;
            myArray[7] = 31;
            myArray[8] = 30;
            myArray[9] = 31;
            myArray[10] = 30;
            myArray[11] = 31;
            int i;
            double t = 0;
            double t1;
            Data data1 = new Data();
            Console.WriteLine("Введите год");

            double y = Convert.ToDouble(Console.ReadLine());
            data1.setYear(y);
            Data data2 = new Data();
            Console.WriteLine("Введите месяц");

            double m = Convert.ToDouble(Console.ReadLine());
            data2.setMonth(m);

            Data data3 = new Data();
            Console.WriteLine("Введите день");

            double d = Convert.ToDouble(Console.ReadLine());
            data3.setDay(d);
            if (myArray[0] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[1] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[2] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[3] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[4] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[5] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[6] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[7] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[8] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[9] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[10] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if (myArray[11] < d)
            {
                throw new System.ArgumentException("Parameter cannot be null", "original");
            }
            if ((y % 4) == 0)
            {
                myArr[2] = 29;
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;

                Console.WriteLine(t1);
            }
            else
            {
                for (i = 0; i < m; i++)
                {
                    t = t + myArr[i];
                }
                t1 = t + d;

                Console.WriteLine(t1);
            }

        }
    }
}

Автор: jonie 2.10.2014, 10:46
Цитата(Julia9311 @  1.10.2014,  22:38 Найти цитируемый пост)
Сделала, но все равно неправильно генерируются исключения

потому что в Main проверяете и в целом неверно.
У Вас же код был ранее в public void setDay(double d) , почему вы его в Main() перенесли?

Автор: mihryak 2.10.2014, 15:57
Цитата(Julia9311 @  1.10.2014,  22:38 Найти цитируемый пост)
Year % 4

Цитата(Wikipedia)
... год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.


Автор: Julia9311 2.10.2014, 21:32
Почему в целом неверно?

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