Laboration 13, Arrayer och objekt Avsikten med denna laboration är att du ska träna på att använda arrayer. Skapa paketet laboration13 i ditt laborationsprojekt innan du fortsätter med laborationen. Uppgift 1 Komplettera klassen Betyg med kod. Följande gäller: * När metoden inmatning anropas så ska användaren få mata in ett antal betyg. Vilka betyg som ska matas in styrs av innehållet i fältet ämnen. * När metoden statistik anropas så ska betygsstatistik skrivas ut. * Du får gärna lägga till egna metoder i klassen. public class Betyg { private String[] ämnen = {"Matematik","Svenska","Engelska","Idrott", "Bild","Fysik","Biologi","Kemi","Historia","Geografi", "Samhällskunskap","Religionskunskap"; private String[] betyg = new String[ämnen.length]; // Lika många element som ämnen public void inmatning() { // Låt användaren mata in betyget i olika ämnen // Betygen ska vara "IG", "G", "VG" eller "MVG" och lagras i betyg // Den ambitiöse ser till att varje betyg är ett tillåtet betyg public void statistik() { // Beräkna antalet "IG", "G", "VG" resp "MVG". Lagra t.ex. // beräkningarna i 4 olika räknare // Beräkna betygspoäng // Skriv ut betygsstatistik public static void main(string[] args) { Betyg prog = new Betyg(); prog.inmatning(); prog.statistik(); Exempel på programkörning,..., DA129A, Programmering 1 1
Uppgift 2 Skriv ett program vilket 1. Skapar en int-array med 10 element 2. Tilldelar elementen i arrayen slumpvärden i intervallet 100-200. 3. Skriver ut elementen i arrayen med start på det första (skriv en metod som gör detta) 4. Sorterar arrayen 5. Skriver ut elementen i arrayen med start på det första 6. Låter elementen i arrayen byta plats så att det första elementet kommer sist och det sista elementet kommer först. (skriv en metod som gör detta) 7. Skriver ut elementen i arrayen med start på det första Ett körresultat av programmet kan vara så här: 193 167 134 135 187 165 101 162 152 107 101 107 134 135 152 162 165 167 187 193 193 187 167 165 162 152 135 134 107 101 Uppgift 3 I laboration 9 arbetade du med klassen Bostad. Skapa en ny klass, Bostad, i paketet laboration13 och kopiera koden från laboration 9. Låt klassen implementera interfacet Comparable på så sätt att Bostadobjekt sorteras växande med avseende på bostadsyta. Testprogram (glöm ej importera java.util.* och extra.*) String txt = ""; Bostad[] bostäder = new Bostad[5]; bostäder[0] = new Bostad(145,6); bostäder[1] = new Bostad(78,2); bostäder[2] = new Bostad(75,2); bostäder[3] = new Bostad(75,3); bostäder[4] = new Bostad(65,2); java.util.arrays.sort(bostäder); for(int i=0; i<bostäder.length; i++) txt += bostäder[i].tostring()+"\n"; extra.output.meddelande(txt); Uppgift 4 I laboration 9 arbetade du med klassen Vara. Skapa en ny klass, Vara, i paketet laboration13 och kopiera koden från laboration 9. Låt klassen implementera interfacet Comparable på så sätt att Vara-objekt sorteras växande med avseende på varunamnet. Testprogram (glöm ej importera java.util.* och extra.*) String txt=""; Vara[] varor = {new Vara("Standardmjölk", 8.20, 120), new Vara("Crescent", 3500, 4), new Vara("Japp", 7.25, 29), new Vara("Mugg", 27.50, 40), new Vara("Kamera", 1399, 8); Arrays.sort(varor); for(int i=0; i<varor.length; i++) { txt += varor[i].tostring()+"\n"; Output.meddelande(txt); DA129A, Programmering 1 2
Uppgift 5 Skriv klassen AntalRumVaxande vilken ska implementera gränssnittet Comparator. AntalRumVaxande -klassen ska användas vid sortering av Bostad-objekt och se till att Bostadobjekten sorteras med minst antal rum först. Testprogram String txt = ""; Bostad[] bostäder = new Bostad[5]; bostäder[0] = new Bostad(145,6); bostäder[1] = new Bostad(78,2); bostäder[2] = new Bostad(75,2); bostäder[3] = new Bostad(75,3); bostäder[4] = new Bostad(65,2); java.util.arrays.sort(bostäder, new AntalRumVaxande()); for(int i=0; i<bostäder.length; i++) txt += bostäder[i].tostring()+"\n"; extra.output.meddelande(txt); Extrauppgift 1 Skriv klassen AvtagandePris vilken ska implementera gränssnittet Comparator. AvtagandePris-klassen ska användas vid sortering av Vara-objekt och se till att Vara-objekten sorteras med högsta priset först och lägsta priset sist. Testprogram String txt=""; Vara[] varor = {new Vara("Standardmjölk", 8.20, 120), new Vara("Crescent", 3500, 4), new Vara("Japp", 7.25, 29), new Vara("Mugg", 27.50, 40), new Vara("Kamera", 1399, 8); Arrays.sort(varor, new AvtagandePris()); for(int i=0; i<varor.length; i++) { txt += varor[i].tostring()+"\n"; Output.meddelande(txt); Extrauppgift 2 Skriv klassen SortBostad vilken ska implementera gränssnittet Comparator. SortBostad - klassen ska användas vid sortering av Bostad-objekt och se till att Bostad-objekten sorteras med minst antal rum först. Har två bostäder lika många rum ska bostaden med störst yta sorteras först. Testprogram String txt = ""; Bostad[] bostäder = new Bostad[5]; bostäder[0] = new Bostad(145,6); bostäder[1] = new Bostad(78,2); bostäder[2] = new Bostad(75,2); bostäder[3] = new Bostad(75,3); bostäder[4] = new Bostad(65,2); java.util.arrays.sort(bostäder, new SortBostad()); for(int i=0; i<bostäder.length; i++) txt += bostäder[i].tostring()+"\n"; extra.output.meddelande(txt); DA129A, Programmering 1 3
Förslag till lösningar Uppgift 1, inklusive inmatningskontroll public class Betyg { private String[] ämnen = {"Matematik","Svenska","Engelska","Idrott", "Bild","Fysik","Biologi","Kemi","Historia","Geografi", "Samhällskunskap","Religionskunskap"; private String[] betyg = new String[ämnen.length]; // Lika många element som ämnen private String[] grader = {"IG","G","VG","MVG"; private int[] poäng = {0,10,15,20; private int indexof(string txt, String[] texter) { for(int i=0; i<texter.length; i++) if(txt.equals(texter[i])) return i; private String getbetyg(string txt) { String betyg; do { betyg = extra.input.readline(txt); while(indexof(betyg,grader)==-1); return betyg; public void inmatning() { for(int i=0; i<betyg.length; i++) { betyg[i] = getbetyg(ämnen[i]); public void statistik() { int[] stat = new int[grader.length]; String res;; int index, betygspoäng=0; for(int i=0; i<betyg.length; i++) { index = indexof(betyg[i],grader); stat[index]++; // Går bra - inmatningskontroll! betygspoäng += poäng[index]; res="betygsstatistik\n"; for(int i=0; i<grader.length; i++) { res += grader[i]+": "+stat[i]+"\n"; res += "Betygspoäng: "+betygspoäng; extra.output.meddelande(res); public static void main(string[] args) { Betyg prog = new Betyg(); prog.inmatning(); prog.statistik(); DA129A, Programmering 1 4
Uppgift 2 public class Uppgift3 { private void slumpa(int[] array, int min, int max) { for(int i=0; i<array.length; i++) { array[i] = (int)(math.random()*(max-min+1)+min); private void skrivut(int[] array) { for(int i=0; i<array.length; i++) { System.out.print(array[i]+" "); System.out.println(); private void vänd(int[] array) { int temp, sistaindex = array.length-1; for(int i=0; i<array.length/2; i++) { temp = array[i]; array[i] = array[sistaindex-i]; array[sistaindex-i] = temp; public void program() { int[] tal = new int[10]; slumpa(tal,100,200); skrivut(tal); java.util.arrays.sort(tal); skrivut(tal); vänd(tal); skrivut(tal); public static void main(string[] args) { Uppgift3 u3 = new Uppgift3(); u3.program(); Uppgift 3 public class Bostad implements Comparable { private double bostadsyta; private int antalrum; // diverse konstruktorer och metoder public int compareto(object obj) { Bostad bostad = (Bostad)obj; if(bostadsyta<bostad.getbostadsyta()) else if(bostadsyta>bostad.getbostadsyta()) return 1; else return 0; DA129A, Programmering 1 5
Uppgift 4 public class Vara implements Comparable { private String namn; private double pris; private int antal; // diverse konstruktorer och metoder public int compareto(object obj) { Vara vara = (Vara)obj; return namn.compareto(vara.getnamn()); Uppgift 5 import java.util.*; public class AntalRumVaxande implements Comparator { public int compare(object obj1, Object obj2) { Bostad b1 = (Bostad)obj1; Bostad b2 = (Bostad)obj2; int antal1 = b1.getantalrum(); int antal2 = b2.getantalrum(); if(antal1<antal2) else if(antal1>antal2) return 1; else return 0; Extrauppgift 1 import java.util.*; public class AvtagandePris implements Comparator { public int compare(object o1, Object o2) { Vara vara1 = (Vara)o1; Vara vara2 = (Vara)o2; double pris1 = vara1.getpris(); double pris2 = vara2.getpris(); if(pris1<pris2) return 1; else if(pris1>pris2) else return 0; DA129A, Programmering 1 6
Extrauppgift 2 public class SortBostad implements Comparator { private AntalRumVaxande arv = new AntalRumVaxande(); public int compare(object obj1, Object obj2) { int res = arv.compare(obj1, obj2); double bytaa = ((Bostad)obj1).getBostadsyta(); double bytab = ((Bostad)obj2).getBostadsyta(); if(res==0) { if(bytaa<bytab) res = 1; else if(bytaa>bytab) res = -1; return res; DA129A, Programmering 1 7