Estoy intentando codificar una validación de bucle while para validar la respuesta del usuario cada vez que ingresó una oración con los siguientes criterios:

  • La cadena es nula o vacía.
  • La oración debe tener al menos seis palabras.

Pude lograr que la condición nula o vacía funcionara como se esperaba, pero el "debe tener al menos seis palabras" no funciona como estaba previsto en este momento. Cada vez que escribo una oración con menos de seis palabras, la acepta bien. Sin embargo, si ingreso una oración con seis palabras o más, aparece el mensaje de error establecido cuando no debería.

        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();
            }
        }

¿Qué estoy haciendo mal exactamente?

-3
NTaveras 9 sep. 2018 a las 16:48

6 respuestas

La mejor respuesta
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();
        }
0
Aldert 9 sep. 2018 a las 14:04

sentence.Length devuelve el número de caracteres en la cadena. Debes dividir la oración en palabras.

string[] words = sentence.Split();

Se divide en caracteres de espacio en blanco.

Por lo tanto, puede escribir su ciclo como

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

Aquí Length es la longitud del conjunto de cadenas resultante de la división.

Tenga en cuenta que en caso de que la oración sea null, el evaluación de cortocircuito de expresiones booleanas de C # no ejecutará la subexpresión después de ||. Por lo tanto, no obtendrá una excepción de referencia nula.

0
Olivier Jacot-Descombes 9 sep. 2018 a las 14:19

Cambiar while (String.IsNullOrEmpty(sentence) || sentence.Length != 6) a

while (String.IsNullOrEmpty(sentence) || sentence.Split(' ').Length < 6)
0
zaitsman 9 sep. 2018 a las 13:50

// Al principio intente cambiar mientras la condición está debajo ... luego intente con el código siguiente ...

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();
    }
0
tebbe93 9 mar. 2019 a las 22:02

Prueba como el siguiente código de muestra

 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);
            }
0
tebbe93 15 jul. 2019 a las 12:18

En primer lugar, puede cambiar su condición while como se indica a continuación ... le dará una oración que dure menos de seis while (oración.Longitud <6) Cuando desee obtener una palabra que tendrá una longitud de seis palabras, pruebe la condición siguiente. ..

sentence.Split(' ').Length >= 6
0
tebbe93 9 mar. 2019 a las 21:11