JAVA: Return krävs inte på en metod med void?

Permalänk
Inaktiv

JAVA: Return krävs inte på en metod med void?

Jag har märkt att jag inte kan göra

System.out.println();

på en int method

T.ex den här funkar inte

public int sweclockers(int x,int y){ System.out.println(x-y); }

Men public void funkar

public void sweclockers(int x,int y){ System.out.println(x-y); }

// har nyligen börjat med Java

Permalänk
Medlem

Nedan anger du att metoden ska returnera ett värde av typen int. Alltså måste funktionen göra detta.

public int sweclockers(int x,int y){ System.out.println(x-y); }

Nedan har du angivit att metoden har ett returvärde av typen void ("ingenting").

public void sweclockers(int x,int y){ System.out.println(x-y); }

Alltså måste du i första fallet returnera en int (eftersom du angivit att du ska göra det) men i andra fallet behöver du inte göra det eftersom du angivit att du inte kommer returnera ett värde.

Visa signatur

-- Citera mig om ni vill få återkoppling --

Permalänk
Medlem

Det stämmer. När du säger public int sweclockers garanterar du att din metod kommer returnera en int. Om du inte inte gör det så får du kompileringsfel, vilket är bra!

Genom att sätta returtypen till void garanterar du att metoden inte returnerar något värde alls.

Du kan ha en print-sats i din metod definierad med int så länge den efterföljs return med ett int-värde.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

När du skriver public int sweclockers menas int som retur från den metoden.

void i sin tur säger att metoden returnerar ingenting. Testa att returnera x eller y från första metoden.

Permalänk

Du kan även använda
return;
för att stoppa en metod med void som returtyp (dvs. en metod som inte returnerar ett värde).

public void helloReturn(){     System.out.println("Hello");     return;     System.out.println("return!"); }

Om du testkör denna metod kommer med stor sannolikhet utvecklingsmiljön (Eclipse?) att klaga och säga att du har "unreachable code".
Detta kan dock vara bra om du vill avbryta metoden ifall indata är felaktigt.
Exempel på detta:

public void payBills(int cost){     if (cost <= 0){         return;     } //Kod för att betala räkningar }

Om indata är noll eller mindre avbryts metoden av return-satsen. Du kan testa detta genom att skriva en System.out.println("hej"); där koden för att betala räkningar skulle hamna.

Visa signatur

Vill du ha svar från mig bör du citer
Segmentation fault (core dumped)

Permalänk
Medlem

Som de säger ovan så är en metod med Void en metod som inte returnerar något och en metod som har en datatyp, exempelvis Int, returnerar ett värde av den datatypen. När du skriver ut värdet med Printline så är det inte en retur eller så utan bara en utskrift. Hade du tagit med Return x-y eller vad du vill ha så hade det fungerat. Men du får tänka till lite, vill du att metoden ska lägga ihop (eller dra ifrån det ena från det andra) två värden och returnera dem till programmet som anropade metoden, eller vill du att metoden ska skriva ut resultatet och inte returnera något, eller båda delarna?

Standard är att man har en metod som gör något och sen skriver ut resultatet i det anropande programmet, eller med hjälp av en annan metod. Heter din metod Add() eller Substract() så ska den ju bara göra det, inte skriva ut resultatet också liksom. Säg att du har någon form av bankkonto-program, då kanske du har en metod som heter typ PrintCompleteBalance(Customer loggedInCustomer) som kanske lägger ihop alla saldon för de konton som hör till inloggad kund och sen skriver ut dem utan att returnera något. Men även i ett sånt fall så är det normala att man har en metod som lägger ihop och en annan som skriver ut, typ ...PrintLine(GetCompleteBalance(Customer loggedInCustomer)). Refactoring/förenkling av koden är viktigt. Sen skriver man förstås inte ut med PrintLine i grafiska program normalt osv. men det är en annan sak.