Как получить только один ответ, если нет совпадения после цикла - PullRequest
1 голос
/ 01 июня 2019

В моем коде есть цикл for в массиве и оператор if, и я хочу получить только один ответ, если совпадения нет.

for (int i = 0; i < arr.Length; i++)
{
    if (arr[i].GetSomeValue() >= 1 && i].GetSomeValue() <= 5)
        Console.WriteLine(arr[i]);
    else 
       Console.WriteLine("No data");
}

Тем не менее, я получаю это:

No data
No data
No data
No data

Я хочу только одно «Нет данных», если нет совпадений. Я попытался добавить

    else break;
}
Console.WriteLine("No data");

Но это не работает.

Как получить то, что я хочу?

Ответы [ 3 ]

1 голос
/ 01 июня 2019

Я предлагаю использовать флаг как этот код:

bool flag = false ;

for (int i = 0; i < arr.Length; i++)
{
    if (arr[i].GetSomeValue() >= 1 && arr[i].GetSomeValue() <= 5)
    {
        Console.WriteLine(arr[i]);
        flag=true;
    }
}

if(!flag)
{
    Console.WriteLine("No data");
}
0 голосов
/ 01 июня 2019

Альтернатива на основе linq:

using System.Linq;

...

var withinSpecs = arr.Where(e => e.GetSomeValue() >= 1 && e.GetSomeValue() < 5).ToArray();
if(withinSpecs.Length == 0)
{
    Console.WriteLine("No data");
}
else
{
    foreach(var element in withinSpecs)
        Console.WriteLine(element);
}
0 голосов
/ 01 июня 2019
// Don't check the no data condition until after the loop  
  int noData = -1;     
    for (int i = 0; i < arr.Length; i++)
                {
                    if (arr[i].GetSomeValue() >= 1 && arr[i].GetSomeValue() <= 5) {
                        Console.WriteLine(arr[i]);
                        noData = 0;
                    }
                }
    if (noData == -1) {Console.WriteLine("No data");}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...