Софтуерно Инженерство
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."
 

Тагове:
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 38 Точки

Здравей,

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

 

 

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 38 Точки

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

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

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

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

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

0