vb.net - assigning integers to array as user enters them -
i working on problem in text book. interface allows user enter number of each car type sold. add total button should use array accumulate numbers sold each car type. should display in lblnew , lblused total of each sold. there way use loop add new integers arrays intnew() , intused() without knowing how many numbers user enter? (im concerned intnew() right now)
public class frmmain dim total integer = 0 private sub frmmain_load(sender object, e eventargs) handles me.load ' fill list box values lstcartype.items.add("new") lstcartype.items.add("used") lstcartype.selectedindex = 0 end sub private sub btnadd_click(sender object, e eventargs) handles btnadd.click ' adds amount sold appropriate total ' declare accumulator array , variables dim intnew() integer = {} 'dim intused integer = {} dim index integer = 0 dim intsold integer dim inttotal integer ' update array value if lstcartype.text = "new" integer.tryparse(txtsold.text, intsold) redim preserve intnew(index + 1) intnew(index) = intsold index += index end if ' display array values intcolumn integer = 0 intnew.getupperbound(0) inttotal = intnew(intcolumn) + inttotal next lblnew.text = inttotal.tostring txtsold.focus() end sub private sub btnexit_click(sender object, e eventargs) handles btnexit.click me.close() end sub private sub txtsold_enter(sender object, e eventargs) handles txtsold.enter txtsold.selectall() end sub private sub txtsold_keypress(sender object, e keypresseventargs) handles txtsold.keypress ' allow numbers , backspace if (e.keychar < "0" orelse e.keychar > "9") andalso e.keychar <> controlchars.back e.handled = true end if end sub
i edited per steves idea, i'm getting few errors: expression of type 'object', not collection type(line 42). option strict on disallows late binding(line 36), object strict on requires variable declarations have clause(line 25). turn strict off heard not supposed normally. ideas how work? heres updated code:
option explicit on option strict on option infer off public class frmmain dim total integer = 0 private sub frmmain_load(sender object, e eventargs) handles me.load ' fill list box values lstcartype.items.add("new") lstcartype.items.add("used") lstcartype.selectedindex = 0 end sub private sub btnadd_click(sender object, e eventargs) handles btnadd.click ' adds amount sold appropriate total ' declare accumulator array , variables dim intnew = new list(of integer)() 'dim intused integer = {} dim index integer = 0 dim intsold integer dim inttotal integer ' update array value if lstcartype.text = "new" if integer.tryparse(txtsold.text, intsold) intnew.add(intsold) end if end if ' display list values each intvalue integer in intnew inttotal += intvalue next lblnew.text = inttotal.tostring txtsold.focus() end sub private sub btnexit_click(sender object, e eventargs) handles btnexit.click me.close() end sub private sub txtsold_enter(sender object, e eventargs) handles txtsold.enter txtsold.selectall() end sub private sub txtsold_keypress(sender object, e keypresseventargs) handles txtsold.keypress ' allow numbers , backspace if (e.keychar < "0" orelse e.keychar > "9") andalso e.keychar <> controlchars.back e.handled = true end if end sub
end class
yes, instead of array should use list(of integer) doesn't need redimmed everytime add new value.
dim intnew list(of integer) = new list(of integer)() dim inttotal integer if lstcartype.text = "new" if integer.tryparse(txtsold.text, intsold) intnew.add(intsold) end if end if ' display list values each intvalue in intnew inttotal += intvalue next lblnew.text = inttotal.tostring
as list(t) has many advantages against array. fixed size of array more visible, use list(t) @ same way array discover size or access single value index
dim countelements = intnew.count dim secondvalue = intnew(1)
and ienumerable extensions?
dim inttotal = intnew.sum() 'bye bye explicit loop lblnew.text = inttotal.tostring
Comments
Post a Comment