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 illogique en VB.NET


Sujet :

VB.NET

  1. #1
    Membre du Club

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 14
    Points : 48
    Points
    48
    Par défaut Problème illogique en VB.NET
    Bonsoir à tous,

    Je fais appel à vous suite à un problème que je rencontre et qui me perturbe.

    Voilà, je lis un fichier score.txt qui contient (Nom du joueur, nombre de partie, minute, seconde) :

    AAA,999,10,00;
    AAB,998,00,04;
    AAC,997,00,06;
    AAD,996,00,10;
    AAE,995,10,12;
    Pour lire les valeurs, je le fais avec StreamReader, donc je récupère le tout normalement avec la suite d'instructions habituelle spliter par rapport au ";" récupéré dans le tableau nommé "ligne".
    Ensuite je fais un split par rapport au "," de ligne, récupéré dans le tableau "result".

    Avec le code suivant,

    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
     
    Public Sub hight_score(ByVal minute, ByVal seconde)
        Dim Score As String = "./Ressources/Score.txt"
        Dim sr As New System.IO.StreamReader(Score)
        Dim Source As String
        Dim result() As String
        Dim i As Integer
        Source = sr.ReadToEnd()
        Dim ligne() As String = Split(Source, ";")
        For i = 0 To 4
           result = Split(ligne(i), ",")
           Dim mm As Integer = CType(result(2), Integer)
           Dim ss As Integer = CType(result(3), Integer)
     
           MsgBox(mm & "'" & ss & "'' et " & minute & "'" & seconde & "''")
           If minute <= mm Then
               If seconde <= ss Then
                   MsgBox("ok")
               End If
           End If
        Next
    End Sub
    Pour un passage en fonction de (0,3), je devrais trouver "ok" pour toutes les lignes, soit 5 fois.

    Or avec le 10'00 et le 10'12, le programme ne m'affiche pas le "ok".

    Je ne comprends pas pourquoi, je teste bien deux integer, et non des string avec des integer ou encore deux string.

    Je voudrais vérifier si le temps que je passe en paramètre est inférieur à un des temps du fichier.
    Quelqu'un aurait une réponse/solution à mon problème ?

    Nir3x

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,

    voir pour comparer des intervalles de temps, TimeSpan peut être une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                Dim tempsMini As New TimeSpan(0, minute, seconde)
                Dim temps As New TimeSpan(0, mm, ss)
     
                If tempsMini <= temps Then
                    MsgBox(mm & "'" & ss & "'' et " & minute & "'" & seconde & "''" & Environment.NewLine & "ok")
                Else
                    MsgBox(mm & "'" & ss & "'' et " & minute & "'" & seconde & "''" & Environment.NewLine & "PAS ok")
                End If

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    La solution de chrismonoye apporte surement la réponse à ta question

    Mais pour expliquer
    Citation Envoyé par Nir3x Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub hight_score(ByVal minute, ByVal seconde)
    ...
    Je ne comprends pas pourquoi, je teste bien deux integer, et non des string avec des integer ou encore deux string.
    Les paramètres de ta Sub ne sont pas typés, comment peux-tu être sur que tu testes des integer ?

    Citation Envoyé par Nir3x Voir le message
    Pour un passage en fonction de (0,3), je devrais trouver "ok" pour toutes les lignes, soit 5 fois.
    Faux, la première (10'00 ) ne rentre pas dans les critères (seconde <= ss est équivalent à 3 <= 0 ; c'est faux), seule 4 lignes correspondent.
    Les 2 if à la suite fait que c'est équivalent à un And des 2 conditions.
    min : 0 <= 10 et sec 3 <= 0 ; resultat : False
    min : 0 <= 0 et sec 3 <= 4 ; resultat : True
    min : 0 <= 0 et sec 3 <= 6 ; resultat : True
    min : 0 <= 0 et sec 3 <= 10 ; resultat : True
    min : 0 <= 10 et sec 3 <= 12 ; resultat : True
    Ton algo est faux.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre du Club

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 14
    Points : 48
    Points
    48
    Par défaut
    Re à vous deux,
    Ah oui, bien vu pour l'oubli de typage des paramètres. Or je viens de le refaire avec le typage et cela ne change pas.

    Je viens de faire le test avec la solution de chrismonoye, et cela fonctionne parfaitement pour différentes valeurs.

    Fichier score.txt :
    AAA,999,10,00;
    AAB,998,02,04;
    AAC,997,10,06;
    AAD,996,20,10;
    AAE,995,10,12;
    En paramètre : 10'00 donc (10, 0).

    Merci pour l'aide. Et désolé pour mon oubli anormal, pour ma défense, il était tard , lol.

    Pour la solution, j'ai fais ceci :

    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
    Public Sub hight_score(ByVal minute As Integer, ByVal seconde As Integer)
            Dim Score As String = "./Ressources/Score.txt"
            Dim sr As New System.IO.StreamReader(Score)
            Dim Source As String
            Dim result() As String
            Dim i As Integer
            Source = sr.ReadToEnd()
            Dim temps As New TimeSpan(0, minute, seconde)
            Dim ligne() As String = Split(Source, ";")
            For i = 0 To 4
                result = Split(ligne(i), ",")
                Dim mm As Integer = CType(result(2), Integer)
                Dim ss As Integer = CType(result(3), Integer)
                Dim tempsMini As New TimeSpan(0, mm, ss)
                If temps < tempsMini Then
                    MsgBox(mm & "'" & ss & "'' > " & minute & "'" & seconde & "''" & Environment.NewLine & "ok")
                Else
                    MsgBox(mm & "'" & ss & "'' <= " & minute & "'" & seconde & "''" & Environment.NewLine & "PAS ok")
                End If
            Next
     
        End Sub
    J'ai un test strictement inférieur parce que je ne veux pas que ce soit vrai pour les mêmes temps.

    Nir3x

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

Discussions similaires

  1. problème mode design Asp.net[2.0]
    Par dev-man dans le forum ASP.NET
    Réponses: 6
    Dernier message: 07/02/2007, 14h05
  2. problème de déploiement VB.NET 2.0
    Par ranky dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/01/2007, 12h16
  3. [Mail] Problème mail() et laposte.net
    Par webrider dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2006, 11h17
  4. Probléme installation visual studio .NET
    Par denebj dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/09/2006, 23h09
  5. [AJAX] Ajax et ASP.NET
    Par boleduch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2006, 16h15

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