Archief - Java - Returnstatement niet mogelijk met if-else?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Prodigy

Legacy Member
Ik ben bezig met een methode te schrijven om een rekening te ledigen die dit afgehaalde bedrag retourneert met volgende code:

Code:
public int ledigRekening()
{
        if(saldo > 0)
        {int hoeveelheidOpname = saldo;
        saldo = 0;
        return hoeveelheidOpname;
        }
    
    else
    {
        System.out.println("U kan geen geld opnemen. Saldo is te laag.");
    }
}

Ik wil dus een waarschuwing creëren wanneer het saldo 0 of kleiner bedraagt, maar de compiler geeft hier een foutmelding 'missing returnstatement', mag ik dus geen returnstatement nestelen in een if-else structuur?

Cycloon

Legacy Member
Je moet zowel in de if en de else een int returnen. Nu ga je slechts in 1 geval een int terug geven. Als ik me niet vergis zal je sowieso ook nog eens op het einde een definitieve return moeten doen voor de compiler. Sowieso slaat die methode op niks en kan je bv beter met een exceptie werken als het saldo te laag is.

Gurdt

Legacy Member
De Javacompiler is slim genoeg om bij een if-else structuur te herkennen dat in beide clauses een return-statement staat. Als ge dus in die else-clause nog een return-statement plaatst is het ok.

Maar ik vind ook - zoals Cycloon zegt - dat het beter op een andere manier op te lossen is :)

Chemicus

Legacy Member
Ik vermoed dat dit een beginnende java gebruiker is en exceptie nog wat te moeilijk zijn.

Een eenvoudige oplossing:

public int ledigRekening()
{
int hoeveelheidOpname = -1;
if(saldo < 0)
{
System.out.println("U kan geen geld opnemen. Saldo is te laag.");
}
else
{
int hoeveelheidOpname = saldo;
saldo = 0;
}
return hoeveelheidOpname;
}

Hierbij wordt -1 geretourneerd als het saldo te laag is, dit kun je gebruiken in de aanroepende methode om te weten of er een boodschap is uitgeschreven of niet en daarop te reageren.

MilM

Legacy Member
Eigenlijk is dit niet volledig correct om te zeggen dat er zowel in de IF als ELSE lus een return statement moet staan (kan de TS verwarren).

Wel is het zo dat er altijd een INT teruggegeven moeten worden. Er mag dus geen flow zijn waarbij er geen return statement tegengekomen wordt (wat hier het geval is indien saldo <= 0).

voltje

Legacy Member
De methode slaat inderdaad op niets...
Het voorbeeld van chemicus is ook nogal bizar...

Waarom zou je, indien het saldo 0 is, toch geld kunnen laten opnemen?


public int ledigRekening(){
if(saldo>0)
{
int hoeveelHeidOpname = saldo;
saldo =0;
return hoeveelHiedOpname;
}
throw new Exception("Saldo is te laag"); (Hier kan je ook gwn System.out.println doen...)
}

Een else is hier, voor zo ver ik weet overbodig? Je kan het wel schrijven maar zonder else blijft de functionaliteit hetzelfde...

Indien de if voorwaarde is voldaan, zal hij nooit meer de code uitvoeren buiten de if, omdat er toch wordt gereturnt?

Om nu deze code uit te voeren doe je:

try{
ledigRekening();
}
catch(Exception ex){
System.out.println(ex.Message);
}

Let op, het kan zijn dat er syntax fouten zijn, java is al even geleden...

Jerre Muesli

Legacy Member
In dit geval zou ik het zelfs nog anders doen:

Code:
    public double ledigRekening() throws NotEnoughMoneyException
    {
        double opnameHoeveelheid = 0d;
        
        if(this.saldo > 0d)
        {
            opnameHoeveelheid = this.saldo;
            this.saldo = 0d;
        }
        else
        {
            throw new NotEnoughMoneyException("U kan geen geld opnemen. Saldo is te laag.");
        }
        
      return opnameHoeveelheid;
    }

MilM

Legacy Member
Gezien zijn initiële vraag denk ik echt niet dat de topicstarter zich voorlopig moet focussen op het gebruik van Errors voor dit probleem ...

Jerre Muesli

Legacy Member
tja hij kan er maar wat van leren he...:unsure:
ik zou blij zijn om anderen hun aanpak te kunnen bekijken

voltje

Legacy Member
Alleszinds, wanneer ge een if... else hebt waarbij dat je in de if iets returnt moet ge zien dat er ofwel een return is in de else, of wel een return is buiten de if...else

Gewoon een beetje logisch nadenken, de functie moet ALTIJD iets returnen, dus wanneer je uw code limiteerd door een if structuur, zal het niet in alle gevallen returnen... Daardoor dus ook returnen in de else, of buiten de if.

Venometal

Legacy Member
Prodigy zei:
Ik ben bezig met een methode te schrijven om een rekening te ledigen die dit afgehaalde bedrag retourneert met volgende code:

Code:
public int ledigRekening()
{
        if(saldo > 0)
        {int hoeveelheidOpname = saldo;
        saldo = 0;
        return hoeveelheidOpname;
        }
    
    else
    {
        System.out.println("U kan geen geld opnemen. Saldo is te laag.");
    }
}

Ik wil dus een waarschuwing creëren wanneer het saldo 0 of kleiner bedraagt, maar de compiler geeft hier een foutmelding 'missing returnstatement', mag ik dus geen returnstatement nestelen in een if-else structuur?

Lol Tim, good old times éh :D
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan