Возвращает массив, состоящий из строкового представления чисел от 1 до n, в C#

#c# #arrays #arraylist

Вопрос:

Это остальная часть вопроса. Возвращает массив, состоящий из строкового представления чисел от 1 до n.Но есть один нюанс!! Для кратных 3 возвращайте строку «Darude» вместо числа, для кратных 5 возвращайте строку «Песчаная буря»; а для кратных 3 и 5 возвращайте строку «Darude StandStorm».

Это мой код

 static string [] stringarray(int n)
 {
 string [] results= { } ;
 for (int i = 1; i <= n; i  ) 
{
  if (i % 3 == 0) results = new[] { "Deude" };`enter code here`
  if (i % 5 == 0) results = new[] { "Sandstome" }; 
  if (i % 3 == 0 amp; i % 5 == 0) results = new[] { "Darude Sandstome" }; 
    else Console.WriteLine(i);
 } 
 return results; 
}
 

Комментарии:

1. В чем проблема?

2. Это не дает тех результатов, которых я хочу.

3. enter code here что здесь делаешь?

4. @Den давайте перефразируем вопрос в пользу,

5. Это звучит как версия fizzbuzz. Существует корпоративная версия C# , которая может помочь (или нет)

Ответ №1:

Я бы предложил немного лучший вариант :

     public static string[] stringarray(int n)
    {
        bool isMultipleOf3 =  i % 3 == 0;
        bool isMultipleOf5 = i % 5 == 0;
        string[] results = new string[n];
        
        for ( int i = 1; i <= n; i   )
        {
            if ( isMultipleOf3 amp;amp; isMultipleOf5 ) 
            {
                 results[i - 1] = "Darude Sandstome";
                 continue;
            }
            
            if (isMultipleOf3 )
            {
                 results[i - 1] = "Deude";
                 continue;
             }
             if ( isMultipleOf5 ) 
             {
                 results[i - 1] = "Sandstome";
                 continue;
             }
             
             results[i - 1] = i.ToString(); //Console.WriteLine(i);
         }
         return results;
     }
 

Это лучше, потому что вы вычисляете i%3 и i%5 только один раз. И, это более понятно, что вы тестируете, так как переменные bool имеют четкие имена.

Ответ №2:

Зацени это. Вы создаете экземпляр массива в цикле, чтобы он очистил значение.

 public static string[] stringarray(int n)
        {
            string[] results = new string[n];
            for (int i = 1; i <= n; i  )
            {
                if (i % 3 == 0 amp;amp; i % 5 == 0)
                {
                    results[i - 1] = "Darude Sandstome";
                }
                else if (i % 3 == 0)
                {
                    results[i - 1] = "Deude";
                }
                else if (i % 5 == 0)
                {
                    results[i - 1] = "Sandstome";
                }
                else
                {
                    results[i - 1] = i.ToString();
                }
            }
            return results;
        }
 

Прочитайте значение, как показано ниже

 string[] strResult = stringarray(16);
foreach (var item in strResult)
{
   Console.WriteLine(item);
}
Console.Read();
 

Ответ №3:

Проблема также может быть решена таким образом :

 private static string[] StringArrays(int arrayLength) =>
    Enumerable
        .Range(0, arrayLength)
        .Select(
            ComputeDarudeOrSandstormOrBoth
        )    
        .ToArray();

private static string ComputeDarudeOrSandstormOrBoth(int value)
{
    bool isDividableBy3 = value % 3 == 0;
    bool isDividableBy5 = value % 3 == 0;
    return
        isDividableBy3 amp;amp; isDividableBy5
        ?
            "Darude Sandstorm"
        :
            isDividableBy3
            ?
                "Darude"
            :
                isDividableBy5
                ?
                    "Sandstorm"
                :
                    value.ToString();
}