Estoy aprendiendo C# como principiante y creando un programa que le da al usuario un número aleatorio de un dado hasta que obtiene un seis. Aquí está mi código completo:
using System; class HelloWorld { static void Main() { Random numberGen = new Random(); int roll = 0; int attempts = 0; Console.WriteLine("Press enter to roll the die"); while (roll != 6) { Console.ReadKey(); roll = numberGen(1, 7); Console.WriteLine("You rolled " + roll); attempts++; } Console.WriteLine("It took you " + attempts + " to roll a six"); Console.ReadLine(); } }¿Qué estoy haciendo mal y cómo puedo depurarlo?
El problema está aquí:
roll = numberGen(1, 7); La única vez que puede usar la sintaxis variable(...) es cuando variable es un delegado con tipo (en cuyo caso el compilador lo interpreta como variable.Invoke(...) ). En todos los demás casos, se espera que acceda a algún método/propiedad/campo/indexador/evento a través de la variable, usando uno de variable.Foo(...) , variable.Foo o variable[index] (o -> en lugar de . variable es un puntero no administrado).
En este caso, desea:
roll = numberGen.Next(1, 7);En su código, ha creado una variable llamada - 'numberGen'. Dado que es una variable de clase 'Aleatorio', debe llamar a un método de esta clase usando esta variable como:
numberGen.Next(1,7);Aquí 'Next' es un método de clase Random, que toma 2 parámetros, valor mínimo y valor máximo.
El error que estaba recibiendo se debía a que estaba usando la variable como método.
El enfoque predeterminado para generar números aleatorios en rangos:
Random rnd = new Random(); rnd.Next(1, 10);En tu caso solo actualiza la variable
roll = numberGen(1, 7);para:
roll = numberGen.Next(1, 7);Random - es una clase. Siguiente - es un método.