KTH 2D1310 Programmeringsteknik
Magnus Rosells övningar
Nada
2D1310 Övningsanteckningar

Övning 4


Viktiga ord

klass, instansmetod, klassmetod, konstruktormetod, this, instans/objekt,instansvariabel, klassvariabel, lokalvariabel, static, public, private
Titta på programmet från slutet av förra övningen. Uppgift: Skriv om rektangelprogrammet så att man kan skapa instanser av klassen Rektangel och använd en sådan för att åstadkomma samma sak. import java.io.*; class Rektangel{ static PrintStream utdata = System.out; // instansvariabler private int höjd; private int längd; // Konstruktor public Rektangel(){} // Konstruktor public Rektangel(int höjd, int längd){ this.höjd = höjd; this.längd = längd; } // instansmetod public int area(){ return höjd*längd; } // instansmetod public void rita(){ int h = höjd; // lokal variabel while(h-- >0){ ritaRad(längd); } } // instansmetod public void ritaRad(){ int l = längd; // lokal variabel while(l-- >0) utdata.print("*"); utdata.println(); } } class Uppgift{ static PrintStream utdata = System.out; public static void info(){ System.out.println("Välkommen till rektangelprogrammet!"); System.out.println("Programmet beräknar arean av en rektangel"); System.out.println("med heltalssidor och ritar ut den på skärmen!"); } public static void main(String[] args) throws IOException{ info(); utdata.print("Rektangelns höjd: "); String höjdString = System.in.readLine(); int höjd = Integer.parseInt(höjdString); utdata.print("Rektangelns längd: "); String längdString = System.in.readLine(); int längd = Integer.parseInt(längdString); Rektangel r = new Rektangel(höjd, längd); r.rita(); int area = r.area(); utdata.println("Rektangeln har arean: "+area+" a.e."); } }

static, public, private


Uppgift: Skriv en klass Bok som beskriver böcker. Varje bok ska ha egenskaperna författare, titel och stulen. Stulen ska vara sann om boken är stulen (från biblioteket som vi ska bygga upp) och falsk annars. Då böckerna skapas är de naturligtvis inte stulna. Dessutom ska det finnas en metod läs() som man använder om man vill läsa boken. Då en bok läses är det 25% risk att den blir stulen.

Hakparentesvektor (array)

datatyp[] variabelnamn; // deklaration ex: int[] vec; variabelnamn = new datatyp[heltal]; // skapar vektor // med längden heltal // och tilldelning till variabeln ex: vec = new int[5]; variabelnamn[heltal] = värde av datatyp; // tilldelning till // en av vektorns platser ex: vec[2] = 12; variabelnamn[heltal]; // åtkomst av en av vektorns platser ex: System.out.println(vec[1]); En hakparentesvektor numreras från 0 till längden minus ett. ex: System.out.println(vec.length); // skriver ut längden av vektorn vec // vec.length innehåller vektorns längd
Uppgift: Vad gör programdelen? int[] vec = new int[7]; for(int i = 0; i < vec.length; i++) vec[i] = i; for(int i = 0; i < vec.length; i++) System.out.println(2 * vec[i]); Rita minnesbild!
Uppgift: Skriv ett program som skapar fyra böcker, enligt klassen Bok vi just skrivit. Lägg de fyra böckerna i en array. Skriv ut titeln på alla böcker som inte är stulna. public class Register{ public static void main(String[] args){ Bok[] böcker = new Bok[4]; böcker[0] = new Bok("Mumintrollen","Jansson"); böcker[1] = new Bok("Flugornas herre","Golding"); böcker[2] = new Bok("Javaboken","Franzen"); böcker[3] = new Bok("Das Kapital","Marx"); for(int i = 0; i < böcker.length; i++){ if(!böcker[i].geStulen()) System.out.println(böcker[i].geTitel()); } } }

Bibliotek

Titta på följande program när ni gör lab4. Principen är mycket lik, nästan bara olika namn. Klassen Bok behövs naturligtvis också. public class Huvudklass{ public static void main(String[] args){ Bibliotek biblan = new Bibliotek(); while(!biblan.allaStulna()){ biblan.läsAlla(); biblan.status(); } } } class Bibliotek{ private static final int maxAntalBöcker = 1000; private static int antalBöcker = 4; private Bok[] böcker; public Bibliotek(){ böcker = new Bok[maxAntalBöcker]; böcker[0] = new Bok("Mumintrollen","Jansson"); böcker[1] = new Bok("Flugornas herre","Golding"); böcker[2] = new Bok("Javaboken","Franzen"); böcker[3] = new Bok("Das Kapital","Marx"); } public boolean allaStulna(){ int böckerKvar = 0; for(int i = 0; i < antalBöcker; i++) if(!böcker[i].geStulen()) böckerKvar++; if(böckerKvar == 0) return true; else return false; } public void läsAlla(){ for(int i = 0; i < antalBöcker; i++) böcker[i].läs(); } public void status(){ for(int i = 0; i < antalBöcker; i++){ System.out.print(böcker[i].geTitel()+"\t"); if(böcker[i].geStulen()) System.out.println("\t Snodd"); else System.out.println("\t Ledig"); } System.out.println(); } } Rita minnesbild över programmet!

Särfall - Exceptions

Då vissa metoder körs uppstår särfall (problem) som det inte är självklart hur de bör behandlas inuti metoderna. Särfallet kastas (throws) i stället vidare av metoden till den metod som anropade den. I denna metod har man kanske mer information om hur man bör behandla problemet. I sådana fall fångar man särfallet (catch) och gör något åt det. Annars kastar man vidare det till nästa metod (den metod som anropar den metod som anropar den metod i vilken särfallet uppstod) osv. Om den första metoden i anropskedjan (i vårt fall för det mesta main()) kastar särfallet innebär det att man struntar i problemet helt och hållet. För att kasta ett särfall skriver man throws NamnetPåSärfallet sist i metodhuvudet. readLine() kastar ett IOException; här följer ett exempel på hur man kastar ett sådant. class Exempel{ static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); public static void metod() throwsIOException{ stdin.readLine(); // anrop till readLine() } public static void main() throws IOException{ metod(); // anrop till metoden metod() } } Hur man fångar särfall tar vi senare.

Vector

Hakparentesvektorer (arrayer) skapas med en viss längd som inte kan ändras. Klassen Vector beskriver en vektor som inte har den begränsningen. I sådana vektorer kan bara stoppa in referensdatatyper (alltså inte primitiva datatyper). Man kan dessutom lagra olika typer av objekt i vektorn, tex en String följd av flera Bok-objekt (om man skrivit en klass Bok). // För att kunna använda Vector måste man importera den import java.util.Vector; // Skapa vektor (deklarera variabel och instansiera) Vector vec = new Vector(); // Skriva ut vektorns längd System.out.println(vec.size()); // Stopppa i nytt element (hamnar sist) vec.add(element); // Plocka ut elementet (som har datatypen Data) på plats x. Data d = (Data) vec.elementAt(x);

^ Upp till Alla övningar.


Sidansvarig: <rosell@nada.kth.se>
Senast ändrad 14 januari 2003
Tekniskt stöd: <webmaster@nada.kth.se>