SMD 134 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. Schematiskt Javaprogram 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. Kommentarer i Java /** * Detta är ett sätt att skriva en kommentar * som går över flera rader */ /* Detta är ett annat sätt att skriva en kommentar som går över flera rader */ // Detta är en enradskommentar Programsats Ett kommando till datorn Måste ha en sidoeffekt annars är kommandot överflödigt Exempel på programsatser: pi = 3.141593; namn = ; System.out.println( Hello, World! ); Felaktig programsats: 7+5; hejsan;
Block 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 Block & Variabler 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? Ett programexempel Variabler Man kan skapa hur djupa block man vill i Java /** * Detta program hälsar på både * engelska och svenska */ public class Hejsan{ {{{{ // engelsk hälsning System.out.println("Hello, World!"); {{{{ // svensk hälsning System.out.println("Hej, världen!"); 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 // deklarering int heltal ; float reellt_heltal; char tecken; // tilldelning heltal = 10; reellt_heltal = 25.98; tecken = X ;
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 Får bestå av bokstäver (inkl åäöåäö,_$) samt siffror Första tecknet måste vara en bokstav,_ eller $ Ej reserverade ord int antalhundar = 25; int x = 325+175; char tecken = R ; boolean b = true; double abc = 1.125; Giltiga heltal _lame4u_ $dollar dettaärenränare Ogiltiga hel.tal 2lame4u uro boolean Namnkonventioner 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 Bra Variabelnamn Mindre bra antalbilar gnorf counter kalle rad x årtal blarf Börja alltid med liten bokstav Vid sammansatta ord börjar alltid det andra ordet med stor bokstav byte 8 bitar short 16 bitar int 32 bitar long 64 bitar float 32 bitar double 64 bitar char 16 bitar boolean 8 bitar ettriktigtlångtvariabelnamn boolean har bara 2 värden, true eller false
Konstanter Några problem Heltalskonstanter Teckenkonstanter 0 a 124 A -3456789 @ Flyttalskonstanter Booleska konstanter 12.50 true 3.141592654 false 0.00025-1.125 Teckenkonstanter, se unicode tabell http://thomas.prydslauritsen.dk/nyttigt/ascii-table.html OBS, alltid decimalpunkt i flyttal, inte komma Vad kommer att hända? int x = 1000000 * 1000000; Java svarar: -727379968 Vad kommer att hända? int x = 100000; int y = x*x/x; Java svarar: 14100 Vad kommer att hända? int x = 10; int y = x/3; int z = y*3; Java svarar: 9 Är inte z = x = 10? Arrayer Arrayer fortsättning Ett antal variabler av samma typ lagrade i samma enhet Om en array har längden k, så är första minnesplatsen i arrayen 0 och sista k-1 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] Att deklarera en arrayvariabel av typen int int [] a; Att skapa en array av storleken 5 och knyta a till den a = new int[5]; 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]
Strängar Strängar fortsättning En sträng är en ändlig följd av tecken 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 --{---@ Att konkatenera en sträng, att slå ihop 2 strängar till en görs med operatorn + 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 ; Aritmetiska operatorer Aritmetiska operatorer forts.. +, - och * används som i matematiken / ska man vara lite försiktig med 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 int x = 3; int y = 6: int z; 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)
++ och -- ++ och fortsättning Ärvda från programmeringsspråket C Kan användas före eller efter en uppräkningsbar variabel int x = 5; int y; y = x++; //motsvarar y = x, x = x + 1 Y = ++x; //motsvarar x = x + 1, y = x Mycket användbara Kort skrivsätt Lätt att missbruka int x = 0; int y = 0; y = ++x + ++x; // y får här värdet 3 // x får värdet 2 Villkor och villkorsoperatorn Ett sätt att ta reda på om något är sant eller falsk, true eller false x == y x lika med y? x!= y x inte lika med y? x < y x mindre än y? x > y x större än y? x <= y x mindre eller lika med y? x >= y x större eller lika med y? public class BoolTest{ int a=10; int b=11; System.out.println(a==b); Java svarar: false Hårdlödning Ett sätt att få in data till ett java program Ej speciellt användbart Exempel 1 public class Räkna{ int x=1; int y=2; System.out.println(x+y); Exempel 2 public class KalleAnka{ System.out.println( Kalle + Anka );
Torkels LasIn program Inläsning under programexekvering Finns länk på hemsidan (uppdateras under em) 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{ int test; test=lasin.läsheltal("test :"); System.out.print( Test är nu: +test); Inläsning vid programstart java <klassnamn> <data> Klassen Integer Java API JDK 1.3.1 metoden man använder är parseint(string s) Samma för double, klassen Double metoden är parsedouble(string s) Exempel public class DataDirekt{ int indata=integer.parseint(argv[0]); int x = 10; System.out.println(indata+x); >java DataDirekt 25 35 Ett snyggt sätt import java.io.*; 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); //--------------------------------- // Nästa föreläsning if satser, for satser, while satser 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