C# как продолжить поиск элементов в моем списке, а не закрывать приложение после одного поиска - PullRequest
1 голос
/ 03 апреля 2020

Спасибо за помощь, я новичок в программировании, я пытался Google, но не могу найти ответ.

То, что я ищу, - это способ продолжить поиск элементов в моем списке, не закрывая его после одного поиска. Большое вам спасибо!

код, который я пробовал:

static void Main(string[] args)
    {

        string appName = "Fruitsalad Jens";
        string appVersion = "1.0.0";
        string appAuthor = "Jens Jonassen";

        // Farge
        Console.ForegroundColor = ConsoleColor.Green;

        // Versjon
        Console.WriteLine("{0} Versjon {1} by {2}", appName, appVersion, appAuthor);

        // Tilbakestill Fargen
        Console.ResetColor();

        // Velkomst
        Console.WriteLine("Hello, who are you?");

        string navn = Console.ReadLine();

        Console.WriteLine("Welcome to fruit finder {0}! Which fruit do you need to find?", navn);

        {
            string sSearch;

            List<Frukter> listFrukter = new List<Frukter>();
            listFrukter.Add(new Frukter());
            listFrukter[0].Navn = "Orange";
            listFrukter[0].Pris = 32.5;

            listFrukter.Add(new Frukter());
            listFrukter[1].Navn = "Apple";
            listFrukter[1].Pris = 23;

            listFrukter.Add(new Frukter());
            listFrukter[2].Navn = "Grapes";
            listFrukter[2].Pris = 18.90;

            listFrukter.Add(new Frukter());
            listFrukter[3].Navn = "Mango";
            listFrukter[3].Pris = 48;

            sSearch = Console.ReadLine();

            for (int iCount = 0; iCount < listFrukter.Count; iCount++)

            {

                if (listFrukter[iCount].Navn.Equals(sSearch))
                {
                    Console.WriteLine("Found it!");
                    Console.WriteLine(listFrukter[iCount].getData());

                }

            }


            Console.ReadLine();

Ответы [ 4 ]

2 голосов
/ 03 апреля 2020

Добавить while l oop: пока пользователь хочет продолжать поиск, сделайте это:

     ...
     // keep on looping (infinite loop)...
     while (true) {
        Console.WriteLine("Welcome to fruit finder {0}! Which fruit do you need to find? Q for quit", navn);

        sSearch = Console.ReadLine().Trim();

        // ... until user enters "q" for quit
        if (string.Equals(sSearch, "Q", StringComparison.OrdinalIgnoreCase))
            break;

        for (int iCount = 0; iCount < listFrukter.Count; iCount++)
        {

            if (listFrukter[iCount].Navn.Equals(sSearch))
            {
                Console.WriteLine("Found it!");
                Console.WriteLine(listFrukter[iCount].getData());
            }
        }

        Console.ReadLine();
    }
    ...

Редактировать: Та же идея (цикл) в другой реализации (см. Pol Vilarrasa's комментарий ниже):

     // loop once and more if user wants to search again
     do {
        Console.WriteLine("Welcome to fruit finder {0}! Which fruit do you need to find?", navn);

        sSearch = Console.ReadLine().Trim();

        for (int iCount = 0; iCount < listFrukter.Count; iCount++)
        {
            if (listFrukter[iCount].Navn.Equals(sSearch))
            {
                Console.WriteLine("Found it!");
                Console.WriteLine(listFrukter[iCount].getData());
            }
        }

        Console.WriteLine("Another search Y/ N?");

        sSearch = Console.ReadLine().Trim();
    }
    while (string.Equals(sSearch, "Y", StringComparison.OrdinalIgnoreCase));
    ...
0 голосов
/ 03 апреля 2020

У меня нет примера кода, но это был типичный пример упражнений по программированию.

Если я правильно понимаю, вы захотите продолжить поиск других фруктов после первого поиска.

Вам нужно добавить al oop, чтобы после завершения поиска вы вернулись, чтобы снова проверить ввод, что-то вроде этого:

sSearch = Console.ReadLine();
while (sSearch != "exit")
{
        for (int iCount = 0; iCount < listFrukter.Count; iCount++)
        {
            if (listFrukter[iCount].Navn.Equals(sSearch))
            {
                Console.WriteLine("Found it!");
                Console.WriteLine(listFrukter[iCount].getData());
            }
        }

    sSearch = Console.ReadLine();
}
0 голосов
/ 03 апреля 2020

Я думаю, вы ищете , а l oop. Эта конструкция принимает логическое выражение и многократно выполняет код в своем теле , в то время как выражение возвращает true.

Например, следующий код напечатает числа от 0 до 9 в console:

int i = 0;
while(i < 10)
{
    Console.WriteLine(i);
    i = i + 1;
}

Будьте осторожны с циклами, потому что если условие никогда не будет оценено как false, l oop будет продолжаться вечно. В этом примере, если мы удалим i = i + 1;, l oop никогда не прекратит работу, поскольку i всегда будет 0.

В вашем случае вы, вероятно, просто хотите использовать while(true), так как вы хотите повторять ваш поиск до бесконечности. Все от чтения пользовательского ввода до печати ответа должно быть частью while тела.

0 голосов
/ 03 апреля 2020

Переместите Console.Readline () в течение некоторого времени l oop. И перерыв из внутреннего на l oop, как только вы найдете предмет.

Console.WriteLine("Press ESC to stop");

while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
       sSearch = Console.ReadLine();

       for(int iCount = 0; iCount < listFrukter.Count; iCount++)

           {

               if (listFrukter[iCount].Navn.Equals(sSearch))
                {
                   Console.WriteLine("Found it!");
                   Console.WriteLine(listFrukter[iCount].getData());
                   break;
                }

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