Skrivet av JungelTarzan:
Hej Bruum, tack för svaret. Men tyvärr så vill jag försöka utan globala variabler.
Jag har uppdaterat koden lite.
Kan jag returnera 3 värden? Kan jag göra på något enklare sätt?
Det finns ett annat sätt som ur ren ett objektorienterat synsätt är bättre på alla vis: returnera ett objekt.
Den enklare varianten här är att du bestämmer att ditt program alltid kommer returnera tre summor och bygger utifrån det. Här är exempelkod:
public class Resultat3 {
private final int summa1;
private final int summa2;
private final int summa3;
public Resultat3(int summa1, int summa2, int summa3) {
this.summa1 = summa1;
this.summa2 = summa2;
this.summa3 = summa3;
}
public int getSumma1() { return summa1; }
public int getSumma2() { return summa2; }
public int getSumma3() { return summa3; }
}
låt Summa returnerar en instans av denna klass:
...
int s1 = v1[0] + v1[1] + v1[2];
int s2 = v2[0] + v2[1] + v2[2];
int s3 = v3[0] + v3[1] + v3[2];
return new Resultat3(s1, s2, s3);
Detta har fördelar då det kommer till bland annat typsäkerhet: Det går exempelvis inte att försöka komma åt ett resultat som inte finns; koden kompilerar inte om du försöker nå resultat.getSumma4().
En nackdel är att du måste definiera en separat klass beroende på antalet resultat du vill returnera.
Du kan förlänga detta koncept genom att skapa en specifik typ för inmatningsvärden också:
public class Rad3(int värde1, int värde2, int värde3) { ... }
samt
public class Matris3(Rad3 rad1, Rad3 rad2, Rad3 rad3) { ... }
Genom att arbeta med dessa istället för vektorer har du nu effektivt flyttat ett potentiellt problem från runtime till compile time; det vill säga, du kan garantera att ditt program fungerar om det går att kompilera.
Om du är intresserad av typsäkerhet och renhet i kod rekommenderar jag dig att titta på Scala, ett programmeringsspråk som kompilerar till Java-bytekod. Scala har inbyggt stöd för vad som kallas "tuplar" vilket är precis vad du är ute efter. Koden skulle då se ut så här (rakt översatt, det går att skära ner en hel del i den):
object test2 extends App {
def utskrift(rad1: (Int, Int, Int),
rad2: (Int, Int, Int),
rad3: (Int, Int, Int)) {
val (summa1, summa2, summa3) = Summa(rad1, rad2, rad3)
println(s"\t${rad1._1}\t${rad1._2}\t${rad1._3}\t$summa1")
println(s"\t${rad2._1}\t${rad2._2}\t${rad2._3}\t$summa1")
println(s"\t${rad3._1}\t${rad3._2}\t${rad3._3}\t$summa1")
}
def Summa(rad1: (Int, Int, Int),
rad2: (Int, Int, Int),
rad3: (Int, Int, Int)) = {
val s1 = rad1._1 + rad1._2 + rad1._3
val s2 = rad2._1 + rad2._2 + rad2._3
val s3 = rad3._1 + rad3._2 + rad3._3
(s1, s2, s3)
}
utskrift((3, 4, 2),
(6, 8, 9),
(1, 3, 5))
}