Цикл while строки, содержащей не менее шести слов в C#

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

  • Строка пуста или пуста
  • Предложение должно состоять не менее чем из шести слов.

Мне удалось заставить пустое или пустое условие работать должным образом, но «должно быть не менее шести слов» в настоящий момент не работает так, как предполагалось. Когда я печатаю предложение, состоящее менее чем из шести слов, оно нормально принимается. Однако, если я ввожу предложение из шести или более слов, оно выводит установленное сообщение об ошибке, хотя этого не должно быть.

        while (String.IsNullOrEmpty(sentence) || sentence.Length != 6)
        {
            if (String.IsNullOrEmpty(sentence))
            {

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");
                sentence = ReadLine();
            }
            else
            {
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
                sentence = ReadLine();
            }
        }

Что именно я делаю не так?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
781
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Измените while (String.IsNullOrEmpty(sentence) || sentence.Length != 6) на

while (String.IsNullOrEmpty(sentence) || sentence.Split(' ').Length < 6)

Я добавил строку, которую вы предложили. Тем не менее, он по-прежнему выдает сообщение об ошибке, когда я ввожу слово длиной от шести слов.

NTaveras 09.09.2018 15:53

@NTaveras, какой sentence вы вводили?

zaitsman 09.09.2018 15:54

Вы ищете слова, а не символы в строке, пожалуйста, посмотрите мой ответ.

Aldert 09.09.2018 15:58

Ему нужно повторить тест на разделенной строке, а не просто попасть в блок else.

Steve 09.09.2018 16:03

Ох, ладно! Теперь я понимаю, что вы имеете в виду.

NTaveras 09.09.2018 16:03

@Steve, пока тест повторяется. Строка пуста или пуста, и пользователю будет предложено. Когда он пишет предложение менее 6 слов, ему подсказывают об этом, иначе он прерывается во время

Aldert 09.09.2018 16:07
Ответ принят как подходящий
string sentence = Console.ReadLine();
        while (true)
        {
            if (String.IsNullOrEmpty(sentence))
            {

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");

            }
            else if (sentence.Split(' ').Length < 6)
            {
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
            }
            else break;
            sentence = Console.ReadLine();
        }

Должно быть <6, а не <5

Steve 09.09.2018 16:03

sentence.Length возвращает количество символов в строке. Вы должны разбить предложение на слова.

string[] words = sentence.Split();

разбивается на символы пробела.

Следовательно, вы можете написать свой цикл как

while (String.IsNullOrEmpty(sentence) || sentence.Split().Length < 6)
{
    ...
}

Здесь Length - длина массива строк, полученного в результате разделения.

Обратите внимание, что в случае предложения null, оценка короткого замыкания логических выражений C# не будет выполнять подвыражение, следующее за ||. Следовательно, вы не получите исключения нулевой ссылки.

Во-первых, вы можете изменить свое состояние, как показано ниже ... это даст вам предложение длиной меньше шести в то время как (длина предложения <6) Если вы хотите получить слово длиной в шесть слов, попробуйте следующее условие ...

sentence.Split(' ').Length >= 6

// Сначала попробуйте изменить условие, как показано ниже .... затем попробуйте следующий код ..

public static void Main(string[] args)
    {
        int count = 0;
        inputSteream:
        Console.WriteLine("Enter your  sentence: ");
        string sentence = Console.ReadLine();
        while (!String.IsNullOrEmpty(sentence) && sentence.Length >= 6)
        {
            foreach (var item in sentence.Split(' '))
            {
                if (item.Length >= 6)
                {
                    Console.WriteLine("The sentece is {0}", item);
                    count++;
                    break;
                }

            }
            break;
        }
        if (count == 0)
        {
            goto inputSteream;
        }
        Console.ReadKey();
    }

это не намерение отрицать ответ других людей, когда вы думаете, что у вас есть лучший ответ ..

Aldert 11.03.2019 09:08

Извините, дорогой Олдерт. Я произошел по ошибке

tebbe93 11.03.2019 12:22

Попробуйте, как показано ниже, пример кода

 string sentence=Console.ReadLine();

            if (String.IsNullOrEmpty(sentence))
            {

                Console.WriteLine("Please, do not leave the sentence field empty!");
                Console.WriteLine("Enter your desired sentence again: ");
                sentence = Console.ReadLine();
            }
            else if (sentence.Length!=6)
            {
                Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
                Console.WriteLine("Enter a sentence with a least 6 words: ");
                sentence =  Console.ReadLine();
            }
            else
            {
            Console.WriteLine("Your entered string length is'{0}' and word is{1}", sentence.Length,sentence);
            }

Другие вопросы по теме