Föreläsning 1-2: Kursinformation och introduktion till Java och programmering Eva Blomqvist eva.blomqvist@liu.se Linköpings universitet Sweden October 14, 2013 1
Innehåll Kursinfo Varför programmering? Vad är ett program? grundläggande begrepp Hur fungerar Java miljö och struktur Ett första programexempel i Java Eclipse en programmeringsmiljö (IDE) Vi börjar programmera Standardutmatning Variabler Enkla datatyper och operationer på dem October 14, 2013 2
Kursinfo http://www.ida.liu.se/~725g61/index.sv.shtml Eva Blomqvist eva.blomqvist@liu.se Examinator, föreläsare och labbhandledare October 14, 2013 3
Övergripande regler NI är ansvariga för att hålla er uppdaterade om vad som händer i kursen All information finns på kurshemsidan Nyheter och ändringar dyker upp som nyheter på hemsidan och i akuta fall som mail på kurslistan Kontrollera kurshemsidan minst en gång per vecka för uppdateringar! Kontrollera mail från kurslistan dagligen! Vi svarar på mail och frågor så snabbt vi kan - har ni inte fått svar på 1 vecka - skicka en påminnelse och/eller kontakta en annan lärare i kursen! October 14, 2013 4
Kursinfo - kursöversikt Kursen har tre delar Del 1 grundläggande programmering med Java Fram till slutet av november 6 Fö + lektioner och 4 labbar deadline 6/12 (men följ gärna "veckoplan") Individuell dugga ("på papper") 3 chanser under del 1 + uppsamlingstillfälle i slutet av kursen Del 2 objektorienterad programmering + mer avancerad Javaprogrammering Fram till mitten av januari 4 Fö + lektioner och 4 labbar deadline 31/1 (men följ gärna "veckoplan") Rekommenderat att gå på föreläsning med projektinformation (december) Individuell dugga ("på papper") 3 chanser under del 2 + uppsamlingstillfälle i slutet av kursen Del 3 projektarbete December till slutet av kursen (ca v.7) Större programmeringsuppgift egen problemlösning October 14, 2013 5
Kursinfo - Mål När kursen är slut ska ni kunna... Analysera ett problem och skapa en lösning i Java praktisk programmering Hitta de klasser i standardbiblioteket som behövs och förstå dem genom att läsa deras Javadoc Förstå och felsöka andras kod Använda Eclipse (eller motsvarande) och förstå hur Javamiljön är uppbyggd Beroende på förkunskaper kan kursen vara... Ett stort steg ni lär er programmera från grunden,...eller ett litet steg där ni friskar upp er kunskaper och utökar era praktiska färdigheter i Java-programmering. October 14, 2013 6
Kursinfo - vad betyder de olika momenten? Föreläsning Introducerar begrepp och koncept inom programmering Visar exempel - bra att gå tillbaka till bilderna senare Endast några få riktiga "körexempel" i Eclipse nu i början Lektioner Ungefär: 1 föreläsning - 1 lektion Ni förutsätts vara bekanta med begreppen som introducerats på föreläsningen Visar "körexempel" i Eclipse som tillämpar begreppen från förläsningen Labbar Ungefär: 4-8 timmar bokad salstid per Fö+Le...men ni förutsätts lägga ner minst 10 timmar i veckan på kursen, för en del mer än så, dvs ni förutsätts jobba mycket på egen hand utöver labbar Ni löser praktiska programmeringsuppgifter i grupper om 2 studenter - OBS! "parprogrammering" Ni förutsätts vara bekanta med begreppen och exemplen från föreläsning och lektion Duggor Individuell kunskapskontroll: har ni förstått de mest grundläggande begreppen och kan läsa och förstå kod (utan att Eclipes "gör det åt er") Inte en "pluggtenta" - har ni förstått labbarna klarar ni duggan 30 minuter - skrivs på papper October 14, 2013 7
Kursinfo - Examination 4HP = laborationer (del 1+2, duggor) + 2HP = projekt Examination genom 3 moment Labbar lämna in lösningar på labbuppgifterna Skilj på "övning" och "uppgift" - Uppgift ska lämnas in Lösningar måste vara kommenterade (i koden) Lösningar måste vara testkörda För VG måste ni lämna in lösningarna före första deadline (del 1-6/12, del 2-31/1) Komplettering möjlig (även för VG) vid två ytterligare tillfällen Duggor Två duggor måste få G på båda 3 ordinarie tillfällen per del + 1 uppsamlingstillfälle i slutet av kursen För VG på kursen måste ni få G under ordinarie tillfällen, dvs senast 5/12 resp. 30/1 Projekt Godkänd projektuppgift designdiskussion, demo av inläsning från fil, projektrapport/ kod/dokumentation och demonstration/muntlig diskussion med handledaren Två nivåer av krav: Alla grundläggande krav uppfyllda G Ytterligare krav uppfyllda VG För VG måste ni uppfylla VG-kraven samt klara av alla momenten före ordinarie projektdeadline 21/2 October 14, 2013 8
Kursinfo - Labbar Vi använder Java 1.6 och Eclipse Helios Jobba två och två Registrera er labbgrupp i WebReg OCH ange gruppnummer + båda namnen vid varje inlämning i LISAM Samma grupper hela kursen (labbar och projekt) Välj en person som är på samma nivå! Parprogrammering = en skriver in koden i Eclipse, en sitter bredvid och hjälper till att tala om vad som ska skrivas, byt efter max 20 minuter! 4 labbar med ett antal uppgifter vardera i del 1 Bara de som heter "uppgift" måste lämnas in Övningar är valfria, men är ni nybörjare rekommenderar vi att ni göra alla övningar Välj er egen nivå och jobba i ert eget tempo kolla "veckoplan" på hemsidan för att se om ni ligger i fas Jobba gärna hemma och på egen laptop det är inte tänkt att ni ska hinna med alla uppgifter på labbtid om ni är nybörjare! Inlämning sker genom LISAM Kolla gärna med hanledaren på labben om lösningen ser rimlig ut, men handledarna har inte tid att rätta på labbtid Ladda upp en labb i taget, dvs lämna in först när ni är klara med alla uppgifter i labb 1 osv. - ladda då upp alla filer med er kod (.java) som en zip-fil Koden måste vara välkommenterad och direkt körbar annars ingen rättning October 14, 2013 9
Kursinfo Regler och deadlines Deadlines är strikta Rättning sker (kontinuerligt) inom ca 1 vecka, före ordinarie deadline (dvs före 6/12 för del 1) Rättning av alla uppgifter som lämnats in före ordinarie deadline sker inom 2 veckor från deadline (dvs all ni lämnat in före 6/12 rättas senast 20/12) Rättning av kompletteringar sker endast direkt efter kompletteringsdedline (inom 2 veckor) - det går bra att lämna in komplettering när som, men de rättas inte förrän efter nästa kompletteringsdeadline Handledare svarar på frågor på labbtid frågor utöver labbtid ställs per e-post till ER handledare och besvaras i mån av tid. Det går även bra att boka tid med handledaren via e-post men INTE att bara dyka upp på hans/hennes kontor! Deadlines Labbar del 1 6/12 17:00 (Kompletteringar: 14/2 och 28/3) Labbar del 2 31/1 17:00 (Kompletteringar: 28/2 och 28/3) Projekt designdiskussion med handledaren senast 17/1, demonstrerat inläsning från fil senast 31/1, redovisat för handledare muntligt + rapport/kod/ dokumentation inskickad senast 21/2 17:00 (Kompletteringar innan 28/3 överenskommes med handledare) Duggor Dugga del 1 7/11 eller 21/11 eller 5/12 Dugga del 2 19/12 eller 16/1 eller 30/1 Uppsamlingstillfällen: 1st i februari för både dugga 1 och 2 October 14, 2013 10
Kursinfo vanliga frågor? Måste jag gå på föreläsningarna? Nej, men jag rekommenderar att gå om du är ny på Java-programmering eller om det var länge sen du programmerade Gå på föreläsningen med projektinformation i december Det är jättemånga övningar måste jag göra alla? Nej, bara de som heter "uppgift" är obligatoriska. Sen väljer du själv hur mycket av övningarna du vill göra. Uppgifterna är oftast de mest avancerade, så om du är ny på programmering rekommenderar jag att göra alla övningar och även testa att köra exemplen från föreläsningar och lektioner! Min labbhandledare är inte där vem ska jag fråga? På labbtillfällena går det bra att fråga vem som helst av handledarna (normalt 1 handledare per sal) alla kanske inte är där varje tillfälle. När ni lämnar in uppgifter får ni kommentarer från ER handledare, och om ni har frågor utanför labbtid är det honom/henne ni ska maila. Jag har missat... hur kan jag ta igen det? För varje moment (labbinlämning, duggor osv) finns flera chanser kolla kurshemsidan. Tänk på att för VG måste du lämna in labbar innan ORDINARIE deadline OCH klara duggorna innan samma deadline. October 14, 2013 11
Kursinfo - vad har hänt sen förra året? För mycket tid Något färre uppgifter i år, och några uppgifter har minskats i omfång Fokus på färre klasser i standardbiblioteket... men det är fortfarande en krävande kurs! För stort hopp mellan del 1 och 2, samt teori/praktik Lektion till varje föreläsning Allt om klasser har flyttats till del 2 - "mjukstart" i del 2? Svårt att veta vad vi övar på i labbarna och vad som är "rätt svar" Mer text i labbinstruktionen, förklarar vad ni övar på Uppgifterna organiserade i "labbar" med ett tema... men finns fortfarande många möjliga lösningar Orättvist att bara ha en chans på duggorna Infört 3 chanser per dugga under periodens gång Svårt att få hjälp och feedback på labbarna En assistent per sal Fler assistenter totalt = snabbare rättning Andra nyheter: Mer strikt parprogrammering - båda ska lära sig skriva kod October 14, 2013 12
"Veckoplan" - del 1 (se kurshemsidan) v. 42-43: Fö 1-3 + Le1-2: Kursinfo samt grundläggande "kom-igång", sedan: variabler, operationer, villkorssatser Labb 1 (8 timmar salstid) - bör vara inlämnad 25/10 v. 44: Fö 4 + Le 3: Arrayer och loopar Labb 2 (4 timmar salstid) - bör vara inlämnad 1/11 v. 45: Fö 5 + Le 4: Metoder Labb 3 (4 timmar salstid + ev. del av nästa veckas labbtid) - bör vara inlämnad 15/11 v. 46-47: Fö 6 + Le 5: In- och utmatning, undantag Labb 4 (8 timmar salstid - den extra tid du tog för labb 3) - bör vara inlämnad 22/11 v. 48: 6 timmar salstid - reservtid för att bli klar med labbarna i del 1 October 14, 2013 13
Varför programmering? October 14, 2013 14
Förstå systemet För att förstå ett system måste man förstå dess beståndsdelar! De flesta system idag innehåller mjukvara... Bilar... Smarta kort... Kassan på ICA... TVn... Vitvarorna hemma i ditt kök... Och förstås de system vi oftast tänker på: mobiltelefoner, datorer, surfplattor mm. Genom att förstå principerna för programmering förstår vi dels... Hur systemet har byggts programmerarnas arbete, varför det kan finnas fel, hur omfattande arbete som krävdes etc. Och dels, varför systemet agerar som det gör (inte alltid som förväntat) och inte alltid är så "smart" som vi tror October 14, 2013 15
Förstå systemutveckling och programmerare som yrkesgrupp För att kunna leda ett förändrings- eller utvecklingsprojekt i en organisationer måste man förstå människorna och processerna som är inblandade Systemutvecklingsprocessen är en sådan process Programmerarna är en sådan grupp av människor Hur kommunicerar vi med en programmerare? Förstå begrepp, metoder och problem. Leda bättre Bättre tidsuppskattningar Bättre kvalitetsuppskattningar Bättre möjlighet att följa upp och kontrollera processen October 14, 2013 16
Jobba med programmering Vissa av er kommer säkert tycka (eller tycker redan) att detta är jättekul! Analys och design Systemutveckling Testning Underhåll Programmering är ett hantverk Man lär sig genom att öva, öva och öva Mer än bara lösa problemet Vad är en bra lösning? Varför? Vad finns det för alternativ? Även om ni programmerat innan finns det mycket att lära sig i den här kursen! October 14, 2013 17
Vad är ett program? Hur fungerar Java? October 14, 2013 18
Program som en samling instruktioner Varje program har en uppgift något som ska utföras En dator kan inte förstå hur man gör något vi måste tala om för den i detalj hur målet ska uppnås Varje steg i processen är en instruktion till datorn Instruktionerna utförs i en väldefinierad ordning Program = beskrivning av hur en uppgift ska utföras i ett språk som datorn kan tolka/utföra Programmering = att skriva sådana beskrivningar Programmeringsspråk = språket man använder för att uttrycka beskrivningen Köra/exekvera ett program = låta datorn utföra uppgiften October 14, 2013 19
Algoritmer sekvens med instruktioner Hur ska vi lösa ett visst problem? Bryta ner problemet i smådelar = detaljerade instruktioner Ordna instruktionerna så att vi i slutänden får lösningen på hela problemet En viss sekvens av instruktioner = en algoritm Finns typiska algoritmer som kan återanvändas T ex sorteringsalgoritmer Exempel: Insättning på bankkonto Mata in insättningsbelopp och kontonummer Hämta saldo för det givna kontonumret Öka saldo med insättningsbelopp Spara det nya saldot October 14, 2013 20
Hur ska vi få datorn att utföra vår algoritm? Vi måste skriva den så att datorn kan tolka vad den ska göra! vi kan använda Java Varje steg i algoritmen måste översättas till Java Java har bara generella instruktioner inget om bankkonton och saldon! Vi måste bryta ner problemet i mindre bitar Vi måste känna till vilka instruktioner som finns i Java Vi måste öva på att uttrycka lösningar på olika typer av problem i Java October 14, 2013 21
Men... datorn pratar egentigen inte Java Programmet måste översättas till 1:or och 0:or = maskininstruktioner till datorns processor Två typer av programmeringsspråk De som kompileras direkt till maskinkod Fördelar? Programmet kan köras direkt på datorn, utan ytterligare programvara installerad. Det går snabbt när programmet väl körs. Nackdelar? Programmet kompileras för en speciell plattform, eller till och med en speciell dator. De som kompileras till bytekod och sedan körs genom en interpretator Java är ett exempel Fördelar? Plattformsoberoende Nackdelar? Långsammare. Kräver rätt interpretator. October 14, 2013 22
Java-kompilering På hårddisken i förväg I minnet när vi exekverar programmet MittProgram.java class Tecken public static void main (String[] args) char tecken = 'B'; char tecken2 = 66;... MittProgram.class χλασσ Τεχκεν πυβλιχ στατιχ ϖοιδ µαιν (Στρινγ αργσ χηαρ τεχκεν = Β ; χηαρ τεχκεν2 = 66... 00001100 01001001 011... Kompilator Interpretator October 14, 2013 23
Javamiljön vi jobbar i Följande måste finnas De Java-programbibliotek som programmet använder En Javainterpretator Java Runtime Environment (JRE) För att enklare skriva program finns olika utvecklignsmiljöer (IDE = Integrated Development Environment) Jämför med MS Word: Du kan skriva din text i Notepad, men... du har ingen stavningskontroll, ingen formatering för att göra texten begripligare. Betydelsen kommer vara densamma, men det är enklare att skriva och hålla reda på texten med lite extra funktioner. En IDE har stavningskoll för olika programmeringspråk, du kan testköra programmet direkt i din IDE osv. October 14, 2013 24
Vanligt problem: låt inte Eclipse styra er!...ni ska styra Eclipse! Eclipse ger er indikationer på när någonting är fel i er kod, men förslagen på åtgärder är inte alltid rätt i just ert fall utan bara en "gissning"! Ni måste ha kunskaperna för att kunna bestämma vad som är lämpligt (eller ens möjligt) att göra i ert specifika fall Lite inte blint på förslagen från Eclipse, tänk efter: är det här rätt och vad får det för konsekvenser? Duggorna testar er förståelse - där har ni inte hjälp av Eclipse! October 14, 2013 25
Om Java Plattformsoberoende Webbprogrammering Imperativt språk man talar om vad som ska göras ungefär som man ger order till en person: instruktionerna utförs i ordning som de läses. Objektorienterat språk klasser och objekt (instanser av objekt) Få instruktioner i grundspråket många bibliotek (Java API - "standardbiblioteket") Java är bara ett språk bland många!!...men kan man ett är det mycket lättare att lära sig ett annat October 14, 2013 26
Att programmera Analysera problemet Utforma algoritmen Skriva programmet Kompilera Exekvera Testa Viktigt om testning: Tänk på att alltid köra programmet både med förväntade och oväntade data Spårutskrifter är ett bra sätt att se vad som händer inuti när programmet körs October 14, 2013 27
Ett första Javaprogram October 14, 2013 28
Ett Javaprogram namn och syntax Program måste skrivas och sparas på ett speciellt sätt Ett program måste skrivas enligt Javas syntax Ett programspråks syntax talar om exakt vad som är korrekt att skriva vad datorn kommer att förstå Jfr. grammatik och stavning i svenska... Men vi är inte maskiner, vi förstår oftast även om syntaxen är fel, det gör inte datorn! Namnet på ett program (en Java-klass) Ett enda ord (dvs inga mellanslag använd Camel Case för flera ord FleraOrd eller _ Flera_Ord) Måste börja med en bokstav (engelska alfabetet + kan sedan innehålla siffror samt _ ) Ge programmet ett beskrivande namn! Undvik å/ä/ö och andra specialtecken October 14, 2013 29
Tips: använd bara engelska alfabetet! Det går att använda svenska tecken när ni programmerar men... Svenska tecken representeras olika på olika datorer och i olika Eclipse-versioner Använder ni svenska tecken kan ni får problem om ni flyttar över er kod till en annan dator T ex mellan din laptop och din labbkompis dator, eller från datorn i labbsalen och din egen laptop Bäst att helt undvika svenska tecken i er kod! använd engelska namn... eller använd svenska namn men "ta bort prickarna", t ex "anvand" istället för "använd" October 14, 2013 30
Ett Javaprogram Klasser och metoder Ett program består av en eller flera Java-klasser En klass innehåller en samling instruktioner som löser ett visst problem används för att bryta ner problemet En klass sparas normalt i en fil (finns undantag) -> Flera klasser = flera filer Filen måste ha samma namn som klassen + ändelsen.java Exempel: MittProgram.java innehåller klassen MittProgram Vi kommer att börja med enkla program som bara består av en klass = sparas i en enda fil Varje klass har normalt en eller flera metoder Metoderna innehåller instruktionerna som ska utföras October 14, 2013 31
Ett Javaprogram Metoden main main är huvudmetoden själva huvudspåret i programmet, där programmet börjar Senare i kursen kommer vi att se andra metoder, men vi börjar med att använda bara main När ett Javaprogram exekveras söker interpretatorn efter metoden main Finns den inte får man ett felmeddelande Annars börjar exekveringen här October 14, 2013 32
Ett Javaprogram Struktur och syntax class Meddelande public static void main (String[] args) // här skriver vi vad programmet ska göra October 14, 2013 33
Kommentarer rader med text som hoppas över när programmet körs Används för att kunna beskriva vad programmet betyder och gör för andra programmerare (eller för dig själv) Ni måste använda kommentarer för att beskriva vad ni gjort i lösningarna till labbuppgifterna Två typer av kommentarer: // indikerar att resten av raden är en kommentar /*... */ indikerar att allt mellan /* och */ är en kommentar, kan vara flera rader text kallas för block-kommentar October 14, 2013 34
Ett Javaprogram Exempel class Meddelande public static void main (String[] args) System.out.println( Lycka till! ); Varje instruktion du ger till datorn avslutas med ";" October 14, 2013 35
Ett Javaprogram Exempel 2 class Meddelande2 public static void main (String[] args) System.out.println( Lycka till! ); System.out.println( Lycka till igen! ); October 14, 2013 36
Ett Javaprogram Exempel 3 class Meddelande3 public static void main (String[] args) System.out.println( Lycka till! ); //utskrift System.out.println( Lycka till igen! ); /* Det här är en kommentar......på flera rader */ October 14, 2013 37
Eclipse October 14, 2013 38
Vad är Eclipse? En avancerad "texteditor" för programmeringsspråk Smarta funktioner för att underlätta programmering Färgkodning av reserverade ord med speciell betydelse i språket lättare att se strukturen Indentering lättare att se strukturen Syntaxkontroll (tänk stanvingskoll ) markerar fel i programkoden medan ni skriver "kollar med" kompilatorn Funktioner för att testköra och felsöka Automatisk kompilering Finns även mer avancerade funktioner för att stega sig igenom program (vi använder dessa först senare i kursen) Köra program inifrån programmeringsmiljön October 14, 2013 39
Eclipse och Java 1.6 ladda ner (finns redan på labbdatorerna) Ladda ner och installera Eclipse (Helios finns på labbdator) http://www.eclipse.org/downloads/ Finns olika paket, välj antingen Eclipse classic eller Ett paket för Java developers och följ installationsinstruktionerna Vissa paket innehåller Java När du använder Eclipse tänk på att du alltid ska jobba i Java Perspective Är du osäker, eller ser gränssnittet konstigt ut: gå till menyn Window, välj Open Perspective och klicka på det som heter bara Java eller Java (default) Kontrollera att du använder rätt Java-version Preferences -> Java -> Installed JREs (Här ska Java SE 6 vara markerad i listan - finns den inte att välja på måste du installera Java 6) Ladda ner Java Development Kit (om ej inkluderat i Eclipse) http://www.oracle.com/technetwork/java/javasebusiness/downloads/javaarchive-downloads-javase6-419409.html Med JDK följer även JRE (Java Runtime Environment interpretatorn för att kunna köra program) Vilken version? Språket utvecklas ständigt! Vi jobbar med Java 6 (dvs 1.6), finns även 7 men innehåller sådant vi inte tar upp i kursen och vi kommer rätta era uppgifter med Java 1.6 October 14, 2013 40
Skapa och köra ett första program inifrån Eclipse Skapa ett projekt i din workspace -mapp Högerklicka i Package explorer och välj New -> Java Project Ge projektet ett namn (t ex Labbar ) och klicka Finish Skapa en ny Java-klass i ditt projekt Högerklicka på projektmappen och välj New -> Class Ge klassen ett namn och klicka i rutan för att skapa en tom main-metod automatiskt Skriv koden för ditt program innanför klamrarna till metoden main Tänk på att göra koden begriplig genom... Kommentarer Indentering Testkör ditt program inifrån Eclipse Högerklicka på klass-filen och välj Run as Java Application Se resultatet och eventuella felmeddelanden i Eclipse:s console/terminalfönster October 14, 2013 41
Exekvering och felrapporter När ett program körs syns en röd markering (liknar rec på en videokamera) i överkant på Eclipse:s console När programmet är klart blir markeringen grå Verkar programmet ha hängt sig eller fortsätter upprepa sig utan att ta slut? Ctrl-C avslutar ett program Fel = Exception ( undantag ) Felrapporter skrivs ut i Eclipse:s console Öva på att läsa felrapporter och analysera var felet finns Ofta talar rapporten om i vilken klass och på vilken rad i metoden/filen felet uppstod Ofta gör ett fel att exekveringen avbryts October 14, 2013 42
Exempel 1 och 2 i Eclipse October 14, 2013 43
Köra ett kompilerat program utanför Eclipse Leta rätt på den kompilerade filen Klassnamnet + ändelsen.class Kör programmet med kommandot java + klassnamnet Kör klassen i java-interpretatorn Letar efter en main metod inne i den kompilerade koden October 14, 2013 44
Köra exempel 1 och 2 utanför Eclipse October 14, 2013 45
Eclipse tutorials Att komma igång med Java i Eclipse video tutorial http://eclipsetutorial.sourceforge.net/totalbeginner.html Lesson 1-2 Ni behöver inte använda paket (package) i början, och vi kommer inte att skapa egna nya metoder förrän senare Notera att de inte använder senaste versionen av Eclipse vissa knappar och menyer kan se lite annorlunda ut! Grundläggande funktioner i Eclipse video tutorial http://eclipsetutorial.sourceforge.net/workbench.html Mycket detaljerat ni behöver inte kunna allt detta, men får ni problem med gränssnittet finns svaret säkert här Notera att de inte använder senaste versionen av Eclipse vissa knappar och menyer kan se lite annorlunda ut! October 14, 2013 46
Dags att börja programmera... October 14, 2013 47
Standardutmatning class Meddelande public static void main (String[] args) System.out.println("Lycka till!"); Punktnotation: <klassnamn>.<metodnamn> Vi återkommer till detta senare!! det gör inget att ni inte förstår alla detaljer just nu System.out.println() skriver ut en rad med text till standard output, dvs det terminalfönster där programmet körs Textsträngar anges mellan " " October 14, 2013 48
Standardutmatning forts. System.out.println() skriv ut och avsluta raden System.out.print() skriv ut men stanna kvar på samma rad Delsträngar kan sättas samman med + Exempel: class Meddelande public static void main (String[] args) System.out.println("Lycka " + "till!"); System.out.print("Lycka "); System.out.print("till!"); October 14, 2013 49
Exempel i Eclipse October 14, 2013 50
Finn fem fel... class Mitt Meddelande public static void main (String[] arg) / kommentar System.out.println(Lycka till!") /* en till kommentar October 14, 2013 51
Vad säger Eclipse? October 14, 2013 52
Är detta fel? class Meddelande public static void main (String[] args) System.out.println("Lycka till!"); Inget fel......men svårt att läsa och tolka Följ konventionerna som finns på http://www.oracle.com/technetwork/java/javase/ documentation/codeconvtoc-136057.html October 14, 2013 53
Standardutmatning - formatering class Meddelande public static void main (String[] args) System.out.print("Lycka till! \n"); System.out.print("Lycka \t till! \n"); System.out.print("Vi säger: \"Lycka till! \""); \n betyder radslut \t betyder tabb \ anger att ett reserverat tecken som kommer efter ska skrivas ut som det är October 14, 2013 54
Vi testar i Eclipse... October 14, 2013 55
Variabler Vad är en variabel? Ett namn på en lagringsplats för ett värde vi "bokar upp" en plats i datorns minne för att lagra värden på Jfr. "x" i matematiken kan stå för vilket tal som helst X namn En variabel har alltid en typ vilken sorts sak kan vi stoppa i lådan? Typer är t ex heltal, flyttal och tecken Vi måste bestämma oss vad vi vill lagra när vi skapar variabeln October 14, 2013 56
Variabler Tilldelning och uppdatering Deklarera = skapa en variabel av en viss typ Initiera = ge variabeln ett första (initialt) värde Tilldelning = lagra ett värde Uppdatera = en tilldelning där vi byter ut det lagrade värdet class Variabel public static void main (String[] args) int tal; //här deklareras variabeln tal = 3; //här initieras variabeln, dvs tilldelas ett värde tal = 5; //här uppdateras värdet genom tilldelning tal = tal + 4; //här uppdateras värdet igen System.out.print("Talet är: " + tal); October 14, 2013 57
Vi skapar några variabler i Eclipse... October 14, 2013 58
Variabler Konstanter Konstant = värde som inte ändras Konstanter skrivs oftast med stora bokstäver class Konstant public static void main (String[] args) final int TIMMAR = 24; October 14, 2013 59 System.out.print("Timmar på ett dygn: " + TIMMAR);
Datatyper Översikt över grundläggande datatyper i Java: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/ datatypes.html byte short int long heltal - byte är "kortast" (minst), long är "längst" (störst) - vanligast: använd int float double flyttal/decimaltal - float är "kortast" (minst), double är "längst" (störst) - vanligast: använd double boolean char booleska värden, sanningsvärden - sant/falskt tecken - a, b c, 0, 4, %, #... October 14, 2013 60
Datatyper - Heltal byte positivt eller negativt heltal som bara tar upp en byte = 8 bitar Ligger mellan -128 och 127 short positivt eller negativt heltal som tar upp två byte = 16 bitar Ligger mellan -32 768 och 32767 int - positivt eller negativt heltal som tar upp fyra byte = 32 bitar Ligger mellan 2 147 483 648 och 2 147 483 647 long - positivt eller negativt heltal som tar upp åtta byte = 64 bitar Ligger mellan 9 223 372 036 854 775 808 och 9 223 372 036 854 775 807 October 14, 2013 61
Datatyper Heltal (forts.) Försöker du lagra något som är större än vad datatypen tillåter får du ett kompileringsfel Tal som ska lagras som long måste avslutas med bokstaven L class LongVariabel public static void main (String[] args) long storttal = 8123456789L; System.out.print("Talet är: " + tal); October 14, 2013 62
Vi testar i Eclipse... October 14, 2013 63
Datatyper - Flyttal float decimaltal som tar upp 4 byte minne Sparar minne och ger snabbar bearbetning...men mindre noggrannhet och mindre talområde Ett tal som ska lagras som en float måste avslutas med F Exempel: float f1 = 1.23F; double decimaltal som tar upp 8 byte minne Talen lagras i tre delar (med basen 2): tecken mantissa exponent Exempel: 0.0000001230000001 kan avrundas till +1.23E-7 Observera att talen avrundas till ett visst antal siffror i matissan, därför kan det uppstå avrundningsfel October 14, 2013 64
Exempel med flyttal October 14, 2013 65
Datatyper booleska värden/ sanningsvärden För att representera sanningsvärden sant/falskt, ja/nej... värdena representeras av orden true och false class Sanning public static void main (String[] args) boolean kvinna = true; System.out.print("Eva är en kvinna: " + kvinna); October 14, 2013 66
Datatyper Tecken char datatyp för att lagra enskilda tecken som tar upp 2 byte minne tecken representeras internt som en siffra översätts till ett tecken via en teckentabell Java använder Unicode-systemet (www.unicode.org - en lättläst tabell för att slå upp koderna för vanliga alfabet finns här: http://www.ssec.wisc.edu/~tomw/java/unicode.html) Exempel: siffran 65 står för bokstaven A, och 97 för a Finns mängder med specialtecken, t ex ny rad, tabb, retur osv. October 14, 2013 67
Unicode October 14, 2013 68
Datatyper Tecken (forts.) class Tecken public static void main (String[] args) char tecken = 'B'; char tecken2 = 66; System.out.print(tecken + " " + tecken2); Tecken skrivs inom ' ' medan textsträngar inom " " October 14, 2013 69
Vi testar i Eclipse... October 14, 2013 70
Skilj på tecken och siffra class TeckenSiffra public static void main (String[] args) char tecken = '9'; int tal = 9; System.out.print(tecken + " " + tal); Tecknet 0 (Unicode 48), heltalet 0, nolltecknet ("null" används för att markera en tom variabel Unicode 0) October 14, 2013 71
Tecken och siffror, exempel i Eclipse... October 14, 2013 72
Operationer - Heltal De fyra räknesätten: + - * / Resten vid heltalsdivision: % Tecken: + - Prioritet: unära + - * / % + - Inom en grupp utförs operationerna i den ordning de står Använd parenteser för att få en viss bestämd ordning October 14, 2013 73
Operationer Heltal (forts.) class Operationer public static void main (String[] args) int a = 2; int b = 3; int c = a + b * a; // c blir 8 int d = a * b / a; // d blir 3 System.out.print("Resultat: " + c + " och " + d); October 14, 2013 74
Vi testar i Eclipse... October 14, 2013 75
Operationer på tal (forts.) Flyttal Motsvarande som för heltal (utom % - nu kan vi lagra decimaltalet istället, dvs använda / direkt) Division med 0 Heltal: felmeddelande (undantag kastas) Flyttal: du får ett speciellt värde tillbaka +/- Infinity 0.0/0 ger svaret NaN (Not a Number) October 14, 2013 76
Operationer på en variabel öka variabel med ett värde (+=): a = a + 2 är samma som a += 2 öka med 1: a++ multiplicera med ett värde (*=): a = a * 2 är samma som a *= 2 minska med ett värde (-=): a = a - 2 är samma som a -= 2 minska med 1: a-- dela med ett värde (/=): a = a / 2 är samma som a /= 2 resten av division (%=): a = a % 2 är samma som a %= 2 October 14, 2013 77
Operationer - Exempel 1 class ExempelOperationer public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 78
Vi testar i Eclipse... October 14, 2013 79
Operationer - Exempel 2 class ExempelOperationer2 public static void main (String[] args) char b = 'c'; char c = 'a'; String resultat = "hej"; resultat = resultat + " " + c + " " + b; System.out.print("Resultat: " + resultat); October 14, 2013 80
Ett exempel till i Eclipse... October 14, 2013 81
Vad händer egentligen vid en tilldelning? Först beräknas resultatet av det som står till höger om likamedtecknet... värdena som används för beräkningen är de som gäller just då när programmet körs...sen lagras värdet av det resultatet i variabeln October 14, 2013 82
Exempel: vi tittar på en programkörning class ExempelOperationer public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); i October 14, 2013 83
Exempel: "substitution" class ExempelOperationer d public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 84 i
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 85 i c char
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 86 i c char
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = 2 + 97; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 87 i c char
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) resultat int i = 2; double d= 2.2; int char c = 'a'; int resultat = 99; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 88 i char c
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) resultat int i = 2; double d= 2.2; int char c = 'a'; int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 89 i char c
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) resultat int i = 2; double d= 2.2; int char c = 'a'; int resultat = i + c; double resultat2 = 2.2 + 97; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 90 i char c
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) resultat int i = 2; double d= 2.2; int char c = 'a'; int resultat = i + c; double resultat2 = 99.2; System.out.print("Resultat: " + resultat + " och " + resultat2); October 14, 2013 91 i char c
Exempel: "substitution" class ExempelOperationer public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = 99.2; October 14, 2013 92 System.out.print("Resultat: " + resultat + " och " + resultat2); i int resultat2 double char c d double resultat int
Exempel: "substitution" class ExempelOperationer public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; October 14, 2013 93 System.out.print("Resultat: " + resultat + " och " + resultat2); i int resultat2 double char c d double resultat int
Exempel: "substitution" class ExempelOperationer public static void main (String[] args) int i = 2; double d= 2.2; char c = 'a'; int resultat = i + c; double resultat2 = d + c; October 14, 2013 94 System.out.print("Resultat: " + 99 + " och " + 99.2); i int resultat2 double char c d double resultat int
Exempel: "substitution" class ExempelOperationer d int double public static void main (String[] args) resultat int i = 2; resultat2 double d= 2.2; int char c = 'a'; double int resultat = i + c; double resultat2 = d + c; System.out.print("Resultat: 99 och 99.2"); i char evabl45> Resultat: 99 och 99.2 c October 14, 2013 95
Vi stegar oss igenom programmet i Eclipse! October 14, 2013 96
Sammanfattning Varför programmering? Viktigt både för den som vill bli programmerare och den som "bara" vill jobba med miljön där systemen finns och utvecklas Vad är programmering? Ett sätt för oss att ge en dator instruktioner för att utföra en uppgift i ett språk som datorn kan tolka Java ett programmeringsspråk Kompilator + interpretator behövs Utvecklingsmiljön vi använder är Eclipse Grunderna i Java Strukturen för ett program Klasser och klassbibliotek (Java API) Utmatning av textsträngar Grundläggande datatyper och variabler + operationer October 14, 2013 97
Nästa gång? Typomvandling Jämförelser Villkor och val Textsträngar mer avancerade operationer Mer om Javas klassbibliotek och att läsa Javadoc October 14, 2013 98
October 14, 2013 99