Översikt Uttryck i tilldelningssatser Typer och typomvandling Klasser Metoder Konstanter Eclipse-tips MERA JAVA OCH ECLIPSE Institutionen för datavetenskap Programmering 1 Rita Kovordányi 2 public class Test1 { public class Test2 { double esttime; double planningfactor; double deliverytime; double esttime; int planningfactor; double deliverytime; esttime = 10.5; // estimated time in hours planningfactor = 3.14; // the famous pi deliverytime = esttime * planningfactor; System.out.println(deliveryTime); Programmering 1 Rita Kovordányi 3 esttime = 10.5; // estimated time in hours planningfactor = 3; // you know how it is ;) deliverytime = esttime * planningfactor; System.out.println(deliveryTime); Programmering 1 Rita Kovordányi 4 public class Test3 { Vad kommer att hända? double centralrate; // styrränta double bankadjust; // bank nivåjustering double intrrate; // resulterande ränta Programmering 1 Rita Kovordányi 5 centralrate = 0.35; bankadjust = 0.01; intrrate = centralrate * bankadjust; Programmering 1 Rita Kovordányi 6 1
Deklaration och tilldelning i ett steg Från högre till lägre precision public class Test4 { public class Test5 { double centralrate = 0.35; double bankadjust = 0.01; double intrrate = centralrate * bankadjust; double centralrate = 0.35; double bankadjust = 0.01; int intrrate = centralrate * bankadjust; Fel: Type mismatch: Cannot convert from double to int Programmering 1 Rita Kovordányi 7 Programmering 1 Rita Kovordányi 8 Från högre till lägre precision Fält (array) som variabeltyp public class Test6 { public class Test7 { double centralrate = 0.35; double bankadjust = 0.01; int intrrate = (int) (centralrate * bankadjust); Jag typomvandlar själv (type casting) double[] rainfall = new double[2]; double totalrainfall; rainfall[0] = 0.35; rainfall[1] = 0.2; Allokera (reservera) utrymme för två element totalrainfall = rainfall[0] + rainfall[1]; System.out.println(totalRainfall); Programmering 1 Rita Kovordányi 9 Programmering 1 Rita Kovordányi 10 Fält som variabeltyp public class Test7 { double[] rainfall = {0.35, 0.2, 0.12; double totalrainfall = rainfall[0] + rainfall[1] + rainfall[2]; System.out.println(totalRainfall); Operatorer Programmering 1 Rita Kovordányi 11 2
Exempel på operatorer De vanliga matematiska operatorerna +,, *, / Logiska operatorer &&,,! Jämförelseoperatorer <= ==!= Användning av logiska operatorer public class Test { boolean filefound = false; boolean fileread = false; // andra beräkningar boolean fileok = filefound && FileRead; Programmering 1 Rita Kovordányi 13 Programmering 1 Rita Kovordányi 14 Användning av logiska operatorer Jämförelser public class Test { boolean fileok = filefound && FileRead; if (!fileok) { System.out.println( Problem med att läsa filen ); Returnerar boolean (true eller false) double balance = 10000 // money in the account int minamount = 10000; // SEK boolean qualifiesforbonus = (balance >= minamount); if (qualifiesforbonus) { <...> // give bonus to this customer Programmering 1 Rita Kovordányi 15 Programmering 1 Rita Kovordányi 16 Jämförelser Returnerar boolean (sant eller falskt) Metoder double balance = 10000; int minamount = 10000; // money in the account // SEK if (balance >= minamount) { // qualifies for bonus <...> // give bonus to this customer Programmering 1 Rita Kovordányi 17 3
Återanvändning av kod Återanvändning av kod Vad göra om man behöver beräkna samma sak gång på gång? T.ex. beräkna variansen i flera datasets? Måste man skriva om samma rader kod flera gånger? Samla satserna i en metod Metoden namnges Kan sedan anropa metoden genom att använda dess namn Kan anropa från alla de ställen i koden där man vill göra den här beräkningen Programmering 1 Rita Kovordányi 19 Programmering 1 Rita Kovordányi 20 Metod En rad satser som ska återanvändas flera gånger T.ex. beräkna snittet av en veckas nederbörd Vill göra samma sak för andra veckor Veckans data skickas med som argument: meanweek1 = mean(1,5,4,2,7,2,5); meanweek2 = mean(7,15,42,23,4,6,12); Ut: Resultat av anropet In: Argument Exempel public class Statistics { Klass-metod Returtyp static double mean(double day1,...) { <beräkna snitt, returnera en double> Läggs i en egen fil som heter Statistics.java Anropas genom Statistics.mean(1, 45, 21, ) Parameterlista med typ och namn på varje parameter Programmering 1 Rita Kovordányi 21 Programmering 1 Rita Kovordányi 22 Exempel på anrop public class Test8 { double day1 = 23.1; // mm rainfall... Klasser avgrainfall = Statistics.mean(day1,...); System.out.println(avgRainfall); Programmering 1 Rita Kovordányi 23 4
Sätt att gruppera/paketera kod T.ex. vår Statistics klass Kan innehålla flera metoder Variansberäkning Standardavvikelse Etc. Klasser som variabeltyp Klasser kan utgöra en variabeltyp String name; I den här kursen kommer vi inte använda klasser som variabeltyper (förutom inbyggda klasser som String) Programmering 1 Rita Kovordányi 25 Programmering 1 Rita Kovordányi 26 Konstanter Vill förenkla för andra T.ex. genom att definiera PI Programmering 1 Rita Kovordányi 28 Vill se till att andra inte är beroende av min kod T.ex. har skrivit kod för en hiss, som kan åka upp eller ner Anropas genom Elevator.move(1); // go up Elevator.move(2); // go down Jag kommer två veckor senare på att det skulle vara bättre att koda ner som -1 och upp som 1 Förenklar mina beräkningar Anrop som Elevator.move(1); Elevator.move(2); // go up // go down kommer inte längre att fungera Ska andra behöva ändra i sin kod!? Programmering 1 Rita Kovordányi 29 Programmering 1 Rita Kovordányi 30 5
Elevator Bättre att definiera två konstanter i Elevator: static final int UP = 1; static final int DOWN = 2; public class Elevator { static final int UP = 1; static final int DOWN = 2; Tillhör klassen, dvs kan anropas genom <klassnamn>.up <klassnamn>.down static void move(int dir) { <min kod för att flytta hissens position> Programmering 1 Rita Kovordányi 31 Programmering 1 Rita Kovordányi 32 Anrop Nu är det lätt att ändra Konstanten UP i Anropas genom: klassen Elevator Elevator.move(Elevator.UP); Elevator.move(Elevator.DOWN); Metoden move i klassen Elevator Om jag vill ändra upp och ner till 1, och -1 Enkelt att definiera om konstanterna: static final int UP = 1; static final int DOWN = -1; Programmering 1 Rita Kovordányi 33 Programmering 1 Rita Kovordányi 34 Anropande kod påverkas inte Anropas fortfarande genom: Elevator.move(Elevator.UP); Elevator.move(Elevator.DOWN); Konstanter Deklareras som final Konvention Stora bokstäver samt _ mellan ord static final int UP = 1; static final int DOWN = 2; Programmering 1 Rita Kovordányi 35 Programmering 1 Rita Kovordányi 36 6
Arbeta i Eclipse Programmering 1 Rita Kovordányi 38 Programmering 1 Rita Kovordányi 39 Programmering 1 Rita Kovordányi 40 Kortkommandon i Eclipse Alt-Shift-X, J Kompilera och kör programmet Ctrl-Shift-M Importera rätt paket (markören ska stå på den klass som ska importerass) Ctrl-Shift-/ Kommentera bort dessa rader (eller ta bort kommentar, dvs. toggle) Kortkommandon i Eclipse Ctrl-Shift-F Formattera koden Alt-Shift-J Skapa Javadoc kommentar F3 Visa källkod till biblioteksklasser Om detta inte funkar första gången Ställ markören på klassen ifråga Tryck på Ctrl-tangenten (Eclipse letar upp källkoden) Shift F2 Visa Javadoc Ctrl-Mellanslag Fyll i kod åt mig (avsluta variabelnamn, etc.) Programmering 1 Rita Kovordányi 41 Programmering 1 Rita Kovordányi 42 7