DA7351 Programmering 1 Fält och objekt Tvådimensionella fält Sortera fält Föreläsning 13
DA7351 Programmering 1 Ett program med fält Skriv ett program vilket: Skapar ett fält med 10 heltal (int) Fyller fältet med 10 slumptal, samtliga i intervallet Inget slumptal får förekomma två gånger i fältet. Ev kan en metod, public boolean finns(int tal, int[] fält) vara användbar. Skriver ut innehållet i fältet ArrayEx.java
DA7351 Programmering 1 Fält - Vektorer - Arrays En fält-variabel (referensvariabel) deklareras så här: int[] slumptal; Antalet element i fältet bestäms när fältet skapas: slumptal = new int[1000]; double[] längd = new double[120]; String[] ord = new String[10]; Man kan bestämma innehåll (och därmed storlek) genom initiering: char[] vokaler = {’a’,’e’,’i’,’o’,’u’,’y’,’å’,’ä’,’ö’}; Man kommer åt elementen i fältet genom att ange index: slumptal[7] = (int)(Math.random()*100); längd[0] = 183.4;//Första index är alltid 0 System.out.println(”Tredje vokalen: ”+vokaler[2]); antalTecken = ord[5].length(); Antalet element som fältet rymmer finner man med length. length har man ofta användning av i for-loopar. antalElement = slumptal.length; // antalTecken = 1000; for(int i=0; i<ord.length; i++) { System.out.println(ord[i]); } Slumpfalt.java TestSlumpfalt.java
DA7351 Programmering 1 Ett fält kan innehålla objekt Om man ska lagra information om de anställda i ett företag kan ett fält med objekt vara lösningen. Information om en anställd lagras i objekt av typen Anstalld: Anstalld (namn, lön) – klassen har attributen namn och lön Anstalld[] arbetstagare = new Anstalld[200]; Fältet arbetstagare kan hålla information om maximalt 200 anställda. För varje anställd som ska lagras krävs att ett objekt av typen Anstalld skapas. Referensen till objektet lagras i fältet. arbetstagare[3] = new Anstalld(”Bertil”,17200); arbetstagare -> namn = ”Bertil” lön =
DA7351 Programmering 1 Objekten i fältet fungerar som vanligt Det går bra att komma åt publica attribut och metoder i objektet. Varje element i fältet fungerar som en referens till ett Anstalld-objekt. Anstalld[] arbetstagare = new Anstalld[200]; String namnAnstalld; arbetstagare[3] = new Anstalld(”Bertil”,17200); arbetstagare[5] = new Anstalld(); namnAnstalld = arbetstagare[3].getNamn(); System.out.println(arbetstagare[3].toString()); arbetstagare[5].setNamn(”Anna”); Anstalld.java AnstalldEx.java Anstalld - namn:String - lön:double + Anstalld + Anstalld(String,double) + setNamn(String); + getNamn():String + setLön(double) + getLön():double + toString():String
DA7351 Programmering 1 Tvådimensionella fält Ett fält kan ha flera dimensioner. I detta fall kommer man åt elementen genom flera index-angivelser. Exempel: Tvådimensionellt fält Deklaration av fält med 2 rader, 5 kolumner int[ ][ ] nederbörd = {{1,4,3,2,5},// 2 rader {7,3,3,2,1}};// 5 kolumner double[ ][ ] temperatur = new double[2][5]; Cirkel[ ][ ] cirklar = new Cirkel[2][5]; FlerDim.java
DA7351 Programmering 1 Sortering av fält - klassen Arrays Det finns ett flertal algoritmer för att sortera ett fält, t.ex. Selectionsort, Bublesort och Quicksort. De två första är enklast att implementera men ej så effektiva om fältet är stort (>1000 element). I klassen Arrays finns metoder för sortering av fält med enkla variabler (int, long, double,…). Implementeringen är av typen Quicksort. Man måste importera klassen Arrays från paketet java.util: import java.util.Arrays;// eller import java.util.*; Sedan anropar man metoden sort(ett fält): Arrays.sort(fältnamn); Sorteringen blir alltid växande. Sortering.java
DA7351 Programmering 1 Selectionsort Strategi vid Selectionsort (växande): Titta på elementen i positionerna 0-(fält.length-1) och skifta det minsta elementet med elementet i position 0. Titta på elementen i positionerna 1-(fält.length-1) och skifta det minsta elementet med elementet i position 1. Titta på elementen i positionerna 2-(fält.length-1) och skifta det minsta elementet med elementet i position 2. : Titta på elementen i positionerna (fält.length-2) -(fält.length-1) och skifta det minsta elementet med elementet i position (fält.length-2).
DA7351 Programmering 1 Klassmetod – metoden sort i Selectionsort SelectionSort.java Sortering2.java
DA7351 Programmering 1 Sortera fält med objekt StringSort1.java Person.java PersonSort.java
DA7351 Programmering 1 Comparable - sortera fält med objekt Adress.java AdressSort.java
DA7351 Programmering 1 Comparator - sortera fält med objekt
DA7351 Programmering 1 Comparator - sortera fält med objekt PersonSort2.java AdressSort2.java StringSort2.java