6 svar
267 visningar
Lord_L 4 – Fd. Medlem
Postad: 6 maj 2021 08:55

Skriva egna metoder

Hej! Jag går programmering 1 i gymnasiet och vi har fått några uppgifter där vi ska skriva egna metoder. Jag har löst vissa frågor men behöver lite hjälp med andra. 

3. Skriv en metod String maxOrd(String ord1, String ord2) som returnerar det längsta av två inmatade ord.

Använd metoden i ett program där man frågar användaren efter två ord och sedan skriver ut det längsta ordet.

Så här har jag skrivit mitt svar: 

static String metod3(String ord1, String ord2){
if (ord1.length() > ord2.length()){
return ord1;
}
else if (ord1.length() < ord2.length()){
return ord2;
}
return null;
}

Jag förstår inte riktigt vad "return null;" betyder då det kom upp som ett felmeddelande men metoden funkar. Jag undrar om det finns ett bättre sätt att skriva på? 

Laguna Online 30479
Postad: 6 maj 2021 09:03

Menar du att det kom ett felmeddelande när du körde programmet och matade in två ord som var lika långa?

Frågan man ska besvara först är vad som ska hända om orden är lika långa. Att returnera null är ok, men då måste den anropande koden vara beredd på det, och inte försöka skriva ut resultatet utan att testa först om det är null.

En annan variant är att man bara väljer ett av orden, t.ex. ord1. Då blir den anropande koden enklare.

Annars ser det bra ut. Men du kan använda kodverktyget (som ser ut som {;}) för att skriva in kod och behålla indenteringen, så är den lättare att läsa.

Men den skulle heta maxOrd, inte metod3?

Lord_L 4 – Fd. Medlem
Postad: 6 maj 2021 09:11
Laguna skrev:

Menar du att det kom ett felmeddelande när du körde programmet och matade in två ord som var lika långa?

Frågan man ska besvara först är vad som ska hända om orden är lika långa. Att returnera null är ok, men då måste den anropande koden vara beredd på det, och inte försöka skriva ut resultatet utan att testa först om det är null.

En annan variant är att man bara väljer ett av orden, t.ex. ord1. Då blir den anropande koden enklare.

Annars ser det bra ut. Men du kan använda kodverktyget (som ser ut som {;}) för att skriva in kod och behålla indenteringen, så är den lättare att läsa.

Men den skulle heta maxOrd, inte metod3?

Det kom ett felmeddelande som sa att jag skulle lägga till "return null" för att få metoden att funka. 

Så ska jag börja med att skriva:

if (ord1.length()==ord2.lenght)

return null; 

och sedan fortsätta metoden?

Jag skrev metod3 eftersom min lärare ville att man skulle numrera alla så, alltså metod1, metod2, metod3 etc.

Tack för ditt svar!

Laguna Online 30479
Postad: 6 maj 2021 09:59

Jaha, du hade inte return null där först, men kompilatorn klagade. Då var det för att en metod som ska returnera något alltid måste göra det.

Du behöver inte ha med ett test för om längderna är lika, för om de båda första testen är falska så är ju längderna lika.

Lord_L 4 – Fd. Medlem
Postad: 6 maj 2021 10:13
Laguna skrev:

Jaha, du hade inte return null där först, men kompilatorn klagade. Då var det för att en metod som ska returnera något alltid måste göra det.

Du behöver inte ha med ett test för om längderna är lika, för om de båda första testen är falska så är ju längderna lika.

Okej! Då förstår jag.

Tack så mycket!

EnApelsin 180
Postad: 6 maj 2021 13:43

Om du vill göra det ännu snyggare och det inte spelar någon roll vilken som returneras ifall båda orden är lika långa kan du skriva:

 

String maxOrd(String ord1, String ord2){

  if (ord1.length() < ord2.length()){

     return ord2;

}

     return ord1;

}

 

return ord1 kommer då att ligga inom en "osynlig" else-sats som bara körs ifall if-satsen inte körs, dvs om orden är lika långa eller ord2 < ord1. 

Fermatrix 7841 – Fd. Medlem
Postad: 6 maj 2021 14:30

Det går att förkorta ännu mer men det kanske blir mindre läsbart.

	public static String maxOrd(String s1, String s2) {
		return s1.length() > s2.length() ? s1 : s2;
	}
Svara
Close