1
votes

Odds / Even dans une boîte de texte multiligne VB.Net

Comment faire cela dans la chaîne (pour afficher les valeurs de la première ligne si txtboxintdraws.lines (1) est la valeur - 2-3-4-6-7-8, dans textbox1.Lines1 () pour afficher 2,4,6,8, et dans textbox2.text - 3,7. (séparés par une virgule)

2
2
2
2
4
4
4
6
6
6
6

Cela me montre faux, genre

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim number As Integer
        Dim numbers As New List(Of Integer)
        For Each strLine As String In TxtBoxIntDraws.Lines
            Dim nums() As String = strLine.Split(","c)
            For Each num As String In nums
                If Integer.TryParse(num.Trim, number) Then
                    numbers.Add(number)
                End If
            Next
        Next
        numbers.Sort()
        'When you are building strings use a StringBuilder to avoide creating and throwing away 
        'a bunch of strings. (happens every time you alter a string
        Dim TextBox1sb As New StringBuilder
        Dim TextBox2sb As New StringBuilder
        For Each intNumber As Integer In numbers
            'The Mod operator divides the first number by the second number
            'and returns the remainder
            If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then
                'Number is even
                TextBox1sb.AppendLine(intNumber.ToString)
                TextBox1.Text = TextBox1.Text + intNumber.ToString
            Else
                TextBox2sb.AppendLine(intNumber.ToString)
                TextBox2.Text = TextBox1.Text + intNumber.ToString
            End If
        Next
        'Update the UI only once, don't force a redraw on each iteration of the loop
    TextBox1.Text = TextBox1sb.ToString
    TextBox2.Text = TextBox2sb.ToString
    End Sub

Alors, où est-ce que je me trompe?


2 commentaires

Cela me montre mal, genre , qu'est-ce que cela signifie? Voulez-vous tous les égales dans une liste et toutes les cotes dans une autre liste?


J'ai montré ci-dessus, affichant mes valeurs en dessous les unes des autres, je veux afficher les valeurs correspondant à chaque ligne en ligne. oui, c'est ce que je veux.


3 Réponses :


1
votes

Si vous voulez que vos numéros soient affichés pour chaque ligne correspondante, vous devrez garder une trace de chaque ligne ainsi que garder deux listes distinctes; un pour les cotes et l'autre pour les nombres pairs. Veuillez voir ci-dessous une mise en œuvre rapide que j'ai faite pour permettre cela.

Dim even As New Dictionary(Of Integer, String)
Dim odd As New Dictionary(Of Integer, String)
Dim currIndex As Integer = 0
Dim curNum As Integer = 0
Dim evenNumbers As String = String.Empty
Dim oddNumbers As String = String.Empty

' Go through all lines in the textbox
TxtBoxIntDraws.Lines.
            ToList().ForEach(Sub(line)
                                 evenNumbers = String.Empty
                                 oddNumbers = String.Empty
                                 ' Try and split out the numbers from the line
                                 line.Split({"-"c}, StringSplitOptions.RemoveEmptyEntries).AsEnumerable().
                                                                                                 Where(Function(i) Integer.TryParse(i.Trim, New Integer)).OrderBy(Function(num) CInt(num)).ToList().
                                                                                                 ForEach(Sub(l)                                                                    
                                                                              ' For each item if we can parse it, then check if even and or odd and add to the correct dictionary
                                                                                                           If Integer.TryParse(l.Trim, curNum) Then
                                                                                                                 If curNum Mod 2 = 0 Then
                                                                                                                     If evenNumbers.Length > 0 Then
                                                                                                                         evenNumbers += ", " & curNum.ToString
                                                                                                                     Else
                                                                                                                         evenNumbers += curNum.ToString
                                                                                                                     End If
                                                                                                                 Else
                                                                                                                     If oddNumbers.Length > 0 Then
                                                                                                                         oddNumbers += ", " & curNum.ToString
                                                                                                                     Else
                                                                                                                         oddNumbers += curNum.ToString
                                                                                                                     End If
                                                                                                                 End If
                                                                                                             End If
                                                                                                         End Sub)

                                 If Not String.IsNullOrEmpty(evenNumbers) Then even.Add(currIndex, currIndex & " - " & evenNumbers)
                                 If Not String.IsNullOrEmpty(oddNumbers) Then odd.Add(currIndex, currIndex & " - " & oddNumbers)
                                 currIndex += 1
                             End Sub)
' Show the results
TextBox1.Text = String.Join(Environment.NewLine, even.Values)
TextBox2.Text = String.Join(Environment.NewLine, odd.Values)

Voici mes résultats

 entrez la description de l'image ici


1 commentaires

Pour une raison ou une autre dont je ne sais pas, lorsque j'ai ajouté le commentaire sur l'analyse, il a également inclus le If Integer.TryParse (l.Trim, curNum) Then dans le cadre du commentaire , J'ai corrigé c'est le code ...



-1
votes

J'ai fait une petite modification sur votre code ci-dessus et je l'ai testé correctement, voici ce que je pense que vous avez demandé, en particulier pour la première ligne, sinon personnalisez-le comme vous le souhaitez. Voici le code de mise à jour:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim number As Integer
Dim numbers As New List(Of Integer)
For Each strLine As String In TxtArr.Lines
    'Dim nums() As String = strLine.Split(","c)
    Dim nums() As String = strLine.Split("-")
    For Each num As String In nums
        If Integer.TryParse(num.Trim, number) Then
            numbers.Add(number)
        End If
    Next
Next
numbers.Sort()
'When you are building strings use a StringBuilder to avoide creating and throwing away 
'a bunch of strings. (happens every time you alter a string
Dim TextBox1sb As New StringBuilder
Dim TextBox2sb As New StringBuilder
For Each intNumber As Integer In numbers
    'The Mod operator divides the first number by the second number
    'and returns the remainder
    If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then
        'Number is even
        TextBox1sb.Append(intNumber.ToString & ",")
        TextBox1.Text = TextBox1.Text + intNumber.ToString
    Else
        TextBox2sb.Append(intNumber.ToString & ",")
        TextBox2.Text = TextBox2.Text + intNumber.ToString

    End If
Next
'Update the UI only once, don't force a redraw on each iteration of the loop
'TextBox1.Text = Strings.Left(TextBox1sb.ToString, TextBox1sb.Length - 1)

TextBox1.Text = Mid(TextBox1sb.ToString, 1, Len(TextBox1sb.ToString) - 1)
TextBox2.Text = Mid(TextBox2sb.ToString, 1, Len(TextBox2sb.ToString) - 1)

End Sub

J'espère que cela peut vous aider, ^ _ ^

 entrez la description de l'image ici


0 commentaires

0
votes

Comme c'était mon code d'une réponse précédente, quelques modifications corrigent les choses. Vous pouvez corriger la virgule finale.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    TextBox3.Text = "-2-3-4-6-7-8" 'Pretend TextBox3 is TxtBoxIntDraws
    Dim number As Integer
    Dim numbers As New List(Of Integer)
    For Each strLine As String In TextBox3.Lines
        Dim nums() As String = strLine.Split("-"c)
        For Each num As String In nums
            If Integer.TryParse(num.Trim, number) Then
                numbers.Add(number)
            End If
        Next
    Next
    numbers.Sort()
    'When you are building strings use a StringBuilder to avoide creating and throwing away 
    'a bunch of strings. (happens every time you alter a string
    Dim TextBox1sb As New StringBuilder
    Dim TextBox2sb As New StringBuilder
    For Each intNumber As Integer In numbers
        'The Mod operator divides the first number by the second number
        'and returns the remainder
        If intNumber Mod 2 = 0 Then '(number / 2) = Int(number / 2) Then
            'Number is even
            TextBox1sb.Append(intNumber.ToString & ",")
            TextBox1.Text = TextBox1.Text + intNumber.ToString
        Else
            TextBox2sb.Append(intNumber.ToString & ",")
            TextBox2.Text = TextBox1.Text + intNumber.ToString
        End If
    Next
    'Update the UI only once, don't force a redraw on each iteration of the loop
    TextBox1.Text = TextBox1sb.ToString
    TextBox2.Text = TextBox2sb.ToString
End Sub


0 commentaires