[C#]Age - не мога да открия грешката


0

Здравейте, това е моето решение на задача Age. Според BGCoder имам грешка, която аз така и не можах да открия.

using System;
 
namespace CalcAge
{
    class CalcAge
    {
        static void Main()
        {
            string getYear = Console.ReadLine();
            string[] b = getYear.Split('.');
            int bDay = Int32.Parse(b[1]);
            int bMonth = Int32.Parse(b[0]);
            int bYear = Int32.Parse(b[2]);
 
            string c = System.DateTime.Now.ToString("yyyy.MM.dd");
            string[] d = c.Split('.');
            int dDay = Int32.Parse(d[2]);
            int dMonth = Int32.Parse(d[1]);
            int dYear = Int32.Parse(d[0]);
 
 
            if (dYear >= bYear)
            {
 
                int age = dYear - bYear;
 
                if (bMonth < dMonth)
                {
                    Console.WriteLine("{0}\n{1}", age, age + 10);
                }
                else if (bMonth > dMonth)
                {
                    Console.WriteLine("{0}\n{1}", age - 1, age + 10 - 1);
                }
                else if (bMonth == dMonth)
                {
                    if (bDay < dDay)
                    {
                        Console.WriteLine("{0}\n{1}", age, age + 10);
                    }
                    else if (bDay > dDay)
                    {
                        Console.WriteLine("{0}\n{1}", age - 1, age + 10 - 1);
                    }
                    else if (bDay == dDay)
                    {
                        Console.WriteLine("{0}\n{1}", age, age + 10);
                    }
                }
            }
        }
    }
}




Отговори



0

При мен тръгна и ми вади, че имаш 40/100, виж да не изпускаш  using System  при копирането в сайта и следи къдравите скоби да са идентичен брой отварящи-затварящи.Логиката ти е вярна и би трябвало при коректни тестове да имаш 100/100.
Малко градивна критика: Старай се да не спестяваш много от имената на променливите..до 3-4 думи навързани се смята за добра практика, последният else е добре да е само else, а не else if. Например за проверката на дните. Като провериш за по-голям и по-малък, последното трябва да е само else, защото , когато компилаторът мине през кода и не завършва на else за него това означава, че може да има и още случаи и ако да речем имаш локална променлива в иф-а и после се опиташ да я изпринтиш, като си й задал стойност например в някой от иф-овете, ще ти крашне.

 System.DateTime.Now.ToString ...  Тук не е нужно да има  System oтпред, понеже най-отгоре в кода ти има 
using System и това означава, че кода след този ред използва библиотеката  System, която съдържа този клас DateTime с метод Now...както и да е..това са малко адванс неща, но предполагам, че няма да ти навреди ако ти го кажа сега.
Не знам от колко време пишеш код, но е добре..даже доста. Нещата, които споменах са просто добри практики и съм сигурен, че ще ги изчистиш с времето. Split метода ти е доста адекватен...аз лично съм направил същото, но попълвам стринговия масив с цикъл, благодаря за подсещането, бях го забравил...
Поздрави !


от Nasi4 (30 точки)


0
И при мен ми дава 40/100 твоето решение, когато се добави -7 към текущата дата , т.е. се като се върне текущата дата с 7 месеца назад дава 80/100, явно нещо има грешка в тестовете би трябвало кода ти да е верен иначе. Не нужно да правиш проверка за годината поне в случая, защото предполагаме че входните данни се въвеждат коректно.

от geiff (457 точки)


0

Здравей,

Когато споделих мнението си за решаването на задачата с манипулирането на времето тестовете бяха грешни, защото реално задачата беше от предишния прием(февруари), а ние я решавахме октомври. В момента задачата е направена за нашия прием и на мен без да добавям DateTime.Now.AddMonths(-7) ми дава 100/100.

ПП: Предполага се, че не знаем if-else и задачата реално се решава с 5 реда код, без conditional statements.

Поздрави,

Цецо


от CecoM (70 точки)

0

Здравейте,

С малко тестове установих входните и очакваните изходни данни на 5-те теста. Те са грешни за тестове 1, 2 и 4.

[C#] Домашно Introduction to Programming

Поздрави,

Ангел