Function doesn't return a value

  • Onderwerp starter Onderwerp starter Fosa
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Fosa

Gebruiker
Lid geworden
4 dec 2012
Berichten
6
hey allemaal! Ik ben nieuw op dit forum!
Ik volg sedert september een informatica opleiding.
Ik heb zelf een code moeten schrijven in vb.net die moest voldoen om postcodes met steden uit een array te vissen en te sorteren...een binaire search

de binaire search zelf moest in een functie geschreven worden en worden teruggestuurd met een "return" naar de module zelf...
Alleen zegt mijn functie nu dat niet alle paden effectief een waarde terugsturen : "Function 'ZoekBinairFunction' doesn't return a value on all code paths. Are you missing a 'Return' statement?"

Het ziet er zo uit

Module GequoteerdeOefening05


Sub Main()


Dim zipcodes() As String = {"1000", "Brussel", "2000", "Antwerpen", "3000", "Leuven", "8000", "Brugge", "9000", "Gent"}
Dim zipcodesAantal As Integer = 5
Dim TeZoekenCodes() As String = {"0500", "1000", "2000", "3000", "4000", "8000", "9000", "9500"}
Dim Searchvalue As String
Dim IndexSearchValue As Integer
Dim lowerbound As Integer = 0
Dim count As Integer = 8
Dim upperbound As Integer = count - 1
Dim keuze1 As New Antwoord
Dim keuze2 As New Antwoord


With keuze1
.Foutmelding = (" werd niet gevonden ")
End With

With keuze2
.Goedemelding = (" is de zipcode van ")
End With



For IndexSearchValue = lowerbound To upperbound
Searchvalue = TeZoekenCodes(IndexSearchValue)
Dim index As Integer = ZoekBinairFunction(zipcodes, Searchvalue)


If index <> -1 Then

Console.WriteLine("════════════════════════════════════════════════════")
Console.WriteLine(Searchvalue & keuze2.Goedemelding & zipcodes(index + 1))
Console.WriteLine("════════════════════════════════════════════════════")
Else


Console.WriteLine("════════════════════════════════════════════════════")
Console.WriteLine(Searchvalue & keuze1.Foutmelding)
Console.WriteLine("════════════════════════════════════════════════════")
End If
Next

Console.ReadLine()

End Sub
Function ZoekBinairFunction(zipcodes() As String, SearchValueFunction As String) As Integer
Dim exhausted As Boolean
Dim found As Boolean
Dim lowerbound As Integer = 0
Dim count As Integer = 9
Dim upperbound As Integer = count - 1




Do Until found OrElse exhausted
Dim index As Integer = (lowerbound + upperbound) \ 2
Dim MinusIndex = -1
If index Mod 2 <> 0 Then
index += 1
End If
found = (SearchValueFunction = zipcodes(index))
exhausted = (upperbound <= lowerbound)
If found = True Then Return index
If exhausted = True Then Return MinusIndex
If Not (found OrElse exhausted) Then
If SearchValueFunction > zipcodes(index) Then
lowerbound = index + 1
Else
upperbound = index - 1
End If
End If




Loop

End Function

End Module

die puntnotatie in mijn antwoord komt van een klasse die ik gemaakt heb...dat is niet echt een probleem...moest er iemand zijn die mij kan zeggen wat ik in mijn functie moet veranderen om die return warning weg te krijgen zou ik heel tevreden zijn

groetjes

fosa
 
Lijkt mij een vrij logische en duidelijke foutmelding.
Waar staat het return-statement in je functie?

En je kunt btw code-tags gebruiken om het overzichtelijk te houden.
 
Lijkt mij een vrij logische en duidelijke foutmelding.
Waar staat het return-statement in je functie?

En je kunt btw code-tags gebruiken om het overzichtelijk te houden.

Hey bedankt voor de reactie...wel mijn return staat in de boolean expressie....maar hij retourneert wel effectief een waarde alleen geeft hij een warning :(
Als mijn boolean true is ...dus gevonden...dan retourneert hij de waarde index in de functie zoekbinair
als hij false is retourneert hij de waarde -1 in de functie zoekbinair

in de module zelf wordt de functie in de variable index opgeslagen en dan vergeleken..dus aan de hand van die boolean krijg ik dan een bepaalde console.writeline...
Weet u mss welke waarde ik nog zou moeten retourneren ? want ik snap echt niet waarom hij die error geeft...heb al gehoord van andere mensen dat dit komt omdat
het in een boolean geschreven is...is dit mogelijk ? x fosa

Code:
Module GequoteerdeOefening05


    Sub Main()


        Dim zipcodes() As String = {"1000", "Brussel", "2000", "Antwerpen", "3000", "Leuven", "8000", "Brugge", "9000", "Gent"}
        Dim zipcodesAantal As Integer = 5
        Dim TeZoekenCodes() As String = {"0500", "1000", "2000", "3000", "4000", "8000", "9000", "9500"}
        Dim Searchvalue As String
        Dim IndexSearchValue As Integer
        Dim lowerbound As Integer = 0
        Dim count As Integer = 8
        Dim upperbound As Integer = count - 1
        Dim keuze1 As New Antwoord
        Dim keuze2 As New Antwoord


        With keuze1
            .Foutmelding = (" werd niet gevonden ")
        End With

        With keuze2
            .Goedemelding = (" is de zipcode van ")
        End With



        For IndexSearchValue = lowerbound To upperbound
            Searchvalue = TeZoekenCodes(IndexSearchValue)

            Dim index As Integer = ZoekBinairFunction(zipcodes, Searchvalue)


            If index <> -1 Then
                
                Console.WriteLine("════════════════════════════════════════════════════")
                Console.WriteLine(Searchvalue & keuze2.Goedemelding & zipcodes(index + 1))
                Console.WriteLine("════════════════════════════════════════════════════")
            Else
                

                Console.WriteLine("════════════════════════════════════════════════════")
                Console.WriteLine(Searchvalue & keuze1.Foutmelding)
                Console.WriteLine("════════════════════════════════════════════════════")
            End If
        Next

        Console.ReadLine()

    End Sub
    Function ZoekBinairFunction(zipcodes() As String, SearchValueFunction As String) As Integer
        Dim exhausted As Boolean
        Dim found As Boolean
        Dim lowerbound As Integer = 0
        Dim count As Integer = 9
        Dim upperbound As Integer = count - 1




        Do Until found OrElse exhausted
            Dim index As Integer = (lowerbound + upperbound) \ 2
            If index Mod 2 <> 0 Then
                index += 1
            End If
            found = (SearchValueFunction = zipcodes(index))
            exhausted = (upperbound <= lowerbound)
            If found = True Then Return index
            If exhausted = True Then Return -1
            If Not (found OrElse exhausted) Then
                If SearchValueFunction > zipcodes(index) Then
                    lowerbound = index + 1
                Else
                    upperbound = index - 1
                End If
            End If

            




        Loop

    End Function

End Module
 
Ik denk moest ik de boolean kunnen wegwerken en expliciet op het einde kan schrijven

return index
return -1

dat dan mijn probleem opgelost zou zijn. Maar natuurlijk mogen die waarden alleen doorgestuurd worden als de boolean dit toelaat...
daarbij ook nog eens als de 2 boolean waardes niet gevonden worden...( if not found orelse exhausted) dan hangt daar ook weer een if en een else vanaf....

Kzit ook nog maar in mijn eerste lessen programmeren...kzou bijgod nie weten hoe ik die 2 boolean waardes die een if else structuur hebben zowel op hun true als op hun false kan wijzigen zodat mijn returns niet
in de booleans worden verwerkt....Als de returns in de booleans het probleem zijn natuurlijk...

Niemand die deze .net sukkelaar uit zijn miserie kan helpen ? :p

groetjes
fosa
x
 
Als ik dat 'keuze'-gedoe weghaal, werkt het prima:
[CPP]Module Module1
Sub Main()
Dim zipcodes() As String = {"1000", "Brussel", "2000", "Antwerpen", "3000", "Leuven", "8000", "Brugge", "9000", "Gent"}
Dim zipcodesAantal As Integer = 5
Dim TeZoekenCodes() As String = {"0500", "1000", "2000", "3000", "4000", "8000", "9000", "9500"}
Dim Searchvalue As String
Dim IndexSearchValue As Integer
Dim lowerbound As Integer = 0
Dim count As Integer = 8
Dim upperbound As Integer = count - 1

For IndexSearchValue = lowerbound To upperbound
Searchvalue = TeZoekenCodes(IndexSearchValue)
Dim index As Integer = ZoekBinairFunction(zipcodes, Searchvalue)
If index <> -1 Then
Console.WriteLine("════════════════════════════════════════════════════")
Console.WriteLine(Searchvalue & " is de zipcode van" & zipcodes(index + 1))
Console.WriteLine("════════════════════════════════════════════════════")
Else
Console.WriteLine("════════════════════════════════════════════════════")
Console.WriteLine(Searchvalue & " werd niet gevonden")
Console.WriteLine("════════════════════════════════════════════════════")
End If
Next
Console.ReadLine()
End Sub
Function ZoekBinairFunction(ByVal zipcodes() As String, ByVal SearchValueFunction As String) As Integer
Dim exhausted As Boolean
Dim found As Boolean
Dim lowerbound As Integer = 0
Dim count As Integer = 9
Dim upperbound As Integer = count - 1

Do Until found OrElse exhausted
Dim index As Integer = (lowerbound + upperbound) \ 2
If index Mod 2 <> 0 Then
index += 1
End If
found = (SearchValueFunction = zipcodes(index))
exhausted = (upperbound <= lowerbound)
If found = True Then Return index
If exhausted = True Then Return -1
If Not (found OrElse exhausted) Then
If SearchValueFunction > zipcodes(index) Then
lowerbound = index + 1
Else
upperbound = index - 1
End If
End If
Loop
End Function
End Module[/CPP]

Maar het is niet bepaald overzichtelijke/mooie code.
Een verkorte en beter leesbare versie:

[CPP]Module Module1
Sub Main()
Dim zipcodes() As String = {"1000", "Brussel", "2000", "Antwerpen", "3000", "Leuven", "8000", "Brugge", "9000", "Gent"}
Dim TeZoekenCodes() As String = {"0500", "1000", "2000", "3000", "4000", "8000", "9000", "9500"}
For Each code As String In TeZoekenCodes
Dim i As Integer = ZoekBinairFunction(zipcodes, code)
If i > -1 Then ''//Als-ie gevonden is
Console.WriteLine("Code '" & code & "' hoort bij: '" & zipcodes(i) & "'.")
Else ''//Niet gevonden
Console.WriteLine("Code '" & code & "' is niet gevonden.")
End If
Next
Console.ReadKey()
End Sub

Function ZoekBinairFunction(ByVal zipcodes() As String, ByVal SearchValueFunction As String) As Integer
Dim retVal As Integer = -1
''//Ieder oneven item in de lijst
For i As Integer = 1 To zipcodes.Length Step 2
If zipcodes(i - 1) = SearchValueFunction Then ''//Gevonden
retVal = i
Exit For
End If
Next
Return retVal
End Function
End Module[/CPP]
 
Bedankt JoZ1 voor je snelle reactie en je hulp.

En het is inderdaad een feit als je deze code gewoon opent als een vb file...dus eigenlijk gewoon voor te kijken welke code erin staat...dan komt de warning er niet...

Pas op...ik heb nooit gezegd dat mijn script niet werkte hoor ;) het programma doet het goed ;) hij doet wat ik vraag en mijn resultaat is just fine! Maar ik was gewoon wat geirriteerd door die "warning"

Is altijd leuker om een blanco meldingsvenster te zien dan een geel uitroepingstekentje...maar zoals ze zeggen..."alleen errors maken uit"...alleen vind ik dat niet honderd procent waar...want een warning toont gewoon aan dat mijn code beter kan geschreven worden.

Bedankt voor je overzichtelijke code...Ze is inderdaad veel korter...maar ik kan ze jammer genoeg niet gebruiken omdat ik van mijn opleiding uit bepaalde commando's die jij gebruikt niet mag gebruiken...een "exit for" bevoorbeeld raden ze niet aan...ik wil daarom jouw manier van programmeren niet bekritiseren! je hebt uiteraard wel al tonnen ervaring meer hebben dan gelijk wie. Maar wss zal je je ook wel herrineren vanuit school als een leerkracht iets niet graag ziet...van dit dan ook best niet te doen...gewoon om de leerkracht zijn "willetje" te volgen en geen aftrok punten te krijgen.

maar swat...ik heb mijn taak dan toch afgegevn met de warning...
Mijn leerkracht zei dat een warning niet echt een probleem is...maar dat die gewoon aangeeft dat die warning wel zou kunnen weggewerkt worden moest ik mijn code aanpassen...
Maar het zal ook wel draaien zonder die aanpassing

Dus met andere woorden mag hier dus een slotje op en is mijn probleem opgelost !

Alvast bedankt voor de hulp

groetjes

fosa
 
Ik deel je mening over warnings, deze geven namelijk een indicatie dat er een fout zou kunnen optreden in runtime.
Als programmeur moet je crashes natuurlijk altijd proberen te voorkomen.

En verder is het inderdaad netter om geen exit in een loop te gebruiken.
Gebruik dan bijvoorbeeld zoiets:

[CPP]
Dim end As Boolean = false
Do
i +=2
If zipcodes(i - 1) = SearchValueFunction Then
retVal = i
ElseIf i = Zipcodes.Length
retval = -1
End If
Until (end)[/CPP]

of iets dergelijks.

Je kunt de vraag op opgelost zetten door rechtsonder je eerste bericht op 'Zet status opgelost' te klikken. :)
En ik ben benieuwd naar je cijfer!
 
Laatst bewerkt:
ik zal zeker laten weten hoeveel mijn score is :p! Heel erg bedankt voor de hulp :p!

Het kan zijn dat het wel nog een tijdje duurt...want de leerkracht heeft blijkbaar de gave om taken pas 5 weken later te verbeteren haha :p

ok zal ik zeker doen ;)

grtz
fosa
 
Apart slag volk, die leraren :P
 
haha achja :P de leerkracht geeft in verschillende klassen les...en zowel in dag als avond...dus veel tijd heeft ze niet denk ik ^^

Ben wel blij dat ik voor deze opleiding gekozen heb ! Ik heb programmeren ontdekt door in een curcus te beginnen werken met bat files...

iedereen vond dit pokkesaai in mijn klas...maar ik wou daar echt meer over weten...Dat kriebelde echt om zelfs programmaatjes te shrijven.

Als ik dan editors vroeg voor sites of hyperlinks dan zei mijn toenmalige leraar..."ga dan maar C++ of C# leren" haha :p dus bij deze...maarjah eerste lessen zijn nu vb.net.

Nu nog in de console om de basis te vatten...nog 2 taken en we zitten in de windowsboxes ^^! Ik vind het echt super...alleen soms wat moeilijk met de structuur van hoe het uitgelegd wordt...

Toen de leerkracht ons private en public classes wou uitleggen...begon ze met de setters en getters allemaal uit te schrijven in de toen nog basis code taal die we kenden...iedereen was kei verward haha :P

dan achter een goede 2 lessen zei de leerkracht dat als ge uwen class aanmaakte...En dan gewoon "get" schreef enter en er komt auto set..en dan gewoon u variable van u class gelijkzetten aan u roeping in u module...

en iedereen zo in die klas..."aaaaahnnn ok" :P haha echt super :p dan viel iedereen zijn nikkel ^^! maarjah bonne! hoelang programmeer jij al ? Doe je er iets van werk mee ? Verdient het nog iets als programmeur in een bedrijf ?

grtjs

fosa
 
Ikzelf programmeer slechts 3 jaar - zelf aangeleerd :p
Eerste informaticales heb ik ergens in januari (halfjaarsvak), al denk ik dat het behoorlijk saai wordt...

Volgens mij verdient een (hoogopgeleide) programmeur aardig veel, omdat er een tekort schijnt te zijn.
http://www.intermediair.nl/vakgebie...jaren-groot-tekort-aan-software-ontwikkelaars
http://www.telegraaf.nl/dft/nieuws_dft/20947225/__Tekort_programmeurs_gaat_pijn_doen__.html
http://www.it-executive.nl/headlines/headline/schrijnend_tekort_aan_programmeurs/
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan