Почему не функционирует мое условие?

Я продолжаю разрабатывать программу в консоли, в которой симулируется лифт. У здания есть только 30 квартир и пока я стараюсь создавать условие для того, чтобы однажды пользователь поднялся или загрузился в X квартиру, вернулись он, чтобы спрашивать, что, если он хочет согласиться на другую квартиру, но оно просто не функционирует.

Здесь то, что я приношу на данный момент:

string userInput;
short floorNumber;
bool wantsToContinue;
bool isInvalid = true;

Console.Clear();
Console.WriteLine("Bienvenido! El edificio cuenta con un total de 30 pisos. \nPara subir  digite la letra S, para bajar digite la letra B");
Console.Write("Seleccione una opción ==> ");


do
{
    userInput = Console.ReadLine().ToUpper();
    if (userInput != "S" && userInput != "B")
        Console.Write("Opción inválida, intente de nuevo ==> ");
    else
        break;
} while (true);
do
{
    if (userInput == "S") {
        Console.WriteLine();
        Console.Write("A continuación indique el piso al que desea subir ==> ");
        floorNumber = Convert.ToInt16(int.Parse(Console.ReadLine()));
        while (floorNumber < 30 && floorNumber > 1)
        {
            Console.WriteLine("Subiendo...");
            Console.WriteLine($"Ahora te encuentras en el piso {floorNumber}");
            Console.ReadLine();
        }
    }
    if (userInput == "B")
    {
        Console.WriteLine();
        Console.Write("A continuación indique el piso al que desea bajar ==> ");
        floorNumber = Convert.ToInt16(int.Parse(Console.ReadLine()));
        while (floorNumber < 30 && floorNumber > 1)
        {
            Console.WriteLine("Bajando...");
            Console.WriteLine($"Ahora te encuentras en el piso {floorNumber}");
            Console.ReadLine();
        }
    }
    Console.WriteLine();
    Console.Write("Desea acceder a otro piso? (s/n) ==> ");
    userInput = Console.ReadKey().KeyChar.ToString();
    if (userInput == "n")
    {
        wantsToContinue = false;
    }
    else if (userInput == "s")
    {
        wantsToContinue = true;
    }
    else
    {
        wantsToContinue = true;
        while (isInvalid)
        {
            Console.Write("\nOpción inválida intente de nuevo: ");
            userInput = Console.ReadKey().KeyChar.ToString();
            if (userInput == "n" || userInput == "s")
            {
                isInvalid = false;
            }
        }
    }
    Console.Clear();
} while (wantsToContinue) ;

Поскольку они могут наблюдать функцию, она является осуществленной, но мне не удается способствовать тому, чтобы он выполнил Ваше поручение, которое разом, пользователь прибыл в квартиру, в которую он хотел пойти, я спросил у него, хочет ли он согласиться на другую квартиру или нет но он однажды показывает сообщение показывая пользователю квартиру, в которой он находится он повторяется снова и снова всякий раз когда выходят ему на клавишу, не показывая следующего сообщения, которое было бы

Console.Write("Desea acceder a otro piso? (s/n) ==> ");

Я думал из-за много промежутка времени, но искренне я не нашел решение и поэтому я обращаюсь к Вам.

Спасибо заранее

0
задан 05.11.2019, 09:28
2 ответа

То, что я не наблюдаю в коде, где ты увеличиваешь, или decrementas переменная floorNumber для того, чтобы он отразил прибытие в эту квартиру, или, может быть, не один while, который ты был бы должен использовать, а один if

я думаю, что ты мог бы упрощать много код снимая повторенное, что-то как это

Console.Clear();

do
{
    Console.WriteLine("Bienvenido! El edificio cuenta con un total de 30 pisos. \nPara subir  digite la letra S, para bajar digite la letra B");
    Console.Write("Seleccione una opción ==> ");

    string userInput;
    do
    {
        userInput = Console.ReadLine().ToUpper();
        if (userInput == "S" || userInput == "B")
            break;

        Console.Write("Opción inválida, intente de nuevo ==> ");

    } while (true);


    Console.WriteLine();
    Console.Write("A continuación indique el piso al que desea {0} ==> ", userInput == "S" ? "subir" : "bajar");
    short floorNumber = Convert.ToInt16(int.Parse(Console.ReadLine()));

    if (floorNumber < 30 && floorNumber > 1)
    {
        Console.WriteLine(userInput == "S" ? "Subiendo..." : "Bajando...");
        Console.WriteLine($"Ahora te encuentras en el piso {floorNumber}");
    }

    Console.ReadLine();

    char otropiso;
    do
    {
        Console.Write("Desea acceder a otro piso? (s/n) ==> ");
        char otropiso = Console.ReadKey().KeyChar;

        if (otropiso == 'n' || otropiso == 's')
            break;

        Console.Write("\nOpción inválida intente de nuevo: ");

    }while(true);

    if (otropiso == 'n')
        break;

    Console.Clear();

}while(true);

краев, которые возможно использовать break или continue, как ты захотел вернуться в начале do..while

, Кроме того измените while, которые он санкционирует, к которому квартира ты хочешь пойти из-за одного if, если ты хотел отразить, как он двигается из-за квартир, ты был бы должен складывать или отрицать переменную у desptino от настоящей квартиры, но для этого ты будешь должен сохранять, который является квартирой, в которой он находится, и так отражать движение

Также используйте if en linea, чтобы мочь повторно использовать код, как он пересылает или загружает менять тексты

?: operator (C# reference)

0
ответ дан 01.12.2019, 12:46
  • 1
    Уже я это протестировал и будь в порядке, но встречается случай, которого, если например, я выбираю пересылать в квартиру 22, и когда выйдет сообщение из, если я хочу согласиться на другую квартиру ú nicamente он позволяет мне продолжать подниматься má s не загружаться, так как решение, которое повторяется, - то же самое, что eligió сначала – Krebsfanger 05.11.2019, 03:21
  • 2
    тогда вопрос поднимания или загружения также нужен интегрировать ее в глобальный while – Leandro Tuttini 05.11.2019, 03:42
  • 3
    издайте код, стоивший, если так вопрос, если хочется продолжать подниматься, или загружаться – Leandro Tuttini 05.11.2019, 03:47
  • 4
    Уже оно функционировало, agregué tambié n переменная для того, чтобы он хранил квартиру, в которой пользователь habí в оставшийся. Он пошел чуда. Muchí пропасти спасибо Леандро. – Krebsfanger 05.11.2019, 04:00

Чтобы сравнивать, если два объекта типа string равны, использует ее funciГіn Equals ().

Пример:

string a1,a2;
a1 = "A";
a2 = "A";

if (a1.Equals(a2)){
  Console.WriteLine("Iguales!");
}
else{
  Console.WriteLine("Distintos!");
}
0
ответ дан 01.12.2019, 12:46

Теги

Похожие вопросы