2010-10-15 6 views
-2

Je veux cliquer sur le bouton et choisir un nombre entre 1, 20 puis afficher les résultats dans lblPickFive_1.Text Lorsque j'essaie de l'exécuter, je reçois des erreurs partout. Erreur 1 Une initialisation du champ ne peut pas référencer le champ non statique, la méthode ou la propriété 'LotteryTickets.Form1.random'Numéros aléatoires dans C#

Warning 4 code inaccessible détecté

string random; 
     string num = random.Next(); 

     string num = random.Next(20); 



    private int RandomNumber(int min, int max) 
    { 
    Random random = new Random(); 
    return random.Next(min, max); 
    lblPickFive_1.Text=num; 
    }   
} 
+1

La déclaration de retour avant 'lblPickFive_1.Text = num;' est un problème. C'est le code inaccessible. – Gabe

+3

Est-ce que ce sont les devoirs? Cela sent vraiment les devoirs. – jcolebrand

+0

Juste curieux ... mais qu'est-ce qui ne va pas avec l'aide aux devoirs? J'ai appris à coder quand j'étais au collège ... – Jeff

Répondre

1

essayer ceci:

private void SetRandomNumber(int min, int max) 
{ 
    int num = new Random().Next(min, max); 
    lblPickFive_1.Text=num; 
}  
+1

Non, les randoms auront tous la même graine et donc le même nombre sera généré tout le temps ... –

+1

@Richard, ce n'est pas vrai. Que supposez-vous que la graine sera? (Il est dérivé de l'heure actuelle, qui change habituellement ...) Cependant, vous avez raison de dire qu'il est préférable de le stocker quelque part plutôt que de le créer à nouveau pour éviter les problèmes lorsque la méthode est appelée rapidement dans un court laps de temps. –

+0

Dans mon expérience, c'est ce qui est attendu, mais pas ce qui se passe réellement, essayez-le vous-même ... –

0

des regards de celui-ci, ce sont les raisons pour lesquelles:

erreur 1 Une première sur le terrain izer ne peut pas référence le champ non statique, méthode , ou bien « LotteryTickets.Form1.random »

est parce que vous méthode est privée et que vous essayez de l'appeler de l'extérieur

private int RandomNumber(int min, int max) 

rendent internal ou public au lieu

Avertissement 4 Code inaccessible détecté

est parce que vous revenez avant que la zone de texte ne soit définie;

return random.Next(min, max); 
lblPickFive_1.Text=num; // This will never get reached 

et si elle était moi j'écrire la méthode aléatoire comme ceci:

internal static int RandomNumber(int min, int max) 
{ 
    Random random = new Random(DateTime.Now.Millisecond); // Use a seed to reduce the chance of re-ocurring numbers 
    return random.Next(min, max); 
}  

et aurait probablement dans une classe RandomHelper plutôt que sur la forme elle-même.

-1

La plupart d'entre vous avez tort d'une certaine façon ...

Tout d'abord, vous devez avoir seulement une instance de Random, car ils seront tous ensemencés avec le même nombre ...

En second lieu, Comme certains l'ont dit, le code lblPickFive_1.Text=num; ne sera jamais appelé. Changez votre méthode à ceci:

Random rand = new Random(); 

private int RandomNumber(int min, int max) 
{ 
    int i = rand.Next(min, max); 
    lblPickFive_1.Text=i; 
    return i; 
} 
0

Votre appel à random.Next() est en dehors de la portée où l'objet aléatoire est déclaré. Ensuite, vous obtenez le code inaccessible parce que vous revenez avant de définir le texte de l'étiquette à num.

Essayez ceci:

class MyClass 
    { 
    Random random; 
    public MyClass() 
    { 
     random = new Random(Guid.NewGuid().GetHashCode()); 
    } 

    public void RandomNumber(int min, int max) 
    { 
     lblPickFive_1.Text = random.Next(min, max).ToString();  
    } 
    } 
+0

Erreur Impossible d'accéder à un membre non statique du type externe 'LotteryTickets .Form1 'par type imbriqué' LotteryTickets.Form1.MyClass ' – user770022

+0

Désolé. La classe environnante était juste là pour montrer l'idée. Tirez le contenu de celui-ci dans votre classe de formulaire (Form1) à la place. – steinar

Questions connexes