Он не завершает цикл foreach

Я делаю метод, чтобы вкладывать слова, которые содержали бы 5 или более букв. Проблема, которая у меня есть, состоит в том, что, если у моей цепи есть более 2 слов, он вытекает из цикла. Что я врежу? (Это упражнение Codewars, я изучаю едва)

public static string SpinWords(string sentence)
{
    string[] words = sentence.Split();

    foreach (string word in words)
    {
        if (word.Length < 5)
        {
            char[] charArray = word.ToCharArray();
            return new string(charArray);
        }

        if (word.Length >= 5)
        {          
            char[] charArray = word.ToCharArray();
            Array.Reverse(charArray);
            return new string(charArray);
        }         
    }

    return words.ToString();
}
}
1
задан 04.11.2016, 00:52
3 ответа

Конечно, твоя немедленная проблема, относительно porqué твой цикл заканчивается преждевременно, он, потому что ты используешь return внутри цикла.

Как специфическая документация для return:

Инструкция return закончи выполнение метода, в котором он появляется и возвращает контроль над методом, который реализовал вызов.

Другие проблемы

  1. Благодаря тому, что твое конечное решение return words.ToString();, я понимаю, что твое намерение состояло в том, чтобы изменять договоренность words в твоем цикле. Но ты это не делаешь нигде, я ни понимаю, как ты думал добиваться этого.
  2. Связанный с предыдущей точкой, использованием одного foreach вероятно он не был приведен в соответствие, если твое намерение состояло в том, чтобы изменять каждый элемент words в твоем цикле. Использование цикла for он был бы лучше.
  3. Если у тебя нет намерения менять слова с менее чем 5 буквами, тогда ты не нуждаешься в условии для этого случая.
  4. words.ToString(); это не правильный способ соединять слова в договоренности words. Скорее, ты был бы должен использовать String.Join

Пример, который да функционирует

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

using System;
using System.Linq;

// ...

static void Main(string[] args)
{
    Console.WriteLine(SpinWords("Buen día roñes Alex"));
}

private static string SpinWords(string sentence)
{
    string[] words = sentence.Split();

    for (int i = 0; i < words.Length; i++)
    {
        if (words[i].Length >= 5)
        {
            words[i] = new string(words[i].Reverse().ToArray());
        }
    }

    return string.Join(" ", words);
}

Результат

Хороший день сеньор Алекс

1
ответ дан 24.11.2019, 12:45
  • 1
    Я sirvi и # 243; в perfecci и # 243; n! Much и # 237; пропасти спасибо за Вашу помощь во все! – AlexWong85 04.11.2016, 16:01

TГє код не завершает foreach благодаря тому, что каждый раз, когда он входит в if (и он входит всегда, потому что, если он не выполняет первого, он выполняет второго) есть return, что то, что он делает, состоит в том, чтобы выходить mГ©todo . Даже я не понимаю, что то, что ты хочешь сделать с этим кодом, но если tГє вопрос - "потому что он не завершает foreach", это ответ.

2
ответ дан 24.11.2019, 12:45
  • 1
    Это упражнение, которое я делаю, так как я учусь программировать едва. Большое спасибо из-за твоих комментариев! – AlexWong85 04.11.2016, 16:02

измени твой код пробуя не использовать каждую часть размещенное слово return, я советую тебе каждый раз, когда ты использовал это слово (return) используй в конце твоей функции.

сейчас я вижу, что твою функцию вытекают, из-за которого ты вредишь использование return

0
ответ дан 24.11.2019, 12:45
  • 1
    Я это приму во внимание для будущих упражнений, которые он реализовывал бы, большое спасибо из-за твоей помощи! – AlexWong85 04.11.2016, 16:02