SMD 134 Schematiskt Javaprogram Objektorienterad programmering Dagens agenda: • Typer i Java: primitiva datatyperna, referenstyper • Variabler och variabeltilldelningar med primitiva typer • Konstanter av de olika typerna. • Heltalsräkning och flyttalsräkning. public class KlassNamn{ public static void main (String[] argv){ // Här står vad som skall göras när // programmet exekveras (En sekvens av // programsatser) } // Efter definitionen av main kan det följa // definitioner av andra metoder } • Hanteringen av referenstyper i Java • Användningen av = för att göra tilldelningar av värden till variabler och av == och equals för att jämföra värden • Tre sätt att få in data till ett Javaprogram: hårdlödning, inmatning vid programstart, inhämtning under programexekvering. Peter Lestander Kommentarer i Java Peter Lestander Programsats /** * Detta är ett sätt att skriva en kommentar * som går över flera rader */ • Ett kommando till datorn • Måste ha en sidoeffekt annars är kommandot överflödigt /* Detta är ett annat sätt att skriva en kommentar som går över flera rader */ Exempel på programsatser: // Detta är en enradskommentar pi = 3.141593; namn = “Peter Lestander”; System.out.println(“Hello, World!”); Felaktig programsats: 7+5; hejsan; Peter Lestander Peter Lestander Block Block & Variabler • Ett block omges av { och } • Markerar att ett antal programsatser hör ihop int x = 5; // Exempel på ett block while(x <= 5){ x--; // Samma som x-1 System.out.print("x= "); System.out.println(x); } • Block hjälper till att indentera koden som skrivs • Indentering nödvändig för att kunna läsa och förstå större program • Det kan vara bra att sätta in en variabel i ett block för att kunna använda namnet på variabeln igen int x = 1; int y = 0; { int a = 3; x = 5; y = a + x; } // Skulle y = a + y fungera? y = y + x; System.out.println(y); // Vad skrivs ut? Peter Lestander Ett programexempel • Man kan skapa hur ”djupa” block man vill i Java /** * Detta program hälsar på både * engelska och svenska */ public class Hejsan{ public static void main(String[] argv){ {{{{ // engelsk hälsning System.out.println("Hello, World!"); }}}} {{{{ // svensk hälsning System.out.println("Hej, världen!"); }}}} } } Peter Lestander Peter Lestander Variabler • En variabel är ett namngivet utrymme i datorns minne som kan innhålla ett värde av en viss typ • En variabel måste deklareras innan den kan användas Exempel: // deklarering int heltal ; float reellt_heltal; char tecken; // tilldelning heltal = 10; reellt_heltal = 25.98; tecken = ’X’; Peter Lestander Tilldelningssats Variabelnamn (Identifierare) • Allmän form <typ> <variabelnamn> = <uttryck> • Variabeln av en viss typ till höger om ”=” tilldelas värdet av yttryck • Kan göras direkt vid deklarationen, kallas initiering av variabeln Exempel: int antalHundar = 25; int x = 325+175; char tecken = ’R’; boolean b = true; double abc = 1.125; • Får bestå av bokstäver (inkl åäöÅÄÖ,_$) samt siffror • Första tecknet måste vara en bokstav,_ eller $ • Ej reserverade ord Giltiga helTal _lame4u_ $dollar dettaÄrEnRänare Peter Lestander Namnkonventioner Ogiltiga hel.tal 2lame4u €uro boolean Peter Lestander Primitiva datatyper • Använd tydliga namn så alla kan förstå Typ Storlek • Tydligare variabelnamn ju längre ifrån deklarationen de skall användas byte short int long 8 16 32 64 float double 32 bitar 64 bitar Bra Variabelnamn antalBilar counter rad årtal Mindre bra gnorf kalle x blarf • Börja alltid med liten bokstav • Vid sammansatta ord börjar alltid det andra ordet med stor bokstav Exempel: ettRiktigtLångtVariabelNamn Peter Lestander bitar bitar bitar bitar char 16 bitar boolean 8 bitar boolean har bara 2 värden, true eller false Peter Lestander Konstanter Några problem Heltalskonstanter 0 124 -3456789 Teckenkonstanter ’a’ ’A’ ’@’ Vad kommer att hända? int x = 1000000 * 1000000; Java svarar: -727379968 Flyttalskonstanter 12.50 3.141592654 0.00025 -1.125 Booleska konstanter true false Vad kommer att hända? int x = 100000; int y = x*x/x; Java svarar: 14100 Teckenkonstanter, se unicode tabell http://thomas.prydslauritsen.dk/nyttigt/ascii-table.html OBS, alltid decimalpunkt i flyttal, inte komma Peter Lestander Arrayer Vad kommer att hända? int x = 10; int y = x/3; int z = y*3; Java svarar: 9 Är inte z = x = 10? Peter Lestander Arrayer fortsättning • Ett antal variabler av samma typ lagrade i samma enhet • Att deklarera en arrayvariabel av typen int int [] a; • Om en array har längden k, så är första minnesplatsen i arrayen 0 och sista k-1 • Att skapa en array av storleken 5 och ”knyta” a till den a = new int[5]; • Notation för array, antag att vi skapat en array av storleken k och tilldelat den namnet a Första platsen Andra platsen Tredje platsen . . . Sista platsen a[0] a[1] a[2] a[k-1] Peter Lestander • Värdet av a är inte ett värde utan en referens till arrayen som skapats i datorns minne • Att ge den andra platsen i arrayen ett värde a[1] = 25; • Att direkt deklarera och initialiseras en array variabel. int [] a = new int[10] Peter Lestander Strängar Strängar fortsättning • En sträng är en ändlig följd av tecken • Att konkatenera en sträng, att slå ihop 2 strängar till en görs med operatorn + • En sträng är oförändrelig • Strängar i Java representeras av klassen String, här finns en stor mängd metoder för att manipulera med strängar Strängkonstanter: ”Kalle Anka” ”smd134” ”12345” ”--{---@” Exempel 1: ”Kalle ”+”och ”+”Kajsa ”+”Anka”; Blir: Kalle och Kajsa Anka Exempel 2: ”Svaret ”+”är ”+(100-25); Blir: Svaret är 75 Att skapa en sträng: String namn = ”Kalle Anka”; Peter Lestander Aritmetiska operatorer • +, - och * används som i matematiken • / ska man vara lite försiktig med Peter Lestander Aritmetiska operatorer forts.. int x = 3; int y = 6: int z; – 9.0 / 5.0 = 1.8 men 9 / 5 = 1 • % modulo, heltalsrest – 9 / 5 = 1 men 9 % 5 = 4 – resten vid heltalsdivision • = är en tilldelning, x = 9.0 / 5.0 innebär att x tilldelas vädet 1.8 Peter Lestander z = y – x + x * y + y / x; Java kommer att tilldela z = 23 De matematiska precedensreglerna gäller, om osäker använd paranteser z = y – x + (x * y) + (y / x) Peter Lestander ++ och -- ++ och – fortsättning • Ärvda från programmeringsspråket C • Kan användas före eller efter en uppräkningsbar variabel int x = 0; int y = 0; int x = 5; int y; y = x++; Y = ++x; • Mycket användbara • Kort skrivsätt • Lätt att missbruka //motsvarar y = x, x = x + 1 //motsvarar x = x + 1, y = x y = ++x + ++x; // y får här värdet 3 // x får värdet 2 Peter Lestander Villkor och villkorsoperatorn • Ett sätt att ta reda på om något är sant eller falsk, true eller false x x x x x x == y != y < y > y <= y >= y x lika med y? x inte lika med y? x mindre än y? x större än y? x mindre eller lika med y? x större eller lika med y? Exempel: public class BoolTest{ public static void main(String[] argv){ int a=10; int b=11; System.out.println(a==b); } } Peter Lestander Hårdlödning • Ett sätt att få in data till ett java program • Ej speciellt användbart Exempel 1 public class Räkna{ public static void main(String[] argv){ int x=1; int y=2; System.out.println(x+y); } } Exempel 2 public class KalleAnka{ public static void main(String[] argv){ System.out.println(”Kalle ”+”Anka”); } } Java svarar: false Peter Lestander Peter Lestander Torkels LasIn program Inläsning vid programstart • Inläsning under programexekvering • java <klassnamn> <data> • Finns länk på hemsidan (uppdateras under em) • Klassen Integer Java API JDK 1.3.1 • metoden man använder är parseInt(String s) • Mycket bra sätt att läsa in heltal, flyttal och strängar • Metoder i Torkels program för att läsa in data till ett program, läsHeltal,läsFlyttal och läsSträng Exempel public class MataIn{ public static void main(String[] argv){ int test; test=LasIn.läsHeltal("Test :"); System.out.print(”Test är nu: ”+test); } } • Samma för double, klassen Double • metoden är parseDouble(String s) Exempel public class DataDirekt{ public static void main(String[] argv){ int indata=Integer.parseInt(argv[0]); int x = 10; System.out.println(indata+x); } } >java DataDirekt 25 35 Peter Lestander Ett snyggt sätt import java.io.*; Peter Lestander Nästa föreläsning • if satser, for satser, while satser public class TestaLäsaIn { public static void main(String[] argv) throws Exception { int tal; //------ Input from keyboard-------// InputStreamReader isr; BufferedReader keyb; String instring; isr = new InputStreamReader(System.in); keyb = new BufferedReader(isr); //--------------------------------- // • introduktion av algoritmer genom sökning och sortering av arrayer • användning av for, if och while för att implementera algoritmer • strukturerad programmering • booleska operatorer System.out.print("Skriv ett tal: "); instring = keyb.readLine(); tal=Integer.valueOf(instring).intValue(); System.out.println("Du skrev: "+tal ); Läs gärna: } JFG kap 11-12, 14-16 JSS kap 3.2, 3.4-3.6, 3.7, 6.2 } Peter Lestander Peter Lestander