2010-03-03 2 views
1

J'essaie de renvoyer un nombre aléatoire d'une méthode mais apparemment le type implicite n'est pas correct. Il dit: "Impossible de convertir implicitement le type 'Randomize.RandomNumber' à 'int'"Retour d'un type de nombre aléatoire Problème

RandomNumber.cs:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace Randomizer 
{ 
    class RandomNumber 
    { 
     public int RandomInRange(int l, int u) 
     { 
      Random generator = new Random(); 
      return generator.Next(l, u); 
     } 

    } 
} 

Program.cs:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace Randomizer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Out.WriteLine("Please enter the minimum range for the random number\n"); 
      int min = int.Parse(Console.In.ReadLine()); 

      Console.Out.WriteLine("Please enter the maximum range for the random number\n"); 
      int max = int.Parse(Console.In.ReadLine()); 

      int RandomInt = new RandomNumber(); 

      Console.Out.WriteLine("Your random number is: " + RandomInt.RandomInRange(min, max)); 

      Console.In.ReadLine(); 
     } 
    } 

} 

Je sais qu'il est à peu près un noob question, mais je suis habitué à C++. Merci pour l'aide à l'avance. =]

Répondre

3

Vous venez d'initialiser une instance de la classe RandomNumber. Vous devriez dire:

RandomNumber random = new RandomNumber(); 
int randomInt = random.RandomRange(min,max); 
+0

Ah, a un sens maintenant. Merci pour l'aide! – Stradigos

1
Console.Out.WriteLine("Your random number is: {0}" , RandomInt.RandomInR) 

Est une solution possible.

+0

J'aime celui-ci, beaucoup plus propre. Moins de lignes de code. – Stradigos

1

Laissez-moi savoir si je manque quelque chose, mais ceci:

int RandomInt = new RandomNumber(); 

doit être:

RandomNumber RandomInt = new RandomNumber(); 

Vous créez une instance de RandomNumber , pas un int. Pour alléger les maux de tête à l'avenir, vous pouvez également utiliser type inference de C# 3.0 (le nouveau mot-clé var) pour laisser le compilateur déduire le type:.

var RandomInt = new RandomNumber(); 

(Ceci suppose que vous utilisez C# 3.0 versions antérieures . n'ont pas cette fonctionnalité)

Enfin, comme une suggestion de style, vous devez faire des instances de classes commencent par une lettre minuscule, pour différencier des classes réelles, qui commencent avec les capitales:

var randomInt = new RandomNumber(); 
+0

Oh vraiment? Merci pour l'info sur var. Fonctionnalité cool. – Stradigos

3

Il est important de noter que tha t vous ne voulez pas créer un nouveau aléatoire à chaque fois. En outre, il semble que vous voulez une classe statique par la façon dont vous l'utilisez.

public static class RandomNumber 
{ 
    private static readonly Random generator = new Random(); 

    public static int RandomInRange(int l, int u) 
    { 
     return generator.Next(l, u); 
    } 
} 
+0

Note supplémentaire: la raison pour laquelle vous ne voulez pas créer un nouveau Random à chaque fois est que Random est ensemencé à partir de * clock *. Si vous en créez deux dans la même tranche horaire, ils produiront * exactement les mêmes nombres *. Rendre aléatoire une fois dans une variable statique et continuer à re = en utilisant le même aléatoire, plutôt que de faire un nouveau à chaque fois. –