Loading...
passador83 avatar passador83 1 Точки

Проблем със задача 05. Walking

Дава ми Exeption. Всъщност знам къде ми е грешката, но не мога да я коригирам.

Ето го решението ми:  https://pastebin.com/13geAiKv

 

Ето и условието на задачата:

Габи иска да започне здравословен начин на живот и си е поставила за цел да върви 10 000 стъпки всеки ден. Някои дни обаче е много уморена от работа и ще иска да се прибере преди да постигне целта си. Напишете програма, която чете от конзолата по колко стъпки изминава тя всеки път като излиза през деня и когато постигне целта си да се изписва "Goal reached! Good job!"  
Ако иска да се прибере преди това, тя ще въведе командата "Going home" и ще въведе стъпките, които е извървяла докато се прибира. След което, ако не е успяла да постигне целта си, на конзолата трябва да се изпише: "{разликата между стъпките} more steps to reach goal."
 

Тагове:
0
Programming Basics
vangel avatar vangel 51 Точки
Best Answer

Грешката се получава тук:

                string command = Console.ReadLine();

                int steps = int.Parse(command);

                currentSteps += steps;

когато command = "Going home" при парсването се хвърля грешка. За това трябва първо да провериш дали command == "Going home" и ако не е тогава

currentSteps+=int.Parese(command)

иначе трбва да прочетеш следващият ред

currentSteps+=int.Parse(Console.ReadLine());

Ето го целият код редактиран:

using System;

namespace InvalidNumber
{
    class Steps
    {
        static void Main(string[] args)
        {
            int target = 10000;
            int currentSteps = 0;

            while (currentSteps <= target)
            {
                string command = Console.ReadLine();

                if (command == "Going home")
                {
                    currentSteps += int.Parse(Console.ReadLine());
                    if (currentSteps < target)
                    {
                        Console.WriteLine($"{target - currentSteps } more steps to reach goal.");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Goal reached! Good job!");
                        break;
                    }
                }
                else
                {
                    currentSteps += int.Parse(command);
                    
                    if (currentSteps >= target)
                    {
                        Console.WriteLine("Goal reached! Good job!");
                        break;
                    }
                }
            }
        }
    }
}

0
krasizorbov avatar krasizorbov 548 Точки

Здравей,

ето едно примерно решение...

 

 

using System;

namespace Steps
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int sum = 0;
            while (sum < 10000)
            {
                string step = Console.ReadLine();
                int steps;
                if (int.TryParse(step, out steps))
                {
                    sum = sum + steps;
                }
                else if (step == "Going home")
                {
                    int lastStep = int.Parse(Console.ReadLine());
                    sum = sum + lastStep;
                    break;
                }
            }
            if (sum < 10000)
            {
                Console.WriteLine("{0} more steps to reach goal.", 10000 - sum);
            }
            else
            {
                Console.WriteLine("Goal reached! Good job!");
            }
        }

    }
}

0
passador83 avatar passador83 1 Точки

Благодаря колега. Решения на задачата мога да си намеря, но ще бъда благодарен някой да ми посочи къде точно бъркам и защо ми дава exeption. Явно има проблем с парсването.

Благодаря за отделеното време.

0
krasizorbov avatar krasizorbov 548 Точки

Дава ти exeption защото ако вместо число поставя string - някаква дума, то няма как да я преобразува в число. Това става където парсваш:

string command = Console.ReadLine();
                int steps = int.Parse(command);

Аз съм го направил така че ако е число сумата е равна на сумата + стъпките. Това е при първия if където преобразувам.

Ако ли не отива на else if  и там чете string: Going home.

Само това трябва да оправиш.

0
valio90 avatar valio90 6 Точки

using System;

namespace _5._4Walking
{
    class Walking
    {
        static void Main(string[] args)
        {
           string styp = Console.ReadLine();
            int rezoltat = 0;
            if (styp == "Going home")
            {
                 styp = Console.ReadLine();
                if (styp == "Going home")
                {
                    Console.WriteLine($"{10000} more steps to reach goal.");
                }
                else
                {


                    int rezo = int.Parse(styp);
                    rezoltat = rezo + rezoltat;
                    if (rezoltat < 10000)
                    {
                        Console.WriteLine($"{10000 - rezoltat} more steps to reach goal.");
                    }
                    else
                    {
                        Console.WriteLine("Goal reached! Good job!");
                    }
                }
            }
            else
            {
                 rezoltat = int.Parse(styp);
                while (rezoltat < 10000)
                {
                    string stypka = Console.ReadLine();
                    
                       if (stypka != "Going home")
                    {
                       int rezolt = int.Parse(stypka);
                        rezoltat = rezolt + rezoltat;
                    }

                    else if (stypka == "Going home")
                    {
                        string rezola = Console.ReadLine();
                        if (rezola =="Going home")
                        {
                            break;
                        }
                        else {
                        int rezo = int.Parse(rezola);
                        rezoltat = rezo + rezoltat;
                        break;
                            }

                    }


                }
                if (rezoltat < 10000)
                {
                    Console.WriteLine($"{10000 - rezoltat} more steps to reach goal.");
                    
                }
                else
                {
                    Console.WriteLine("Goal reached! Good job!");
                }
            }
        }
    }
}

0
06/11/2019 11:19:11
valio90 avatar valio90 6 Точки

using System;

namespace _5._4Walking
{
    class Walking
    {
        static void Main(string[] args)
        {
           string styp = Console.ReadLine();
            int rezoltat = 0;
            if (styp == "Going home")
            {
                 styp = Console.ReadLine();
                if (styp == "Going home")
                {
                    Console.WriteLine($"{10000} more steps to reach goal.");
                }
                else
                {


                    int rezo = int.Parse(styp);
                    rezoltat = rezo + rezoltat;
                    if (rezoltat < 10000)
                    {
                        Console.WriteLine($"{10000 - rezoltat} more steps to reach goal.");
                    }
                    else
                    {
                        Console.WriteLine("Goal reached! Good job!");
                    }
                }
            }
            else
            {
                 rezoltat = int.Parse(styp);
                while (rezoltat < 10000)
                {
                    string stypka = Console.ReadLine();
                    
                       if (stypka != "Going home")
                    {
                       int rezolt = int.Parse(stypka);
                        rezoltat = rezolt + rezoltat;
                    }

                    else if (stypka == "Going home")
                    {
                        string rezola = Console.ReadLine();
                        if (rezola =="Going home")
                        {
                            break;
                        }
                        else {
                        int rezo = int.Parse(rezola);
                        rezoltat = rezo + rezoltat;
                        break;
                            }

                    }


                }
                if (rezoltat < 10000)
                {
                    Console.WriteLine($"{10000 - rezoltat} more steps to reach goal.");
                    
                }
                else
                {
                    Console.WriteLine("Goal reached! Good job!");
                }
            }
        }
    }
}

//int steps;
  //              if (int.TryParse(step, out steps))
    //            {
      //              sum = sum + steps;
        //        }
    
                  //int rezolt;
                    //if (int.TryParse(stypka, out rezolt))

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.