IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème avec mon programme ( Type de valeur ) [Débutant]


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Problème avec mon programme ( Type de valeur )
    Bonjour/Bonsoir

    Je suis un débutant en VisualBasic, soyez indulgent s'il vous plait

    Voilà, je suis en train de faire un programme s'intitulant " Plus ou moin "
    Le but, et donc de trouver le chiffre géneré aléatoirement.

    Le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Module Module1
     
        Sub Main()
            ' Déclaration des variables
            Dim RandomClass As New Random()
            Dim RandomNumber As Integer
            Dim NombreEntree As String
            Dim Niveau As Integer = 1
            Dim Jeu As Integer = 0
            Dim NombreMini As Integer
            Dim NombreMax As Integer
            ' Présentation du programme
            Console.WriteLine("Bienvenue dans le plus ou moin")
            Console.WriteLine("Celui-ci est crée avec le langage de programmation VisualBasic.NET ( VB.NET )")
            Console.WriteLine("Merci d'appuyer sur <<Entrer>>")
            Console.Read()
            ' Création du nombre alétoire ( de 1 à 100 )
            RandomNumber = RandomClass.Next(1, 100)
            Console.WriteLine("On commence !")
            Console.WriteLine("On commence de 1 à 100")
            NombreMini = 1
            NombreMax = 100
            ' Boucle infinie permettant de jouer en illimité =) !
            Do
     
                Console.Read()
                Console.WriteLine("Entrer le nombre")
                Console.WriteLine("Valeur: " & RandomNumber)
                NombreEntree = Console.ReadLine()
                ' Si le nombre entree est égal au nombre généré:
                If NombreEntree = RandomNumber Then
                    NombreMax += 100
                    Niveau += 1
                    Console.WriteLine("Bien joué !")
                    Console.WriteLine("Niveau " & Niveau & ": de " & NombreMini & " à " & NombreMax)
                    RandomNumber = RandomClass.Next(NombreMini, NombreMax)
                    NombreEntree = 0
                    Console.WriteLine("Le chiffre à rechercher se situe maintenant entre " & NombreMini & " et " & NombreMax)
                    ' Sinon, si le nombre entree est plus petit que le nombre généré:
                ElseIf NombreEntree < RandomNumber Then
                    Console.WriteLine("Le nombre recherché est plus petit !")
                    ' Sinon, si le nombre entree est plus grand que le nombre généré:
                ElseIf NombreEntree > RandomNumber Then
                    Console.WriteLine("Le nombre recherché est plus grand !")
                End If
                ' Faire en sorte que le jeu ne se termine jamais:
            Loop Until Jeu = 1
            Console.Read()
        End Sub
     
    End Module
    Le problème est le suivant:

    J'entre pour la première fois le chiffre géneré aléatoirement, ça marche, il m'affiche bien le message " Bien joué ! ...... "
    Je suis donc dans le niveau 2, et le nombre à trouver se trouve entre 1 et 200.
    J'entre donc n'importe quel chiffre, et un message apparait sur VB:

    L'exception System.InvalidCastException n'a pas été gérée
    Message=La conversion de la chaîne "" en type 'Double' n'est pas valide.
    Source=Microsoft.VisualBasic
    StackTrace:
    à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
    à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)
    à ConsoleApplication1.Module1.Main() dans C:\Users\Alexandre\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Module1.vb:ligne 31
    à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    InnerException: System.FormatException
    Message=Le format de la chaîne d'entrée est incorrect.
    Source=Microsoft.VisualBasic
    StackTrace:
    à Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
    à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
    InnerException:
    Voilà, je ne comprends pas ce problème, enfin je pense que ça vient du type de format...

    Cordialement

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    visual basic est configuré par défaut pour laisser écrire n'importe quoi
    il faut aller dans les propriétés du projet pour mettre option strict on et option explicite on

    une fois que ca serait fait, il va te souligner en erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If NombreEntree = RandomNumber Then
    car nombreentree est un string, et randomnumber est un nombre
    comparer un string et un nombre est illogique il faut convertir le string en nombre ou l'inverse, sans les paramètres précités, la conversion est implicite
    mais une conversion n'est pas toujours possible "aaa" n'est pas convertible en nombre tout comme "" (chaine vide) dans ton cas
    avec les paramètres précités ca oblige à faire la convertion explcitement par code et en théorie à se poser la question de la faisabilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not integer.tryparse(...) then console.writeline ("entrez un nombre")

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Merci de ton aide.
    Cependant, que dois-je mettre ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not integer.tryparse(...)
    Je ne vois pas vraiment ce que je dois mettre en ces parenthèses ...
    Aussi, où dois-je mettre ceci, je ne vois pas vraiment, a moin que ce soit à la place de Console.WriteLine("Entrer un nombre")

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    quand tu tapes tryparse( ca t'explique en info bulle ce qu'il faut après
    de plus si tu fais F1 sur tryparse après l'avoir écrit ca va t'expliquer ce que fait la fonction et ce qu'elle attend en paramètre
    ainsi tu devrais savoir ou ca se place, mais en théorie, il faut tester que ce qui a été saisie est transformable en nombre avant de faire une comparaison de ce soit disant nombre

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    D'accord,

    Je dois donc faire comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               Console.Read()
                If Not Integer.TryParse(NombreEntree, RandomNumber) Then Console.WriteLine("entrez un nombre")
                Console.WriteLine("Entrer le nombre")
                Console.WriteLine("Valeur: " & RandomNumber)

  6. #6
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Non, car si tu fais comme cela et qu'il arrive à parser la chaine entrée par l'utilisateur, il va stocker la valeur dans ton RandomNumber alors que c'est la valeur à trouver.

    Il faut faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim NombreEntree As String
    Dim EntreeParsee As Integer
    Integer.TryParse(NombreEntree, EntreeParsee)

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Comme ceci alors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Console.WriteLine("Valeur: " & RandomNumber)
                NombreEntree = Console.ReadLine()
                Integer.TryParse(NombreEntree, EntreeParsee)
                ' Si le nombre entree est égal au nombre généré:
                If EntreeParsee = RandomNumber Then
    Je suis assez perdu là...

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    integer.tryparse est une fonction, une fonction a une valeur de retour
    la valeur de retour de tryparse est un booléen qui vaut true si la conversion a réussi, il faut donc tester cette valeur de retour

    de plus si al conversion a réussie tryparse écrit directement la valeur (grave au byref) dans la variable que tu lui donnes

    ce qui donne au niveau algo un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim nombreAlteat as integer
    do
      dim saisie as string
      dim nombresaisi as integer
      do
         saisie = readline
      loop until integer.tryparse(saisie,nombresaisi)
      if nombreAlteat <> nombresaisi then write "non"
    loop until nombreAlteat = nombresaisi
    write "trouvé !"

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci à vous, ça marche très bien ! =)

    Voici mon code ( Refait entierrement à l'occasion ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Module Module1
     
        Sub Main()
            Dim RandomClass As New Random()
            Dim ValeurSaisie As String
            Dim ValeurSaisie2 As Integer
            Dim NombreMistere As Integer
            Dim Jeu As Integer = 0
            Dim NombreMax As Integer = 100
            Dim Niveau As Integer = 0
            Dim Essais As Integer = 0
            Console.WriteLine("Bienvenue dans le plus ou moin créé par Jcvag44800.")
            Console.WriteLine("Ce jeu consiste à trouver un nombre généré aléatoirement.")
            Console.WriteLine("Vous entrez par exemple 51, le programme vous dit si le nombre à trouver est plus grand, ou plus petit")
            Console.WriteLine("Bonne chance ! ( appuyer sur enter )")
            Console.Read()
            Console.Clear()
            NombreMistere = RandomClass.Next(1, 100)
            Console.WriteLine("Vous êtes au niveau 1, le nombre à trouver se trouve entre 0 et 100.")
            Console.WriteLine("Entrer un nombre:")
            Do
                Do
                    ValeurSaisie = Console.ReadLine()
                Loop Until Integer.TryParse(ValeurSaisie, ValeurSaisie2)
     
                If ValeurSaisie2 > NombreMistere Then
                    Console.WriteLine("Le nombre à trouver est plus petit.")
                    Essais += 1
                ElseIf ValeurSaisie2 < NombreMistere Then
                    Console.WriteLine("Le nombre à trouver est plus grand.")
                    Essais += 1
                Else
                    Console.Clear()
                    NombreMax += 100
                    Niveau += 1
                    NombreMistere = RandomClass.Next(1, NombreMax)
                    Console.WriteLine("Valeur trouvé ( " & NombreMistere & " ) ! ( " & Essais & " essais )")
                    Console.WriteLine("Bien joué, tu viens de réussir le niveau " & Niveau & " =) !")
                    Console.WriteLine("Maintenant, la valeur se trouve entre 0 et " & NombreMax)
                End If
            Loop Until Jeu = 1
            Console.Read()
        End Sub
     
    End Module
    Est-il correct ?

    Cordialement

  10. #10
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Bonjour,

    Il me semble qu'il reste une petite erreur : tu modifie le nombre mystère avant de l'afficher...et donc tu affiches le nombre mystère suivant alors que le joueur ne l'a pas encore trouvé.

    Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NombreMistere = RandomClass.Next(1, NombreMax)
    devrait se trouver à la fin du else, après les affichages.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    Oui j'avais vu ça

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes avec mon programme
    Par anthony.flet dans le forum Général Python
    Réponses: 7
    Dernier message: 05/09/2012, 08h58
  2. Réponses: 11
    Dernier message: 04/03/2012, 19h12
  3. Problème avec mon programme racine
    Par Chicard dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 25/11/2010, 10h25
  4. [PERL]problème avec mon premier programme
    Par lucifer01 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 07/04/2009, 18h38
  5. Réponses: 15
    Dernier message: 23/08/2007, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo