maximum index less then list size

Status
Niet open voor verdere reacties.

verhaba

Gebruiker
Lid geworden
8 feb 2008
Berichten
79
hallo
Ik heb een opdracht. de user geeft een getal in (bv 9) en een basis getal (bv 17). de waarden moeten als volgt opgeslagen worden. Op index 0 staat 17 (1 x 17), op index 1 staat 34 (2 x 17), op index 2 staat 51 ( 3 x 17) tot index 8. Daar staat 153 (9 x 17). Nadien vraagt de console een zoek getal. Staat die in de array dan moet de console dit ook weergeven. Indien niet ook natuurlijk. Maar meer text en uitleg hieronder.

Programmaverloop:

Count ? : 9
Base Value ? : 17
Search Value ? : 136
136 is the 8 multiple of 17
Search Value ? : 135
135 is not found in the first 9 multiples of 17
Search Value ? : 17
17 is the 1 multiple of 17
Search Value ? :

bij het uitvoeren mijn code (zie verder) krijg ik volgende boodschap.
"Make sure that the maximum index on a list is less than the list size."

De bedoeling is dat de reden van de boodschap snap. Niet zo zeer om jullie me de oplossing te geven, hoor. Bedoeling is dat er wat uit leer hé. Thx manne... en vrouwen ook natuurlijk... als die er zijn.

[VB]
Sub Main()

Console.WriteLine("count?")
Dim count As Integer = Console.ReadLine()
Console.WriteLine("Base Value?")
Dim baseValue As Integer = Console.ReadLine()
Dim upperbound As Integer = count - 1
Dim calc(upperbound) As Integer

' array initiëren en opvullen met de waarden.
Dim index As Integer
For index = 0 To upperbound
calc(index) = (baseValue * (index + 1))
'de array uitprinten
Console.Write(calc(index) & " ")
Next

Console.Write("Search value?")
Dim searchvalue As Integer = Console.ReadLine()
For index = 0 To upperbound
Dim found As Boolean = False
index = -1
Do Until found
index += 1
found = (calc(index) = searchvalue)
Loop

If found Then
Console.WriteLine(calc(index) & " is found in the first " & index & " multiples of " & count)
Else
Console.WriteLine(searchvalue & "is not found in the first " & upperbound & " multiples of " & count)
End If

Next

Console.ReadLine()
End Sub

[/VB]
 
Code:
Sub Main()
        Dim base As Integer = 17, _
            count As Integer = 9, _
            myarr(count - 1) As Integer

        For index As Integer = 0 To UBound(myarr)
            myarr(index) = (index + 1) * base
        Next

        For index As Integer = 0 To UBound(myarr)
            Console.WriteLine(CStr(myarr(index)))
        Next

        Console.ReadKey()
    End Sub
 
Code:
Sub Main()
        Dim base As Integer = 17, _
            count As Integer = 9, _
            myarr(count - 1) As Integer

        For index As Integer = 0 To UBound(myarr)
            myarr(index) = (index + 1) * base
        Next

        For index As Integer = 0 To UBound(myarr)
            Console.WriteLine(CStr(myarr(index)))
        Next

        Console.ReadKey()
    End Sub

Ik heb het ondertussen gevonden... allé bijna gevonden. de eerste keer schrijft hij correct bv:
136 is found in the first 7 multiples of 9, maar nadien schrijft hij 9 maal:
136 is found in the first -1 multiples of 9, wat eigenlijk niet correct is...
Miljaar... soit;
dit is een deel van de code:


Sub Main()

Console.Write("count? ")
Dim count As Integer = Console.ReadLine()
Console.Write("Base Value? ")
Dim baseValue As Integer = Console.ReadLine()
Dim upperbound As Integer = count - 1
Dim calc(upperbound) As Integer

' array initiëren en opvullen met de waarden.
Dim index As Integer
For index = 0 To upperbound
calc(index) = (baseValue * (index + 1))
'de array uitprinten ter controle
'Console.Write(calc(index) & " ")
Next
Console.WriteLine()
Console.Write("Search value? ")
Dim searchvalue As Integer = Console.ReadLine()

Dim found As Boolean = False
For numbers = 0 To upperbound
index = -1
Do Until found
index += 1
found = (calc(index) = searchvalue)
Loop
If found Then
Console.WriteLine(searchvalue & " is found in the first " & index & " multiples of " & count)
Else
Console.WriteLine(searchvalue & "is not found in the first " & upperbound & " multiples of " & count)
End If
Next
Console.ReadLine()
End Sub
 
Do Until found
index += 1
found = (calc(index) = searchvalue)
Loop
/QUOTE]

Hier ga je ervan uit dat de waarde altijd gevonden moet worden, toch ? (zou eigenlijk een oneindige loop moeten zijn wanneer het getal niet gevonden wordt)

Code:
do until index = ubound(calc)
  index += 1
  found = calc(index) = searchvalue
loop

Weet verder niet of het de fout is, heb alleen nog even snel op internet gekeken voordat ik in bad ga :p
 
probleem blijft nog steeds.

Het is enorm handig als je leert debuggen. Zoek daar eens wat meer informatie over op. Dan kan je nagaan waar je de fout in gaat. (morgen is het weer weekend, zal de code dan wel even werkend maken. Is niet veel werk :))

edit: heb hem nu maar herschreven. Volgens mij doet het onderstaande wat jij zou willen. Als dit niet zo is laat dan even weten wat ik verkeerd doe.

Code:
    Sub Main()
        Dim base As Integer = 17, _
            count As Integer = 9, _
            myarr(count - 1) As Integer, _
            searchValue As Integer = 136, _
            found As Boolean


        For index As Integer = 0 To UBound(myarr)
            myarr(index) = (index + 1) * base
        Next index

        For index As Integer = 0 To UBound(myarr)
            If myarr(index) = searchValue Then
                Console.WriteLine(CStr(myarr(index)) & " found at index " & CStr(index))
                found = True
                Exit For
            End If
        Next index

        If Not found Then
            Console.WriteLine(CStr(searchValue) & " is not found in the first " & CStr(UBound(myarr)) & " multiples of " & CStr(count))
        End If

        Console.ReadKey()
    End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan