Софтуерно Инженерство
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 142 Точки

Здравей,

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

 

 

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

Дава ти 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