732G11 Linköpings universitet 2011-01-21
1 2 3 4 5 6
Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin
Ett riktigt program Hej.java class Hej { public static void main ( String [] args ) { System. out. println (" hej på dig."); } }
Eclipse En s.k. IDE (Integrated Development Environment / Integrerad utvecklingsmiljö) Helt gratis. Till alla operativsystem. Finns i flera varianter får olika språk/tillämpningar. Sköter organisationen av filer, editering av filer, kompilering, exekvering och felsökning.
Ett sätt att lagra data Kan ses lite som en namngiven hink som man lägger keno-bollar i. H 2
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
Heltal: int (-23, 0, 120) Flyttal: float (-34.2, 0.0, 123.2) Text: String ( nollan, ettan ) 2 2.3 nollan Några datatyper
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
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;
En literal är ett värde som ska tolkas bokstavligt. Inte en variabel eller konstant. Användning av literal int tal2 ; tal2 = 2;
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. tal2 2 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. tal1 2.0 tal1 2 2.0 (int)
Explicit eller implicit typkonvertering Varför kan man konvertera int float implicit, medan float int måste konverteras explicit? Konversioner där man inte förlorar möjliga värden görs implicit.
och värden Skilj på variabelns namn (hinkens namn) och värdet den representerar (vad som står på bollen).
Utmatning utmatning String greeting = " hej "; System. out. println ( greeting + "på dig."); Skriver ut meddelandet Hej på dig med en radbrytning efter.
alt. 1 Kopiera Keyboard-filen. int tal a = Keyboard. readint ();
alt. 2 import java. util. Scanner ; class Medelvarde { public static void main ( String [] args ) { Scanner in = new Scanner ( System. in ); int heltal = in. nextint (); } }
Ett riktigt program Vi ska låta användaren skriva två heltal som programmet ska räkna ut medelvärdet för och sen skriva ut resultatet på skärmen. Hur börja?
Fråga användaren efter ett heltal Läs in ett heltal x Fråga användaren efter ett heltal Läs in ett heltal y Räkna ut medelvärdet = (x+y) / 2 Skriv ut medelvärdet Ett riktigt program
Ett riktigt program Medelvärde.java Scanner in = new Scanner ( System. in ); int tal1, tal2, medelvarde ; System. out. println (" Mata in ett heltal :"); tal1 = in. nextint (); System. out. println (" Mata in ett heltal :"); tal2 = in. nextint (); medelvarde = ( tal1 + tal2 )/ 2; System. out. println (" Medelvärdet är: " + medelvarde );
En bugg? Det finns ett fel i medelvärdesprogrammet som gör att det räknar fel ibland. Kan du hitta problemet?
Buggar, löss, fel
Spårutskrifter Man skriver helt enkelt ut väl valda värden på variabler under programkörning. En av de vanligaste och enklaste sätten att felsöka ett program.
Spårutskrifter Spårutskrifter public static void main ( String [] args ) { int tal1 = 6, tal2 = 5; int svar = tal1 + tal2 ; System. out. println ( tal1 + " + " + tal2 + " }
Fler datatyper Finns det fler datatyper?
Ett sanningsvärde Kan anta värdena true och false (sant respektive falskt). Resultatet vid jämförselser och av logiska operatorer.
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
Logiska operatorer (a && b) sant omm a och b sanna (a b) sant omm a eller b sanna!a sant omm a falsk
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.
Två kategorier av typer Primitiva typer: Alla typer med liten begynnelsebokstav (int, float, byte osv.) : Alla typer med Stor begynnelsebokstav och arrayer (String, int[], String[] osv).
Rader av tecken, text helt enkelt. Litteraler skall omges av citationstecken (dubbelfnuttar).
Små skillnader Man skriver String med stora bokstäver. Man skriver new String() för att initiera (tom sträng). int tal1 = 0; String text = new String (); String namn = " Johan ";
En String är ett objekt En String innehåller/erbjuder metoder. Får inte jämföras med ==, använd String.equals( lösenord ) Stora skillnader String entext = " This is a String "; entext. length () -> 16 entext. charat (0) -> T entext. charat (10) -> S Jämför med char[]...
Medelvärden (igen) Programmet från tidigare fungerar bra för två värden. Kan lätt utökas till 3, 4, 5 osv värden. Medelvärdet av tre tal int tal1, tal2, tal3, medelvärde ; System. out. println (" Mata in ett heltal :"); tal1 = in. nextint (); System. out. println (" Mata in ett till heltal :" tal2 = in. nextint (); System. out. println (" Mata in ett heltal :"); tal3 = in. nextint ();... Medelvärdet av 5000 värden?
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ända arrayer double [] minatal = new double [ MAX ];... eller... double [] minatal ; minatal = new double [ räknautantal ()]; double etttal = minatal ; // Fel! double etttal = minatal [ 3]; // Rätt! double etttal = minatal [ index ()]; // Rätt!
Medelvärden Medelvärdet av tre tal int [] integers = new int [ 4]; System. out. println (" Mata in ett heltal :"); integers [0] = in. nextint (); System. out. println ("... ett till heltal :"); integers [1] = in. nextint (); System. out. println ("... ett till heltal :"); integers [2] = in. nextint (); System. out. println ("... ett till heltal :"); integers [3] = in. nextint ();... Häftigt, men inte mycket bättre för 5000 värden.
En bit kod med ett eget namn Kan anropas flera gånger från olika delar av programmet. När de körts färdigt fortsätter programmet där man var innan.
Metoder kan returnera värden Returvärden noofintegers = in. nextint ();
Metoder kan ta emot argument Argument String message = " hej "; System. out. println ( message );
Skriv ett program som skapar en array med 5 heltal. Byt plats på de två sista talen. Summera talen på jämna index (0, 2, 4). Papper ochj penna... Försök få med så mycket detaljer som möjligt.
int tal [] = {2, 3, 5, 4, 8}; int tmp = tal [4]; tal [4] = tal [3]; tal [3] = tmp ; int summa = tal [0] + tal [2] + tal [ 4];