object automatisch asl string?

Pagina: 1
Acties:

  • witchdoc
  • Registratie: Juni 2000
  • Laatst online: 18-08 16:32
Kan iemand me zeggen waarom ik met onderstaand progsel als ik een aantal getallen ingeef deze getallen niet gesorteert krijg? Werkt een object altijd als string dan? En waarom werkt het wel als'k "Dim lijst() As Object = {20, 44, 18, 42, 3}" i.pv. manuele invoer gebruik?


uitvoer:

Geef het aantal elementen:
10
Geef de elementen die gesorteerd moeten worden.
10
5
2
01
20
03
5
4
30
12
Ongesorteert:
10 5 2 01 20 03 5 4 30 12

Gesorteert:
01 03 10 12 2 20 30 4 5 5


Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Module Module1

    Sub Main()
        'Dim lijst() As Object = {"Jan", "Jos", "Koen", "Dirk", "Jef"}
        'Dim lijst() As Object = {20, 44, 18, 42, 3}
        Dim lijst() As Object
        Dim intaantal, inttel As Integer

        Console.WriteLine("Geef het antal elemente: ")
        intaantal = Console.ReadLine
        ReDim lijst(intaantal - 1)
        Console.WriteLine("Geef de elementen die gesorteerd moeten worden.")
        For inttel = 0 To intaantal - 1
            lijst(inttel) = Console.ReadLine
        Next

        Dim objreeks As Object
        Console.WriteLine("Ongesorteert:")
        For Each objreeks In lijst
            Console.Write(objreeks.ToString & vbTab)
        Next

        Console.WriteLine()
        bubblesort(lijst, lijst.GetLength(0) - 1)
        Console.WriteLine("Gesorteert:")
        For Each objreeks In lijst
            Console.Write(objreeks.ToString & vbTab)
        Next
        Console.Read()

    End Sub

    Public Sub bubblesort(ByRef rij() As Object, ByVal lngindex As Long)

        Dim inttel, inttel2 As Integer
        Dim objhulp As Object

        For inttel = lngindex - 1 To 0 Step -1
            For inttel2 = 0 To inttel
                If rij(inttel2 + 1) < rij(inttel2) Then
                    objhulp = rij(inttel2)
                    rij(inttel2) = rij(inttel2 + 1)
                    rij(inttel2 + 1) = objhulp
                End If
            Next
        Next
    End Sub

End Module

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Omdat dit BASIC is en je bij manuele invoer strings invoert en hij daar later ook op sorteert maar dat weet je niet (omdat dit BASIC is) en alles wordt helemaal in de war gegooid. Veel succes verder.
edit:
:P trouwens
En concreet: zorg ervoor dat je input op een numerieke manier worden gesorteerd.zorg ervoor dat je input numeriek wordt

[ Voor 34% gewijzigd door Ericston op 05-04-2003 11:19 ]


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Je lijst definieren als Integer in plaats van Object. Misschien moet je dan nog een Val() om je Console.ReadLine heen zetten, maar zoveer weet ik nou ook weer niet van VB.
* WildernessChild schaamt zich dat hij dit al weet

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • witchdoc
  • Registratie: Juni 2000
  • Laatst online: 18-08 16:32
Ericston schreef op 05 April 2003 @ 11:15:
zorg ervoor dat je input numeriek wordt[/edit]
Dat snap'k al wel. CINT voor de console.read maar mij is verteld dat een object alles aankan. Logisch zou ik't vinden dat een getal dan ook een getal is en geen tekst. Maja, wie ben ik. :-/
Anders kan je toch net zo goed een string gebruiken? Kan je ook alles inzetten.

  • witchdoc
  • Registratie: Juni 2000
  • Laatst online: 18-08 16:32
WildernessChild schreef op 05 April 2003 @ 11:28:
Je lijst definieren als Integer in plaats van Object. Misschien moet je dan nog een Val() om je Console.ReadLine heen zetten, maar zoveer weet ik nou ook weer niet van VB.
* WildernessChild schaamt zich dat hij dit al weet
als'k dat object een integer maak krijg'k problemen als'k jantje en jefke wil sorteren he

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Ericston schreef op 05 April 2003 @ 11:15:
Omdat dit BASIC is en (blah blah) (omdat dit BASIC is) en (blah blah)
Je schijnt er wel van overtuigd te zijn dat het BASIC is, terwijl het toch vrij duidelijk is dat het Visual Basic .NET is. BASIC kent geen type Object, geen keyword Module, geen Public, en is al helemaal geen OO. De stelling 'dat je nooit zeker kan weten dat het een string is', gaat voor VB.NET zowiezo niet op, omdat .NET strongly typed is. En zelfs in BASIC kun je types forceren. Sterker nog, ik meen me te herinneren dat als je geen type opgeeft het een single precision floating point getal wordt. Maar zeker is dat als je $ (string dus) opgeeft als type, het zeker geen Integer wordt.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
poohbeer schreef op 05 April 2003 @ 11:30:
[...]
maar mij is verteld dat een object alles aankan. Logisch zou ik't vinden dat een getal dan ook een getal is en geen tekst. Maja, wie ben ik. :-/
Anders kan je toch net zo goed een string gebruiken? Kan je ook alles inzetten.
Ik weet natuurlijk niks van dat Object type (dat kennelijk gewoon een soort Variant of union is). Maar het lijkt erop dat het alfabetisch wordt gesorteerd in combinatie met de lesser than operator omdat er een string in zit, en dat is dus de schuld van die strong typing (waar Korben het over had) want "01" == "01" en nooit 1. En omdat Object hier dus geen typecast uitvoert (misschien zou het dat wel moeten doen, maar heb er dus geen ervaring mee) blijft het ook een string, ook al kan de string die je erin stopt een integer zijn.
Wat je dus moet doen is er gewoon vanuitgaan dat het een Variant is, en dan bij je vergelijking kijken of je er een integer van kan maken of dat je te maken hebt met een string (moet je wel opletten bij het vergelijken van een string en een integer). HTH en succes.
Woei, heb ik weer, een (uitgeslapen) BASIC-predikant. :)
Je hebt gelijk, het grootste deel van mijn post was blah blah (vooral dat over die strings). Was een beetje in een melige bui. Sorry poohbeer. :)
Pagina: 1