Arrayer med primitiva datatyper Pellets_utan_array.java class Pellets_utan_array // Programmet inleds med deklarationer av variabler int pellets_1; int pellets_2; int pellets_3; int pellets_4; int pellets_5; int summa; int antal; float medelvarde; // Därefter tilldelas variablerna värden pellets_1 = 245; pellets_2 = 258; pellets_3 = 257; pellets_4 = 250; pellets_5 = 251; antal = 5; // Summan och medelvärdet beräknas summa = pellets_1 + pellets_2 + pellets_3 + pellets_4 + pellets_5; medelvarde = (float)summa / antal; // Medelvärdet skrivs därefter ut System.out.println("Medelvärde för pelletsvikt: " + medelvarde); Pellets_med_array_1.java class Pellets_med_array_1 // Programmet inleds med deklarationer och initiering // av array och variabler int[] pellets; pellets = new int[5]; int summa=0; int antal=0; float medelvarde=0.0f; // Därefter tilldelas variablerna värden pellets[0] = 245; pellets[1] = 258; pellets[2] = 257; pellets[3] = 250; pellets[4] = 251; //antal = 5; antal = pellets.length; // Summan och medelvärdet beräknas for (int i=0; i < antal;i++) //summa=summa + pellets[i]; summa += pellets[i]; medelvarde = (float)summa / antal; // Medelvärdet skrivs därefter ut System.out.println("Medelvärde för pelletsvikt: " + medelvarde);
Pellets_med_array_2.java class Pellets_med_array_2 // Programmet inleds med deklarationer och initiering // av array och variabler int[] pellets = 245, 258, 257, 250, 251; int summa=0; int antal=0; float medelvarde=0.0f; antal = pellets.length; // Summan och medelvärdet beräknas for (int i=0; i < antal;i++) summa += pellets[i]; medelvarde = (float)summa / antal; // Medelvärdet skrivs därefter ut System.out.println("Medelvärde för pelletsvikt: " + medelvarde); Pellets_med_array_3.java import javax.swing.joptionpane; class Pellets_med_array_3 // Programmet inleds med deklarationer och initiering // av array och variabler int[] pellets = new int[8]; int summa=0; int antal=0; int vikt=9999; int raknare = 0; float medelvarde=0.0f; while (vikt > 0) vikt = Integer.parseInt(JOptionPane.showInputDialog("Ange pelletsvikt. Avsluta med noll (0)")); pellets[raknare++]=vikt; /* Ovanstående programsats kan längre och kanske något tydligare skrivas: pellets[raknare]=vikt; raknare = raknare +1; antal = raknare - 1; System.out.println(antal); // Summan och medelvärdet beräknas for (int i=0; i < antal;i++) summa += pellets[i]; medelvarde = (float)summa / antal; // Medelvärdet skrivs därefter ut JOptionPane.showMessageDialog(null,"Medelvärde för pelletsvikt: " + medelvarde); System.exit(0);
Arrayer med String (referensvariabler / objekt) StringArray.java /* Detta program exemplifierar de grundläggande mekanismerna för att deklarera och intitiera en array med referenser till objekt. Programmet läser först in ett antal namn som vart och ett lagras på en plats i arrayen. Efter avslutad inmatning konkateneras alla strängobjekt till en sträng, med namnen åtskilda av ett "nyradstecken" (dvs, '\n'). Denna sträng presenteras därefter i en dialogruta, varpå programmet avslutas. import javax.swing.joptionpane; class StringArray String[] namn; namn = new String[5]; int index = 0; String indata; String utdata; // Inläsningsloop do indata = JOptionPane.showInputDialog("Skriv in ett namn."); namn[index] = indata; index++; while (index <5); //Utmatning index = index; utdata = new String(); for (int i=0; i < index ;i++) utdata = utdata + namn[i] + '\n'; JOptionPane.showMessageDialog(null, utdata); System.exit(0);
Arrayer av egna objekt Paper.java /* Denna klass beskriver egenskaper för objekt som representerar vetenskapliga artiklar. Attributen utgörs av strängar som beskriver författare, publikationsår, artikeltitel, tidskriftstitel samt volym och nummer inom volymen (issue). Metoder utgörs av set- och getmetoder för tilldelning och hämtning av värden för respektive attribut. class Paper private String author; private String year; private String title; private String journal; private String volume; private String issue; public Paper() public void setauthor(string a) author = new String(a); public String getauthor() return author; public void setyear(string y) year = new String(y); public String getyear() return year; public void settitle(string t) title = new String(t); public String gettitle() return title; public void setjournal(string j) journal = new String(j); public String getjournal() return journal; public void setvolume(string v) volume = new String(v); public String getvolume() return volume;
public void setissue(string i) issue = new String(i); public String getissue() return issue; PaperCollection.java class PaperCollection private Paper[] collection; private int numberofpapers; /* Nedanstående konstruktor reserverar plats i collection-arrayen för det i parametern angivna antalet Paper-objekt. numberofpapers är ett heltalsattribut som håller ordning på det antal Paper-objekt som lagts till collection-arrayen. public PaperCollection(int maxpapers) collection = new Paper[maxPapers]; numberofpapers = 0; /* Nedanstående metod lägger till det Paper-objekt som anges med parametern p. public void addpaper(paper p) collection[numberofpapers] = p; numberofpapers++; /* Nedanstående metod returnerar det Paper-objekt som finns lagrat i arrayen collection på den position som anges av index-parametern. public Paper getpaper(int index) return collection[index]; /* Nedanstående metod returnerar antal Paper-objekt som finns lagrat i collection-arrayen. public int getnumberofpapers() return numberofpapers;
ArtikelSamlingsApp.java class ArtikelSamlingsApp Paper p; PaperCollection pc = new PaperCollection(100); int antalpapers; AvstandsTabell.java class AvstandsTabell private int avstand[][]; private int antalstader; p.setauthor("boroditsky, L."); p.setyear("2000"); p.settitle("metaphoric structuring: understanding time through spatial metaphors"); p.setjournal("cognition"); p.setvolume("75"); p.setissue("2000"); p.setauthor("brown, J. S., & Duguid, P."); p.setyear("1994"); p.settitle("borderline Issues: Social and Material Aspects of Design"); p.setjournal("human-computer Interaction"); p.setvolume("9"); p.setissue("1"); p.setauthor("bødker, S."); p.setyear("1998"); p.settitle("understanding Representation in Design"); p.setjournal("human-computer Interaction"); p.setvolume("13"); p.setissue("2"); antalpapers = pc.getnumberofpapers(); for (int i=0; i < antalpapers; i++) p = pc.getpaper(i); System.out.println(p.getTitle()); public AvstandsTabell(int antal) antalstader = antal; avstand = new int[antalstader][antalstader]; public void setavstand(int fran, int till, int distans) avstand[fran][till] = distans; avstand[till][fran] = distans; public int getavstand(int fran, int till) return avstand[fran][till]; public void skrivuttabell() for (int i=0; i<antalstader; i++)
for (int j=0; j<antalstader; j++) System.out.print(avstand[i][j]+" "); System.out.println(); AvstandsApp.java class AvstandsApp AvstandsTabell atab = new AvstandsTabell(4); atab.setavstand(0, 1, 10); atab.setavstand(0, 2, 40); atab.setavstand(0, 3, 17); atab.setavstand(1, 2, 35); atab.setavstand(1, 3, 10); atab.setavstand(2, 3, 10); atab.skrivuttabell(); Dynamiska arrayer (Vector) Potentiella problem med arrayer: Hur hantera situationer då vi vill lagra fler objekt än vad arrayen är dimensionerad för? Hur hantera situationer då ett objekt ur arrayen ska tas bort? Standardklassen Vector bemöter dessa problem. Citat ur on-linedokumentationen för Java 2 Platform SE v1.4.2: The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector can grow or shrink as needed to accommodate adding and removing items after the Vector has been created. Observera att Vector-objekt endast kan lagra samlingar av referensvariabler (dvs referenser till object). Ett Vector-objekt kan med andra ord inte lagra samlingar av primitiva datatyper. Några centrala metoder: void addelement(object obj)) o Lägger till ett objekt till Vector-objektet void add(int index, Object element) o Lägger till ett objekt på en angiven plats I Vectorobjektet.
Object elementat(int index) o Metoden returnerar det objekt som finns lagrad på den av index angivna platsen. void clear() o Tar bort alla element ur Vector-objektet Object remove(int index) o Tar bort ett specifikt element (lagrat på platsen angiven av index) ur Vector-objektet. int size() o returnerar antalet element som finns lagrat Vector-objektet. PaperCollectionVector.java import java.util.vector; class PaperCollectionVector private Vector collection; public PaperCollectionVector() collection = new Vector(); public void addpaper(paper p) collection.addelement(p); public Paper getpaper(int index) return (Paper)collection.elementAt(index); public int getnumberofpapers() return collection.size(); class ArtikelSamlingsAppVector Paper p; PaperCollectionVector pc = new PaperCollectionVector(); int antalpapers; p.setauthor("boroditsky, L."); p.setyear("2000"); p.settitle("metaphoric structuring: understanding time through spatial metaphors"); p.setjournal("cognition"); p.setvolume("75"); p.setissue("2000"); p.setauthor("brown, J. S., & Duguid, P."); p.setyear("1994"); p.settitle("borderline Issues: Social and Material Aspects of Design"); p.setjournal("human-computer Interaction"); p.setvolume("9"); p.setissue("1"); p.setauthor("bødker, S.");
p.setyear("1998"); p.settitle("understanding Representation in Design"); p.setjournal("human-computer Interaction"); p.setvolume("13"); p.setissue("2"); antalpapers = pc.getnumberofpapers(); for (int i=0; i < antalpapers; i++) p = pc.getpaper(i); System.out.println(p.getTitle()); Övningsuppgifter Övningar med arrayer Övning på arrayer 1 Gör ett program där användaren får mata in ett antal tal. Programmet skall sedan presentera talen i omvänd ordning, det sista talet man matade in skall alltså presenteras först. Exempel: Hur många tal vill du mata in: 5 3 5 2 4 6 Här kommer talen i omvänd ordning: 6 4 2 5 3 Tack och hej, leverpastej Övning på arrayer 2 Gör ett program där användaren kan fråga programmet om veckodagar. T.ex. om man vill veta vad den 5 dagen i veckan heter, så skall programmet svara med 'fredag'. Exempel Vilken dag i veckan är du intresserad av? 5 Ja du, det är en 'fredag'. Övningar på arrayer 3 Gör om programmet ni gjorde förra veckan med Bookmarks så att klassen Favoriter innehåller en array med Bookmark objekt istället för endast fyra objekt.
4. I denna uppgift ska du skapa två klasser och ett program som utnyttjar och demonstrerar dessa klassers användning. Den första klassen ska heta KursMoment och den ska användas för att representera egenskaper hos kursmoment av det slag som vi har på institutionen för informatik. Du avgör själv vilka egenskaper i termer av attribut och metoder som är rimliga och lämpliga att använda. Den andra klassen ska heta KursBlock och ska kunna användas för att representera 20- poängsblock av kursmoment. Annorlunda uttryckt så ska KursBlocksobjekt innehålla samlingar/aggregat av KursMomentsobjekt. Även här avgör du själv vilka egenskaper i termer av attribut och metoder som är rimliga och lämpliga att använda. Klassen bör dock innehålla en metod som heter listamoment och som skriver ut information om de moment som ingår i blocket. 5. Förändra klassen PaperCollection så att det blir möjligt att ta bort en angiven artikel ur samlingen. Förslagsvis kan du göra detta genom att lägga till en metod som heter tabortartikel och där en heltalsparameter anger vilken artikel som ska tas bort. Metoden behöver inte returnerna något värde (dvs, returtypen void). 6. Samma uppgift som ovanstående men för klassen PaperCollectionVector. Utifrån att ha utfört ovanstående två uppgifter, vilken av lagringsalternativen array eller Vector bedömer du lämpligast när antalet element är dynamiskt (dvs element kan komma att läggas till och tas bort successivt över tiden)? Hur motiverar du ditt svar?