Вопрос о выполнении пока l oop in C# - PullRequest
0 голосов
/ 22 февраля 2020

Итак, у меня есть этот код, в котором вы вводите свой «код города», а затем вводите, как долго вы хотите, чтобы звонок был. По сути, это простой калькулятор, который определяет стоимость звонка в зависимости от кода города. У меня возникли проблемы при попытке выяснить, как сохранить работу l oop, если я введу неправильный код зоны. На данный момент, если я введу неправильный код области, вся программа просто завершится в командной строке. Вот код:

using System;
using static System.Console;

namespace Chapter6._1
{
    class Program
    {
        static void Main()
        {
            // array info //
            int[] phoneAreacode = { 608, 414, 262, 815, 715, 920 };
            double[] phoneCost = { .05, .10, .07, .24, .16, .14 };
            // declaring variables //
            int x;
            int areaCode;
            double cost = 0;
            int callLength;
            bool validAreacode = false;
            // start of actual code //
            Write("Enter in the area code you want to call: ");
            areaCode = Convert.ToInt32(ReadLine());
            x = 0;
            while (x < phoneAreacode.Length && areaCode != phoneAreacode[x])
                ++x;
            if(x != phoneAreacode.Length)
            {
                validAreacode = true;
                cost = phoneCost[x];
            }
            if (validAreacode)
            {
                Write("Enter in the length of your call: ");
                callLength = Convert.ToInt32(ReadLine());
                double finalCost = callLength * cost;
                WriteLine("Your call to area code " + areaCode + " for " + callLength + " minutes will cost " + finalCost.ToString("C"));
            }
            else
            {
                WriteLine("YOU MUST ENTER A VALID AREA CODE!");
            }
        }
    }
}

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

Вы можете обернуть свою процедуру чтения и проверки в другое время, пока-l oop:

bool validAreacode = false;

while(!validAreacode)
{
    // start of actual code //
    Write("Enter in the area code you want to call: ");
    areaCode = Convert.ToInt32(ReadLine());
    x = 0;
    while (x < phoneAreacode.Length && areaCode != phoneAreacode[x])
        ++x;
    if(x != phoneAreacode.Length)
    {
        validAreacode = true;
        cost = phoneCost[x];
    }
    else
    {
        WriteLine("YOU MUST ENTER A VALID AREA CODE!");
    }
}

Это самое простое решение для вас (не требуется больших изменений в коде). Но у вашего кода все еще есть проблемы. Ваша программа будет аварийно завершена, если пользователь попытается напечатать любой не ди git символ вместо кода области.

1 голос
/ 23 февраля 2020

Вы можете сделать do-While здесь:

Обычно, когда вы делаете do-while, вы заставляете код на do выполняться до тех пор, пока условие в while не будет выполнено. в вашем случае вам нужно добавить проверку номера pohne внутри оператора do и узнать, выбрал ли человек правильное значение, вы можете сделать Array.FindIndex(): это будет ваш do-while l oop Также я изменил вашу x для index попытки использовать имена для переменных, которые имеют некоторое значение. (индекс не идеален в любом случае)

do
{
    Write("Enter in the area code you want to call: ");
    areaCode = Convert.ToInt32(ReadLine());

    index = Array.FindIndex(phoneAreacode, w => w == areaCode);
    if (index >= 0)
    {
        validAreacode = true;
    }
    else
    {
        WriteLine("YOU MUST ENTER A VALID AREA CODE!");
    }

} while (!validAreacode);

, и это будет весь ваш основной метод:

int[] phoneAreacode = { 608, 414, 262, 815, 715, 920 };
double[] phoneCost = { .05, .10, .07, .24, .16, .14 };
// declaring variables //
int index;
int areaCode;
int callLength;
bool validAreacode = false;
// start of actual code //



do
{
    Write("Enter in the area code you want to call: ");
    areaCode = Convert.ToInt32(ReadLine());

    index = Array.FindIndex(phoneAreacode, w => w == areaCode);
    if (index >= 0)
    {
        validAreacode = true;
    }
    else
    {
        WriteLine("YOU MUST ENTER A VALID AREA CODE!");
    }

} while (!validAreacode);


Write("Enter in the length of your call: ");
callLength = Convert.ToInt32(ReadLine());
double finalCost = callLength * phoneCost[index];
WriteLine("Your call to area code " + areaCode + " for " + callLength + " minutes will cost " + finalCost.ToString("C"));

, как вы можете видеть, вы также можете удалить while, который вы должны oop массив и if-else для действительных кодов. Предполагая, что когда код достигнет точки, область будет правильной.

Хорошей практикой является попытка удалить сумму if-else.

0 голосов
/ 23 февраля 2020

Вам, вероятно, потребуется l oop весь раздел кода, что-то вроде этого

while (true)
{

  Write("Enter in the area code you want to call: ");

  var input = ReadLine();

  if (input == "Exit")
      break;

  areaCode = Convert.ToInt32(input);
  x = 0;

while (x < phoneAreacode.Length && areaCode != phoneAreacode[x])
       ++x;      

  if(x != phoneAreacode.Length)
  {
       validAreacode = true;
        cost = phoneCost[x];
   }
  else if (validAreacode)
  {
      Write("Enter in the length of your call: ");
      callLength = Convert.ToInt32(ReadLine());
      double finalCost = callLength * cost;
      WriteLine("Your call to area code " + areaCode + " for " + callLength + " minutes will cost " + finalCost.ToString("C"));
  }
  else
  {
      WriteLine("YOU MUST ENTER A VALID AREA CODE!");
   }

}

Не забудьте добавить проверку, когда пользователь вводит что-то, что не является ди git

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...