|
you should also notice how proper indentation improves readability a lot.
Most code editors can do that automatically for you.
|
|
|
|
|
I am currently writing a program that when a user enters a number such as 1267 and clicks a button the number will then be
broken down by its ones place, tens place, and so on. So it would show up as One place is: 7, Tens place is: 6, and so on.
Well I need a little help trying to figure out what code I would write to test or separate each single integer. So far I have only been able to separate the ones place using:
Microsoft.VisualBasic.Right(Textbox1.text,1)
But as u might know, I cant use that for the rest of the values since it only will extract the location you tell it to as well as what ever follows it.
Please help, Thanks
|
|
|
|
|
You could use the Chars property of the String class. This will return the character in the string at any given position.
|
|
|
|
|
would this work if the user were to enter lets say 105,749
then i would need to display,
thousands place is: 105
hundreds place is: 7
and so on
???
thanks for da help
|
|
|
|
|
No it wouldn't, the Chars property on returns 1 character from the string. See Johan Hakkesteegt's response further down to do what you're asking.
|
|
|
|
|
okay so this is the for loop i made but i know its wrong and it doesnt work all the time
I was just trying to see if it would at least display my tens place b4 i move on to work with the other values
For i = 0 To TextBox1.Text.Length - 1
tens = i
Label10.Text = tens
Next i
the textbox would be where the user would enter in the number
tens is a integer variable i created
and the label10.text is where i am displaying the tens value
i know its not right at all but i just wanted to see if i had an idea of what i was supposed to do
|
|
|
|
|
No but you can improve your loop by asking if the current character is a number:
for ind=1 to str.lenght
curchar=mid(str,ind,1)
if isnumeric(curchar) then
...
endif
next
Shay Noy
|
|
|
|
|
you can use the mid function:
mid(yourstring,position,lenght) returns substring.
In your case lenght=1 and position increment each iteration.
Good luck
Shay Noy
|
|
|
|
|
would this be able to work if the
user were to enter lets say 105,789
then i would need to display thousand place: 105
hundreds place is: 7
and so on
??
|
|
|
|
|
or better yet, use .net: Textbox1.Text.SubString(i, 1) where i is the zero based index number of the position you want.
My advice is free, and you may get what you paid for.
|
|
|
|
|
So i could use a For loop, correct?
thanks
|
|
|
|
|
okay so this is the for loop i made but i know its wrong and it doesnt work all the time
I was just trying to see if it would at least display my tens place b4 i move on to work with the other values
For i = 0 To TextBox1.Text.Length - 1
tens = i
Label10.Text = tens
Next i
the textbox would be where the user would enter in the number
tens is a integer variable i created
and the label10.text is where i am displaying the tens value
|
|
|
|
|
i also tried this for loop:
For index As Integer = TextBox1.Text.Length - 1 To 0 Step -1
MessageBox.Show(TextBox1.Text(index))
Next
i am just using the messagebox to get each individual character and show me that it is working.
i am really supposed to be sending it to separate textboxes.
but i dont know or understand how to send the first indexed item to the first textbox to be displayed, and then continue to
send out the other separated characters to the other textboxes.
|
|
|
|
|
The question you first need to ask yourself is, how large a number can the user possibly enter? In other words, you will first have to determine how many positions you will have to report on (singles, tens, hundreds, thousands, tenthousands, hundredthousands, etc). In yet other words, how many textboxes will you need to put on your form?
So as Liqz suggested, it might be best to use Chars, and an array first, before using a loop.
Something like:
Dim PositionsArray() As Char = TextBox1.Text.ToCharArray
Now you can easily determine the number of characters:
Dim AmountOfPositions As Integer = PositionsArray.Length
Now you almost know how many positions you will have to handle. But what if we use your example: 105,749 ? This has a comma in the middle, which is also a position, but not a number.
Here you could use a For Each loop:
For Each c As Char In PositionsArray
'This will loop through the characters from left to right'
'Then play around with the possiblities of the Char type:'
If Not Char.IsDigit(c) Then
MsgBox("I found something other than a number (" & c.ToString & ")" & _
" at index: " & Array.IndexOf(PositionsArray, c))
End If
Next
Next you could look into the Case statement. like Steven suggested below.
My advice is free, and you may get what you paid for.
|
|
|
|
|
First of all thank u so much for all the help
I tried using the case statement but when I tried to pass the myNumber.Units, Tens, and so on to display in a separate
textbox it wouldn't display anything.
Case 1
myNumber.Units = sEnteredNumber.SubString(idx, 1)
Textbox1.text = myNumber.Units
This is what i tried doing to display to the user what the ones, tens and so on were but it wouldn't display anything?
|
|
|
|
|
First create a structure to hold the results
Structure NumberBreakDown
Dim Units as byte
Dim Tens as byte
Dim Hundreds as byte
Dim Thousands as integer
End Struture
Then
Dim myNumber as NumberBreakDown
Dim position as integer = 0
Dim sEnteredNumber as string = enteredNumberTextBox.Text.Trim
For idx as byte = sEnteredNumber.Length -1 to 0
position += 1
Select Case position
Case 1
myNumber.Units = sEnteredNumber.SubString(idx, 1)
Case 2
myNumber.Tens = sEnteredNumber.SubString(idx, 1)
Case 3
myNumber.Hundreds = sEnteredNumber.SubString(idx, 1)
Case Else
myNumber.Thousands = sEnteredNumber.SubString(0, sEnteredNumber.Length - Position +1)
End Select
Next
The above obviously does not handle commas and decimal places, but could easily be modified to.
Steve Jowett
-------------------------
Real programmers don't comment their code. If it was hard to write, it should be hard to read.
|
|
|
|
|
I tried using this case statement but when I tried to pass the myNumber.Units, Tens, and so on to display in a separate
textbox it wouldn't display anything.
Case 1
myNumber.Units = sEnteredNumber.SubString(idx, 1)
Textbox1.text = myNumber.Units
This is what i tried doing to display to the user what the ones, tens and so on were but it wouldn't display anything?
Thank you for all the help
|
|
|
|
|
I think there may be a small omission in Steven's code (and I apologise now if I am wrong, Steven!). But I think you need to tell the loop to count backwards, otherwise the loop is going to count up from the length of string - 1 to 0. Try adding 'Step -1' to the end of for statement.
|
|
|
|
|
ok first of all THANK U STEVEN the code worked!
it was just missin that step -1 as u had stated
but the only thing is if i try to enter lets say
123456, just like that
the thousands place will only pick up 1, not 123
do i need to do a test if the number entered is
more then 4 digits long?
thank u everyone!
|
|
|
|
|
Try changing the 'Case Else' statement to this:
Case Else
myNumber.Thousands = sEnteredNumber.SubString(0, Position - 3)
|
|
|
|
|
Thanks it worked and i appreciate all da help!!!
|
|
|
|
|
Could you post the entire code of the loop, and everything inside it, please?
My advice is free, and you may get what you paid for.
|
|
|
|
|
well im at work right now and dont have the code on me
but it was just like stevens code
but the good thing is i got it to work
but the only thing im still trying to figure out
is when a user enters lets say: 12345
the thousands should show 12
but right now it onlh will display 1 only
and the hundreds and ones and tens do work properly
i was thinking maybe an if statement???
the only change i made to stevns case was added
step -1 to the end of the for loop
|
|
|
|
|
Well, if you parse it into an actual integer, instead of using it as a string, it gets easier, using a combination of the "mod" (modulus) and "div" (division without remainder) operators...
123,456 mod 1000 = 456
456 div 100 = 4
So your "hundreds" place is (X mod 1000 div 100)
If you want to get more than just the one digit, like your other replies, skip the "mod" step and just run it through a div.
123,456 div 100 = 123
|
|
|
|
|
You can use String.ToCharArray method. Then use TryParse to check if the character is an integer and then display it.
It's not necessary to be so stupid, either, but people manage it. - Christian Graus, 2009 AD
|
|
|
|