Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet vid programstart finns det möjlighet att skicka med data till programmet, denna data hamnar i argv Exempel 1: java Test 4.0 argv[0] kommer nu att innehålla 4.0 Exempel 2: java Testar 2 8 argv[0] kommer att innehålla 2 argv[1] kommer att innehålla 8 Mer om arrayer Mer om arrayer forts. En array innehåller en eller ett antal värden (element) av samma typ Att skriva ut längden på en array System.out.print(minArray.length); En array har en fast längd (antal element) Det går inte att ändra längden på en array Elementen ligger på fasta positioner och är åtkomliga via indexeringen Kallas även på svenska lista, vektor eller fält Att skapa en ny array med plats för 10 element: int [] minarray = new int [10]; Variabeln length går EJ att förändra Att initiera en array char [] teckenarray = { T, E, S, T ; // att skriva ut alla element i arrayen // på samma rad System.out.print(teckenArray[0]); System.out.print(teckenArray[1]);.. System.out.print(teckenArray[4]); Kommer utskriften att lyckas?
Booleska operatorer Booleska operatorer forts. Används på villkorsuttryck och variabler operatorerna är!, && och Sanningstabell för &&:! betyder icke && betyder och betyder eller && && && && Lat evaluering tillämpas i java Sanningstabell för : Sanningstabell för! :! är lika med! är lika med && bägge måste vara sanna för minst en måste vara sann för Exempel Strängar och equals int x = 5; int y = 10; double z = 2.50; boolean [] b = new boolean [4]; Hur ska man jämföra om strängen qwe är lika med strängen qwe? qwe == qwe ; b[0] = x < y && z > y; b[1] = x > y && x!= y; b[2] = y > z && z < x; b[3] =![2]; equals fungerar mycket bättre, låt: String a= qwe ; String b= qwe ; Vilka arrayelement innehåller b? ----------------------------------- a.equals(b); b[0] = x < y z > y; b[1] = x > y x!= y; b[2] = y > z z < x; b[3] =![2]; Vilka arrayelement innehåller b?
Arrayer och equals Hur ska man jämföra om 2 arrayer är lika stora och innehåller samma element i samma ordning? Exempel, a[1,2,3] och b[1,2,3] a[1,2,3] == b[1,2,3] Bättre att använda java.util.arrays.equals(a,b) eller java.util.arrays.equals(b,a) Kortare skrivsätt kommer att introduceras senare under kursen Villkorsoperatorn Allmän form <villkor>?<uttryck1>:<uttryck2> Om villkor är utförs uttryck1 Om villkor är utförs uttryck2 Utmärkt att använda vid småsaker, exempelvis att formatera en snygg utskrift int a = 1; System.out.println( Det simmar +a+((a==1)? and : änder )+ på sjön ) if-satsen Generell form: En sats if (villkor) sats; if (x > MAX) x=0; Flera satser if (villkor) if (x1 == x2) { block; System.out.print( lika ); antallika++; if-satsen forts. Generell form Exempel En sats: if (villkor) if (c > MAX) sats1 c = 0; else else sats2 c++; Flera satser: if (villkor) block1 Else block2 if(x1 == x2){ System.out.print( lika ); antallika++; else{ System.out.print( olika ); antalolika++;
Snurror (Loopar) while - snurran Upprepar samma sak flera gånger Gör något med alla element i en array Upprepar något så länge det finns data att arbeta på Utför programmet tills användaren inte vill fortsätta Det finns 3 olika typer av snurror while, gör något så länge ett villkor är uppfyllt for, gör något med varje element i en array do while, gör något så länge villkor är uppfyllt, dock minst en gång Så länge något villkor är uppfyllt utförs en uppgift while(villkor) block (eller sats); Används ofta du man i förväg inte vet hur många gånger det kommer att upprepas int x = 0; While(x <= 5){ System.out.println( Värdet på x är: +x); x++; for - snurran do while snurran Generell form for(initiering ; villkor; uppräkning) block (eller sats) Används ofta då man i förväg vet hur många gånger snurran kommer att upprepas Generell form do block (eller sats) while(villkor) Används när man vill vara säker på att programmet körs minst en gång for(int i = 0 ; i < array.lenght ; i++){ System.out.println(array[i]); do{ //kommandon och/eller satser System.out.println( Hejsan ); while(int i = 0 ; i < 0 ; i++); Används inte lika ofta som while och for snurrorna
Algoritmer Vad är en algoritm? En algoritm är en metod att lösa ett visst problem genom räknande i vid mening. Dvs. genom att manipulera data på ett sådant sätt att en (eller flera) lösningar på ett givet problem genereras. Problem 1: Finns det algoritmer för att hitta ett visst element i en osorterad array? Sökning i en array Förslag på algoritm för att hitta ett visst element m i en osorterad array av godtycklig storlek Jämför m med talen i arrayen, från vänster till höger. Om vi kommer till ett i sådant att m=k vet vi att m förekommer i arrayen, och algoritmen är färdig. Om vi kommer till slutet av arrayen utan att ha kommit till något i sådant att m=k vet vi att m inte förekommer i arrayen. Problem 2: Finns det algoritmer för att sortera en slumpmässigt skapad array? Sortera en array Förslag på algoritm för att sortera en slumpmässigt skapad array av godtycklig storlek Sök reda på det minsta värdet i arrayen och placera det först. Sök sedan igenom hela arrayen utan att bry dig om det första elementet. Fortsätt på detta sätt tills vi kommer till det sista elementet. Nästa föreläsning Mer om algoritmer Metoder och metodanrop Switch satser Rekursiv programmering Skillnad mellan rekursiv och iterativ programmering Läs gärna: JFG: kap 13-18 JSS: kap 3.6-3.8, 4.2, 11