Laboration 9 Avsikten med denna laboration är att du ska jobba vidare med klasser. Uppgifterna går ut på att skriva metoder och att skriva konstruktorer. Laborationen bygger vidare på laboration 8. Skapa paketet laboration9 innan du fortsätter på denna laboration. Kopiera dina lösningar från paketet laboration8 till paketet laboration9. Saknar du någon lösning så finns lösningar längst bak i laboration 8. Glöm inte att ändra paketet i samtliga filer till Uppgift 1 Komplettera klassen Bostad med nedanstående metoder. Men testa metoderna en åt gången tills de fungerar. public double kvmperrum() Metoden ska räkna ut antalet kvadratmeter bostadsyta per rum för aktuellt objekt. Resultatet av beräkningen ska returneras. Bostad b = new Bostad(); b.setbostadsyta(110); b.setantalrum(5); System.out.println(b.kvmPerRum); Ger utskriften: 22.0 public double jämförbostadsyta(bostad b) Metoden ska jämföra två bostäder, aktuellt objekt och inparametern b, avseende deras yta. Beräkna skillnaden mellan ytan i aktuellt objekt och ytan i b. Returnera skillnaden. Detta innebär att * om aktuellt objekt har störst yta så returneras ett positivt värde (>0). * om bostäderna har samma yta så returneras 0. * om bostaden b har störst yta så returneras ett negativt värde (<0). Extrametoder public Bostad copybostad() Metoden ska returnera en kopia av aktuellt objekt. - bostadsyta:double - antalrum:int Bostad + setbostadsyta(double) + setantalrum(int) + getbostadsyta():double + getantalrum():int + tostring():string + kvmperrum() : double +jämförbostadsyta(bostad b) : double + copybostad() : Bostad + flestrum(bostad b) : Bostad public Bostad flestrum(bostad b) Metoden ska returnera en referens till den bostad som har flest rum. Om de har lika många rum ska referens till aktuellt objekt returneras. DA129A, Programmering 1 1
Uppgift 2 Komplettera klassen Bostad med följande konstruktorer: public Bostad() Denna konstruktor ska sätta bostadsytan till 100 m 2 och antalet rum till 4. public Bostad(double inbostadsyta, int inantalrum) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. Bostad bostad1 = new Bostad(); Bostad bostad2 = new Bostad(55,2); System.out.println(bostad1.toString()); System.out.println(bostad2.toString()); Ger utskriften Bostad med ytan 100.0 m2 och 4 rum. Bostad med ytan 55.0 m2 och 2 rum. - bostadsyta:double - antalrum:int Bostad + Bostad() + Bostad(double, int) + setbostadsyta(double) + setantalrum(int) + getbostadsyta():double + getantalrum():int + tostring():string + kvmperrum() : double +jämförbostadsyta(bostad b) : double + copybostad() : Bostad + flestrum(bostad b) : Bostad Uppgift 3 Komplettera klassen Vara med följande metoder: public boolean slut() Metoden ska returnera true om det finns minst ett exemplar av varan. Annars ska metoden returnera false. Extrametod public Vara billigast(vara v) Metoden ska returnera en refere3ns till den billigaste varan. Komplettera klassen Vara med följande konstruktorer: public Vara(String namn, double pris, int antal) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. public Vara(Vara v) Denna konstruktor ska föra v:s värde (på attributen) till attributen i klassen. Denna kosntruktor kallas ibland för kopieringskonstruktor. Det nya objektet blir en kopia av objektet som används som argument. Vara vara1 = new Vara("Standardmjölk", 8.20, 120); Vara vara2 = new Vara(vara1); vara2.setpris(8.45); System.out.println(vara1.toString()); System.out.println(vara2.toString()); Ger utskriften Standardmjölk: Pris=8.20 kr Antal=120 Standardmjölk: Pris=8.45 kr Antal=120 2
Uppgift 4 I denna uppgift ska du arbeta med klassen Anstalld. Kör testprogrammet nedan. Som du ser blir utskriften inte så snygg. Anstalld a1=new Anstalld(); String res = ""; a1.setnamn("anna Olsson"); a1.setarbetsgivare("sigma"); a1.setlön(25700); res = a1.tostring(); extra.output.meddelande(res); Lägg till metoden public String tostring() i klassen. Metoden ska returnera en sträng på formen: Namn: Sven Austavsson Arbetsgivare: LKAB Lön: 23500.0 kr Antalet decimaler i lönen beror på input. Men det blir alltid minst en decimal då double görs om till sträng. Kör programmet igen. Nu ska utskriften bli snyggare. Förklaring till att den första programkörningen fungerar får du i föreläsningarna om arv om några veckor. Lägg till följande konstruktorer i klassen: public Anstalld(String namn, String arbetsgivare, double lön) Denna konstruktor ska föra över parametrarnas värde till attributen i klassen. public Anstalld(String namn) Denna konstruktor ska skapa objektet anropa konstruktorn Anstalld(String, double). public Anstalld(String namn, double lön) Denna konstruktor ska skapa objektet anropa konstruktorn Anstalld(String, String, double). Anstalld a1=new Anstalld("Rut Andersson"); Anstalld a2=new Anstalld("Ragnar Olsson",20000); Anstalld a3=new Anstalld("Ragnar Olsson","Gambro", 23000); String res = a1.tostring() + "\n" + a2.tostring() + "\n" + a3.tostring(); extra.output.meddelande(res); Ger körresultatet 3
Lösningsförslag public class Bostad { private double bostadsyta; private int antalrum; /* Konstruktorer ***********************************************************/ public Bostad() { bostadsyta = 100; antalrum = 4; public Bostad(double bostadsyta, int antalrum) { this.bostadsyta = bostadsyta; this.antalrum = antalrum; /* Setters och getters + tostring *******************************************/ public void setbostadsyta(double yta) { bostadsyta = yta; public void setantalrum(int antal) { antalrum = antal; public double getbostadsyta() { return bostadsyta; public int getantalrum() { return antalrum; public String tostring() { return "Bostad med ytan " + bostadsyta + " m2 och " + antalrum + " rum."; /* Ordinarie uppgifter ******************************************************/ public double jämförbostadsyta(bostad b) { return bostadsyta - b.getbostadsyta(); public double kvmperrum() { return bostadsyta/antalrum; /* Extrauppgifter ***********************************************************/ public Bostad flestrum(bostad b) { if(antalrum<b.antalrum) return b; return this; public Bostad copybostad() { return new Bostad(bostadsyta, antalrum); 4
import extra.*; public class Vara { private String namn; private double pris; private int antal; /* Konstruktorer *******************************************************/ public Vara(String namn, double pris, int antal) { this.namn = namn; this.pris = pris; this.antal = antal; public Vara(Vara v) { this(v.getnamn(), v.getpris(), v.getantal()); /* Setters och getters + tostring **************************************/ public void setnamn(string varunamn) { namn = varunamn; public void setpris(double varupris) { pris = varupris; public void setantal(int antalvaror) { antal = antalvaror; public String getnamn() { return namn; public double getpris() { return pris; public int getantal() { return antal; public String tostring() { return namn + ": Pris=" + Output.format(pris,0,2) + " kr Antal=" + antal; /* Ordinarie uppgifter *******************************************************/ public boolean slut() { return antal==0; /* Extrauppgifter **********************************************************/ public Vara billigast(vara v) { if(pris<=v.getpris()) return this; return v; 5
public class Anstalld { private String namn; private String arbetsgivare; private double lön; public Anstalld() { // Arbetsgivare: Okänd, Lön: 0 public Anstalld(String namn) { this(namn, 0); // Arbetsgivare: Okänd public Anstalld(String namn, double lön) { this(namn,"okänd arbetsgivare",lön); public Anstalld(String innamn, String inarbetsgivare, double inlön) { namn = innamn; arbetsgivare = inarbetsgivare; lön = inlön; public void setnamn(string n) { namn = n; public void setarbetsgivare(string a) { arbetsgivare = a; public void setlön(double l) { lön = l; public String getnamn() { return namn; public String getarbetsgivare() { return arbetsgivare; public double getlön() { return lön; public double årslön() { return 12*lön; public boolean sammaarbetsgivare(anstalld a) { return arbetsgivare.equals(a.getarbetsgivare()); public String tostring() { return "Namn: " + namn + " Arbetsgivare: " + arbetsgivare + " Lön: " + lön + " kr"; 6