Простая итерация с if else - PullRequest
       1

Простая итерация с if else

0 голосов
/ 21 января 2020

Итерируя по массиву строк, я хочу, чтобы он записал указанную c строку, если один из элементов соответствует ядру. Проблема в другом условии. Он записывается столько раз, сколько длина массива, и мне нужно, чтобы он был записан только один раз

 public static void FindSandy(params string[] ocean)
    {
        for (int i = 0; i < ocean.Length; i++)
        {
            if (ocean[i] == "Sandy")
            {
                Console.WriteLine("We found Sandy on position {0}", i);
            }
            else
            {
                Console.WriteLine("He was not here");
            }


        }


    }

    static void Main(string[] args)
    {

        {
            FindSandy("Bob","Bella", "Sandy", "Nemo", "Dory");
        }
    }

Ответы [ 4 ]

3 голосов
/ 21 января 2020

Что если вы просто вернетесь, если найдёте его?

public static void FindSandy(params string[] ocean)
{
    for (int i = 0; i < ocean.Length; i++)
    {
        if (ocean[i] == "Sandy")
        {
            Console.WriteLine("We found Sandy on position {0}", i);
            // Found, you can return from method.
            return; 
        }
    }

    // Not found, write the 'not found' message.
    Console.WriteLine("He was not here");
}
3 голосов
/ 21 января 2020

Самый простой способ изменить ваш код для обработки этого - создать переменную, которая отслеживает индекс, в котором находится Sandy, инициализировать его недопустимым значением (например, -1), а затем установить его в фактическое значение в вашем Блок if (и мы также можем добавить инструкцию break; для выхода из l oop, как только мы его найдем).

Затем мы выводим строку на основе значения position variable:

public static void FindSandy(params string[] ocean)
{
    int position = -1;

    for (int i = 0; i < ocean?.Length; i++)
    {
        if (ocean[i] == "Sandy")
        {
            position = i;
            break;
        }
    }

    if (position > -1)
    {
        Console.WriteLine("We found Sandy on position {0}", position);
    }
    else
    {
        Console.WriteLine("He was not here");
    }
}

Код можно немного упростить с помощью System.Linq методов расширения Select (для выбора имени и индекса) и FirstOrDefault, который возвращает первый элемент, который соответствует условие или значение по умолчанию для типа (null):

public static void FindSandy(params string[] ocean)
{
    var position = ocean?.Select((name, index) => new {name, index})
        .FirstOrDefault(item => item.name == "Sandy");

    Console.WriteLine(position == null 
        ? "He was not here" 
        : $"We found Sandy on position {position.index}");
}
1 голос
/ 21 января 2020

Вы можете использовать ключевое слово break для выхода из for l oop:

public static void FindSandy(params string[] ocean)
    {
        for (int i = 0; i < ocean.Length; i++)
        {
            if (ocean[i] == "Sandy")
            {
                Console.WriteLine("We found Sandy on position {0}", i);
                break;
            }
            else if (i == ocean.Length - 1)
            {
                Console.WriteLine("He was not here");
                break;
            }
        }
    }
0 голосов
/ 21 января 2020

Чтобы решить вашу проблему, вы можете добавить новую логическую переменную ( например, weFoundSandy): если вы обнаружите вхождение, задайте для этой переменной значение true, используйте break (чтобы уменьшить количество итераций for) и, в конце, используйте эту логическую переменную, чтобы определить, какое сообщение отображать.

public static void FindSandy(params string[] ocean) {
  bool weFoundSandy = false;
  for (int i = 0; i < ocean.Length; i++) {
    if (ocean[i] == "Sandy") {
      Console.WriteLine("We found Sandy on position {0}", i);
      weFoundSandy = true;
      break;
    }
  }
  if (!weFoundSandy) {
    Console.WriteLine("Sandy was not here");
  }
}

или вы можете просто использовать C# Array.IndexOf метод, например :

public static void FindSandy(params string[] ocean) {
  int indexOfSandy = Array.IndexOf(ocean, "Sandy");
  if (indexOfSandy >= 0) {
    Console.WriteLine("We found Sandy on position {0}", indexOfSandy);
  } else {
    Console.WriteLine("Sandy was not here");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...