Justin Alcorta
asked on
subtracting string varaibles from an array.
Hi Everyone,
I have an array:
Dim cardDeck() As String = {"h2", "d2", "c2", "s2", "h3", "d3", "c3", "s3", "h4", "d4", "c4", "s4", "h5", "c5", "d5", "s5", "h6", "d6", "c6", "s6", "h7", "d7", "c7", "s7", "h8", "c8", "d8", "s8", "h9", "c9", "d9", "s9", "ht", "ct", "dt", "st", "hj", "cj", "dj", "sj", "hq", "cq", "dq", "sq", "hk", "ck", "dk", "sk", "ha", "ca", "da", "sa"}
and two string variables temp1 and temp2 with values such as d4 and s3
Now i want to delete these two variables from the array cardDeck.
Please help deleting these two variables and storing the remaining array in a new array.
Thanks
I have an array:
Dim cardDeck() As String = {"h2", "d2", "c2", "s2", "h3", "d3", "c3", "s3", "h4", "d4", "c4", "s4", "h5", "c5", "d5", "s5", "h6", "d6", "c6", "s6", "h7", "d7", "c7", "s7", "h8", "c8", "d8", "s8", "h9", "c9", "d9", "s9", "ht", "ct", "dt", "st", "hj", "cj", "dj", "sj", "hq", "cq", "dq", "sq", "hk", "ck", "dk", "sk", "ha", "ca", "da", "sa"}
and two string variables temp1 and temp2 with values such as d4 and s3
Now i want to delete these two variables from the array cardDeck.
Please help deleting these two variables and storing the remaining array in a new array.
Thanks
Instead of an Array, use List(Of String). This will allow you to remove the items without having to declare another array and copy everything over...
ASKER
Hi,
Thank you for replying. I read the same thing few minutes ago that arrayLists are more flexible but I am worried that it will affect logic of the rest of my program.
My current code is attached. I have already declared temp and temp2.
Could you help me modify it using list (of String)?
I appreciate your help.
Thank you for replying. I read the same thing few minutes ago that arrayLists are more flexible but I am worried that it will affect logic of the rest of my program.
My current code is attached. I have already declared temp and temp2.
Could you help me modify it using list (of String)?
I appreciate your help.
Public Sub Deal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button39.Click
My.Computer.Audio.Play(Application.StartupPath & "\deal.wav")
Dim cardDeck() As String = {"h2", "d2", "c2", "s2", "h3", "d3", "c3", "s3", "h4", "d4", "c4", "s4", "h5", "c5", "d5", "s5", "h6", "d6", "c6", "s6", "h7", "d7", "c7", "s7", "h8", "c8", "d8", "s8", "h9", "c9", "d9", "s9", "ht", "ct", "dt", "st", "hj", "cj", "dj", "sj", "hq", "cq", "dq", "sq", "hk", "ck", "dk", "sk", "ha", "ca", "da", "sa"}
Dim ListOfCards As List(Of String) = cardDeck.ToList
Dim Count As Integer = ListOfCards.Count
Dim MyBoxes(4) As PictureBox
Dim xLoc As Integer = 393
Dim yLoc As Integer = 499
Dim Selected As String
Dim PlayerCards As String = "Player Cards" & vbCrLf
Dim AllCards As String = ""
For i As Integer = 0 To 4
Count = ListOfCards.Count
Selected = Rndm.Next(Count)
PlayerCards = PlayerCards & ListOfCards(Selected).ToString & vbCrLf
MyBoxes(i) = New PictureBox
MyBoxes(i).Width = 187
MyBoxes(i).Height = 261
MyBoxes(i).Image = Image.FromFile("cards_bmp/" + ListOfCards(Selected) + ".png")
MyBoxes(i).Location = New System.Drawing.Point(xLoc, yLoc)
xLoc += 210
Me.Controls.Add(MyBoxes(i))
ListOfCards.RemoveAt(Selected)
Next
yLoc = yLoc + 120
End Sub
ASKER
Or do you think is there any other way in the ListOfCards, that I can remove the cards with string value temp and temp2 to show up?
Replace line 4:
Dim ListOfCards As List(Of String) = cardDeck.ToList
with:
Dim ListOfCards As List(Of String) = New List(Of String)(cardDeck)
you can setup the list with an array, then use the index to access the values.
Note replace ListOfCards(Selected).ToSt ring with ListOfCards(Selected) no need for conversion because it is already a string
Dim ListOfCards As List(Of String) = cardDeck.ToList
with:
Dim ListOfCards As List(Of String) = New List(Of String)(cardDeck)
you can setup the list with an array, then use the index to access the values.
Note replace ListOfCards(Selected).ToSt
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
@paul_p_vargas - I tried ur solution but it gives me this error:
Warning 1 Variable 'cardList' is used before it has been assigned a value. A null reference exception could result at runtime. C:\Users\ankit\Desktop\cev poker\cevp oker\Form1 .vb 94 9
on this line :
cardList.AddRange(cardDeck )
Warning 1 Variable 'cardList' is used before it has been assigned a value. A null reference exception could result at runtime. C:\Users\ankit\Desktop\cev
on this line :
cardList.AddRange(cardDeck
have you tried copying and pasting the whole code? i tried it and it works on my pc.
make sure there is teh "New" keyword in declaring your variable.
make sure there is teh "New" keyword in declaring your variable.
ASKER
Awesome! cool thanks alot. It works..
ASKER
Awesome work!
If you want to do this with an array, this will work:
Private Sub Test09()
Dim cardDeck() As String = {"h2", "d2", "c2", "s2", "h3", "d3", "c3", "s3", "h4", "d4", "c4", "s4", "h5", "c5", "d5", "s5", "h6", "d6", "c6", "s6", "h7", "d7", "c7", "s7", "h8", "c8", "d8", "s8", "h9", "c9", "d9", "s9", "ht", "ct", "dt", "st", "hj", "cj", "dj", "sj", "hq", "cq", "dq", "sq", "hk", "ck", "dk", "sk", "ha", "ca", "da", "sa"}
RemoveCard(cardDeck, "d4")
RemoveCard(cardDeck, "s3")
End Sub
Private Sub RemoveCard(ByRef cardDeck() As String, ByVal card As String)
Dim n As Integer = cardDeck.Length
Dim k As Integer = Array.IndexOf(cardDeck, card)
If k >= 0 Then
Array.Copy(cardDeck, k + 1, cardDeck, k, n - k - 1)
ReDim Preserve cardDeck(n - 2) ' subtract 1 to reduce array size; subtract another 1 because indexes start at 0
End If
End Sub