Partage
  • Partager sur Facebook
  • Partager sur Twitter

Deux problèmes

    3 octobre 2011 à 20:37:28

    Bonjour, bonsoir,
    Je me suis mis il y a peu au C#, avec visual studio 2010.
    - Mon premier problème :
    J'ai une chaine de caractère, char[] ou string.
    Je voudrais que chaque caractère de cette chaine soit générer aléatoirement, pour le moment, j'ai penser à ceci :
    ----------------------------------------------------------------------------------------------
    ...
    int nombreDeCaractere; //Entrer précédemment par une personne dans un textbox
    string chaine;
    Random random = new Random(); //Création d'un objet rand
    int rand = 0; //le futur nombre générer aléatoirement
    for (int i = 0; i < nombreDeCaractere; i++)
    {
    rand = random.Next(97,122); //génération du nombre aléatoires
    chaine[i] = 0x(rand);/*dans le principe j'aurai voulu que chaque caractère soit compris entre 'a' et 'z'(0x97 et 0x122)*/
    }
    ...
    ---------------------------------------------------------------------------------------------
    J'ai essayer plusieurs solutions, sans grand succès ...

    - Mon deuxième problème :
    Mon but est de comparer une chaine de caractère (string) du main, avec une chaine de caractère d'une classe.
    Donc :
    Main :
    Personnage[] personnage = new Personnage[51];
    ...
    string personnage;//entrer par l'utilisateur
    if (numeroDuPersonnage == 1)
    personnage[numeroDuJoueur] = new Personnage(personnage); //range pseudo dans la classe personnage dans un champ public pseudo
    else
    {
    if (personnage.Equals(personnage[i].pseudo) == true)//test si le pseudo entrer est égale à un ancien pseudo ou non pour faire retapper un pseudo à l'utilisateur. J'ai essayer un renvoie de pseudo par une méthode sans grand succes.
    {

    }
    }
    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

    Merci d'avance pour vos futurs aides.
    • Partager sur Facebook
    • Partager sur Twitter
      3 octobre 2011 à 21:07:16

      Pour ton premier problème, voici ma solution :

      namespace ConsoleApplication4
      {
          class Program
          {
              public static Random random = new Random();
      
              static void Main(string[] args)
              {
                  for (int i = 0; i < 32; i++)
                  {
      
                      String str = StrShuffle(26);
                      Console.WriteLine(str);
                  }
      
                  Console.Read();
      
              }
      
              public static String StrShuffle(int nombreDeCaractere)
              {    
                  //Entrer précédemment par une personne dans un textbox
                  string chaine;
                  //Random random = new Random(); //Création d'un objet rand
                  int rand = 0; //le futur nombre générer aléatoirement
      
                  byte[] randChars = new byte[nombreDeCaractere];
      
                  for (int i = 0; i < nombreDeCaractere; i++)
                  {
                      rand = random.Next(97,122); //génération du nombre aléatoires
                      //chaine[i] = 0x(rand);/*dans le principe j'aurai voulu que chaque caractère soit compris entre 'a' et 'z'(0x97 et 0x122)*/
                      randChars[i] = (byte)rand;
                  }
      
                  chaine = Encoding.ASCII.GetString(randChars);
      
                  return chaine;
              }
          }
      }
      


      J'ai mis ton Random en static, parce que sinon, si il est créé dans la méthode, les chaîne générées sont identiques.

      Et pour ton deuxième problème, si t'as une erreur "La référence d'objet n'est pas définie à une instance d'un objet." c'est que t'essais d'accéder à un objet qui est null. Donc, tu devrais débuger et regarder ton code, de plus avec le code complet sa serait mieux pour voir c'est où que sa cloche.

      PS. aussi mets dans ton code dans des balises de code, c'est beaucoup plus jolies pour les yeux et la compréhension.
      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2011 à 16:55:01

        Bonjour,

        Concernant le deuxieme problème, voici une solution

        public class Personne
            {
                public string Nom { get; set; }
            }
            class Program
            {
                static void Main(string[] args)
                {
                    List<Personne> listPersonne = new List<Personne>();
        
                    while (true)
                    {
                        bool notexist;
                        do
                        {
                            notexist = true;
                            Console.WriteLine("Entrez un nom de personne");
                            string nomChoisi = Console.ReadLine();
                            if (listPersonne.Count == 0 || listPersonne.Where(x => x.Nom.Equals(nomChoisi)).FirstOrDefault() == null)
                            {
                                listPersonne.Add(new Personne { Nom = nomChoisi });
                            }
                            else
                            {
                                notexist = false;
                                Console.WriteLine("Ce nom est déjà pris");
                            }
                        } while (!notexist);
                    }
                }
            }
        


        Je te conseille d'utiliser beaucoup plus les fonctionnalités de c#. Dans mon exemple, tu trouvera des listes generiques, les fonctions count des listes pour voir si c'est la premiere personne ...

        Ca te simplifiera la vie même si ca met un petit temps à apprendre ;)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          4 octobre 2011 à 18:25:40

          @Zechiron :
          listPersonne.Where(x => x.Nom.Equals(nomChoisi)).FirstOrDefault() == null
          

          Euh....
          ! listePersonne.Any(x => x.Nom == nomChoisi)
          

          C'est plus court, plus concis et plus pratique :)
          Ou alors tu veux comparer sans casse, auquel cas il faut effectivement utiliser Equals, mais avec un paramètre.

          De plus, les bonnes pratiques de programmation recommandent d'éviter les bools commençant par "not" surtout si c'est pour ensuite tester leur inverse, c'est un bon moyen de rendre la compréhension du code difficile ^^
          • Partager sur Facebook
          • Partager sur Twitter

          Deux problèmes

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown