732G11 Linköpings universitet 2011-01-26
1 2 3 4
Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron == klar) hoppa till steg 10; 9 Annars hoppa till steg 8; 10 stek(olja, köttbullar); 11 servera(spaghetti, köttbullar, ketchup);
Datatyper Ett sätt att skilja på data av olika typ. Både data och variabler har en typ, som måste matcha. I hink-liknelsen kan datatypen illustreras av en färg, exempelvis blå för heltal. H 2
Deklaration int tal1 ; float tal2 ; String text ; Deklaration Ett sätt att tala om vilken typ som gäller för en variabel. Motsvarar att måla hinkarna. tal1 tal2 text
Tilldelning tal1 = 2; tal2 = 2. 3; text = " nollan "; Tilldelning Ett sätt att ge en variabel ett värde. Motsvarar att tömma en hink och lägga en boll i en hinken. tal1 tal2 text 2 2.3 nollan
Konstanter Som en variabel, men det går inte att ändra värde på den. Måste ha en typ, precis som en variabel. Deklareras med nyckelordet final. Brukar ges namn med enbart VERSALER och understreck. En konstant final int ANTAL_STOLAR = 40;
Literaler En literal är ett värde som ska tolkas bokstavligt. Inte en variabel eller konstant. Användning av literal int tal2 ; tal2 = 2;
Literaler Använd första bokstaven i typnamnet efter siffrorna för att indikera vilken typ ni menar. Fungerar för l=long, d=double, f=float. Ex 2.0f är en float medan 2.0d är en double. Ex 2f är en float medan 2d är en double.
konvertering int float float tal2 ; tal2 = 2; Implicit typkonvertering Ett sätt att byta typ på ett värde (så att det passar i sin hink) I vissa fall sker det automatiskt. 2 tal2 tal2 2.0
konvertering float int int tal1 ; tal1 = ( int ) 2.0; Explicit typkonvertering Vissa typkonverteringar kan inte ske automatiskt. Då måste man göra en manuell konvertering genom att ange den önskade typen inom parentes innan värdet. 2.0 2 2.0 (int) tal1 tal1
Jämförelser Några olika jämförelser int a = 1; int b = 2; boolean res ; res = (a < b); // true res = (a <= b); // true res = (a > b); // false res = (a >= b); // false res = (a == b); // false res = (a!= b); // true
byte: 128 <= x <= 127 short: 32, 768 <= x <= 32, 767 Heltalstyper int: 2, 147, 483, 648 <= x <= 2, 147, 483, 647 long: 9, 223, 372, 036, 854, 775, 808 <= x <= 9, 223, 372, 036, 854, 775, 807 char: Representerar enstaka tecken, lika stor som en short, men kan bara innehålla positiva tal. Skrivs med apostrofer: a Kan konverteras till/från heltal vilket är förvirrande och bör undvikas.
Flyttalstyper float double Det som skiljer är framför allt precisionen.
Arrayer Ofta behöver man flera likadana variabler, en Array Kallas ibland på svenska för Fält. Skapar en Array av heltal int [] integers = new int [ noofintegers + 1]; float [] floats = {2.2f, 4.6 f};...
används för att visa hur ett program fungerar. Man kan se alla val och upprepningar som sker i programmet. Består av tre (!) enkla beståndsdelar: Start/stop Utför något
Vakna Drick kaffe NEJ JA Slå väckarklockan Tyst? JA Mer än 20 min till FÖ? Åk till uni. NEJ Håll FÖ
Rita ett strukturdiagram över din morgon. Bonusuppgift (om du får tid över): Rita ett strukturdiagram för den perfekta kravallen.
Ordning Normalt sett så körs programmets kodrader i ordning alltså uppifrån och ned. Ibland vill man ändra på detta, exempelvis i vårt laga-middag-program:
Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron == klar) hoppa till steg 10; 9 Annars hoppa till steg 8; 10 stek(olja, köttbullar); 11 servera(spaghetti, köttbullar, ketchup);
Hopp I tidernas begynnelse använde man programhopp - precis som det antyds i middagsreceptet - för att ändra ordningen som programmet körs i. I java får man inte göra hopp hur som helst. Man använder istället färdiga kontrollstrukturer som ändrar ordningen beroende på något villkor.
/ villkor if-satsen if( villkor ) sats1 ; else sats2 ; i praktiken Är a<b? if(a < b) { Gör något ; } else { Gör något annat ; } JA Gör något NEJ Gör något annat
Satser och block Satser och block sats ; { sats1 ; sats2 ;... } På varje ställe där man kan använda en sats kan man också ha ett block av satser. Ett block av satser omgärdas av måsvingar. Man ska alltid använda block för kroppar i if-satser, loopar och så vidare. Varför?
1 Ta emot ett heltal från användaren. Skriv programmet! 2 Om heltalet är större än fem; skriv För stort och avsluta. 3 Om heltalet är mindre än fem; addera ett till heltalet och hoppa till programpunkt 3. 4 Skriv ut Du får betyg och heltalet.
Många if-satser Inte så vackert if( siffra == 0){ System. out. println (" Noll "); } else if( siffra == 1){ System. out. println (" Ett "); } else if( siffra == 2){ System. out. println (" Två "); } else if( siffra == 3){ System. out. println (" Tre "); } else System. out. println ("?"); }
Bättre switch ( siffra ) { case 0: System. out. println (" Noll "); break ; case 1: System. out. println (" Ett "); break ; case 2: System. out. println (" Två "); break ; case 3: System. out. println (" Tre "); break ; default : System. out. println ("?");
Den enda trinära operatorn. En operator returnerar värde. Ger mer kompakt, men också svårläst kod. Bör i de flesta fall undvikas. villkor? uttryck_om_sant : uttryck_annars ; // ex: float promille = 0.1 f; String hur ; hur = " Jag tog " + ( promille < 0.2? " bilen " : " bussen ") + " hem.";
/ slinga / loop while-loopen while (a < b) { gör ngt ; } Gör något JA Är a<b? NEJ
Vad gör programmet? boolean bossishappy ; int answer = 0; System. out. print (" Vilken lön får jag?"); answer = in. nextint (); while ( answer < 200) { System. out. print (" Mer!"); answer = in. nextint (); } System. out. print ("OK, jag är nöjd!"); bossishappy = Boss. areyouhappy (); if (! bossishappy ) { givebossapple (); }
0-9 Skriver ut alla siffror från 0 till 9. Skriv ett program som: int siffra = 0; while ( siffra < 10){ System. out. print ( siffra + " "); siffra = siffra + 1; }
Skriver ut alla siffror från 0 till 9 Baklänges. Baklänges int siffra = 9; while ( siffra >= 0){ System. out. print ( siffra -- + " "); }
Udda Skriver ut alla siffror från 0 till 9 i ordning, men bara udda siffror. int siffra = 0; while ( siffra < 10){ if ( siffra % 2 == 1) { System. out. print ( siffra + " "); } siffra = siffra + 1; }
En algoritm är ett ändligt antal förutbestämda steg som kan användas för att lösa en specifik uppgift. Ofta upprepning. Ex. Liggande stolen för division.
Rita flödesschema Hur ser flödesschemat ut för middagsreceptet?
Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron == klar) hoppa till steg 10; 9 Annars hoppa till steg 8; 10 stek(olja, köttbullar); 11 servera(spaghetti, köttbullar, ketchup);
Gissa tal Rita flödesschema och skriv pseudokod för ett program där: Användaren får försöka gissa ett tal mellan 0 och 100. Programmet anger om gissningen är för stor eller för liten. Om gissningen var fel, gissa igen. Om rätt: slut.
Gissa tal Efter ett tag inser du att spelet inte är så intellektuellt stimulerande och vill låta datorn spela mot sig själv. För att göra detta behöver du uppfinna en bra algoritm för hur datorn ska spela. Rita flödesschema och skriv pseudokod för denna algoritm.