1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler



Relevanta dokument
float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering A. Johan Eliasson

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

SMD 134 Objektorienterad programmering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

F4. programmeringsteknik och Matlab

TDIU01 - Programmering i C++, grundkurs

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Programmeringsteknik med C och Matlab

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDDC77 Objektorienterad Programmering

1 Funktioner och procedurell abstraktion

Tentamen OOP

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Enkla datatyper minne

Introduktion till programmering

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Grundläggande programmering med C# 7,5 högskolepoäng

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Objektorienterad programmering Föreläsning 4

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Föreläsning 2 - Intro till Java

F1 - Introduktion. ID1004 Objektorienterad programmering Fredrik Kilander

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad Programmering (TDDC77)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Föreläsning 3.1: Datastrukturer, en översikt

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Övning2. Variabler. Data typer

TDDC77 Objektorienterad Programmering

Objektorienterad programmering i Java

Programmering för språkteknologer I, VT2012. Rum

Föreläsning 2. Föreläsningen kommer ta upp valda delar av detta

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Föreläsning 1 & 2 INTRODUKTION

OOP Objekt-orienterad programmering

LÖSNINGSFÖRSLAG TENTAMEN

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen i Objektorienterad programmering

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TDIU01 - Programmering i C++, grundkurs

OOP Objekt-orienterad programmering

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Språkkonventioner och redigering av tal.

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

DD1314 Programmeringsteknik

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

OOP Objekt-orienterad programmering

Grunderna i stegkodsprogrammering

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Grunderna i SQL del 1

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Objektorienterad programmering D2

Chapter 3: Using Classes and Objects

Lathund. C för inbyggda system

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Föreläsning 3: Booleans, if, switch

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

5 Grundläggande in- och utmatning

TENTAMEN OOP

Att skriva till och läsa från terminalfönstret

Java, klasser, objekt (Skansholm: Kapitel 2)

"if"-satsen. Inledande programmering med C# (1DV402)

Att använda pekare i. C-kod

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen , Introduktion till Java, dtaa98, dtea53

Transkript:

1 Datorn som miniräknare I detta avsnitt tas upp hur man kan skriva program som utför enkla räkneoperationer och skriver resultat på skärmen. Syftet är i huvudsak att se hur flera satser kan bygga upp ett javaprogram utan att behöva fördjupa oss i djupa teoretiska resonemang. 1.1 Räkneoperationer I java kan man utföra de vanliga räkneoperationerna som addition, subtraktion, multiplikation och division med ungefär samma syntax ( skrivsätt ) som i algebran. Exempel: a = 2 + 3 * 4; är en giltig sats som ger en variabel döpt a värdet 14. Notera att den måste avslutas med ett semikolon. Räknereglerna är desamma som i algebran dvs. först utförs operationen 3 * 4 (12) därefter utförs operationen 2 + 12. Likhetstecknet skiljer sig en hel del från algebran. I java kallas likhetstecknet = tilldelningsoperator och innebär att man för över innehållet från högersidan (14) till variabeln på vänstersidan. Då satsen är utförd kommer variabeln a att innehålla värdet 14. 1.2 Variabler I exemplet ovan används namnet a för att ange en variabel, en slags behållare för ett värde, snarlik variabler inom algebra. För att kunna använda en variabel måste den deklareras. I deklarationen anger man vilken typ av data som variabeln innehåller. För variabeln i exemplet som ska innehålla ett numeriskt värde kan deklarationen se ut som int a; Denna deklaration säger att a är ett heltal ( int, förkortning för integer, heltal). Man kan se det som att en deklaration skapar en variabel med ett visst namn. En deklaration måste alltid komma före det att man använder variabeln. Det data som a refererar till kallas för en instans av ett heltal ( int ). Exempel, enkelt räkneprogram: class Calculator { public static void main(string [] arg) { // Räkneprogram int a; int b; b = 4; a = b * 3 + 2; System.out.println("Variabeln a har värdet "+a); System.out.println("Variabeln b har värdet "+b); } } Om programmet inte går att köra kontrollerar du att du matat in rätt programkod. Vi känner igen de första raderna från Hello World programmet. På rad 6 finns en deklaration utav en variabel döpt a som första programsatsen i main(). Rad 7 skapar ytterligare en variabel döpt b. Nästa sats tilldelar b värdet 4. Variabeln b innehåller hädanefter värdet 4.

Rad 10: a = b * 3 + 2; Rad 10 använder värdet av variabeln b I uträkningen av värdet för variabeln a. Uttrycket till höger om tilldelningsoperatorn = kan alltså läsas ut som, 4 * 3 + 2 (14). Eftersom variabeln b tidigare tilldelades värdet 4. Rad 11 fungerar på samma sätt som utmatningen av texten "Hello World" i Hello World programmet men man lägger ihop Texten "Variabeln... " och textrepresentationen för värdet i a. Denna typ av sammanslagning är speciell för just textsträngar. Om inte en text varit inblandad hade resultatet blivit väsentligen annorlunda. Rad 11: System.out.println("Variabeln a har värdet "+a); Variabeln a är deklarerad som ett heltal och därför kommer det att skrivas ut ett heltal på skärmen, dvs inga decimaltecken eller andra konstrigheter. Eftersom a tilldelades värdet 14 på Rad 10 kommer siffran 14 att skrivas ut Rad 12 fungerar på samma sätt rad 11. Om man skulle vlija ha de båda utskrifterna på samma rad kan man använda sig av metoden print istället för println Rad 11: System.out.print("Variabeln a har värdet "+a); print fungerar på samma sätt som println men ingen radbrytning skrivs ut efter texten.

2 Datatyper och Uttryck I räkneprogrammet tidigare såg vi att java kräver deklarationer av alla variabler som används. I räkneprogrammet användes bara variabler av heltalstyp, int, men det finns naturligtvis andra typer av variabler som kan användas. 2.1 Datatyper De vanligaste datatyperna är int Heltal ( integer 32 bitar) short Mindre heltal ( short integer 16 bitar) long Stort heltal ( long integer 64 bitar) float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number ) char Tecken ( character) byte 8 bitars heltal (-128 till 127) boolean Logiskt värde ( kan anta true eller false ) void Tomrum/ingenting Dessa datatyper kallas med ett gemensamt namn för enkla eller primitiva datatyper. I motsats till C++ kan inte dessa datatyper deklareras unsigned. 2.2 Deklarationer Deklarationer görs alltid på formen datatyp variabelnamnslista; En variabelnamnslista består av ett eller flera variabelnamn åtskilda av kommatecken. En lista är ett återkommande begrepp som omfattar fler saker än just variabelnamn. Generellt är en lista noll, ett eller flera element åtskilda av kommatecken. 2.3 Identifierare Det finns flera typer av identifierare där variabelnamn är en av dessa typer. De variabelnamn vi sett hittills har varit enstaka bokstäver, java tillåter emellertid ganska utförliga namn på variabler. Ett annat exempel på identifierare är metodnamn och klassnamn tex. main och JavaFun Reglerna för namngivning av identifierare är Det första tecknet måste vara en bokstav eller tecknet '_' (understreck/ underscore). Efterföljande tecken kan vara bokstäver eller siffror Tecknen å, ä och ö är tillåtna men av olika anledningar olämpliga Namnen kan vara hur långa som helst. Det finns ingen övre gräns.

2.3.1 Godkända identifierare / variabelnamn hello HeLlO _x _12 hellodude2 number_of_variables_in_my_program Observera att man skiljer på versaler och gemener i identifierare. Variabeln a är inte samma variabel som variabeln A. 2.3.2 Icke godkända identifierare 2dudes hello dude x-y "hel" poäng man får inte börja med en siffra mellanslag är inte tillåtna i variabelnamn tecknet är ej tillåtet " är inte tillåtet, anger dessutom texten hel ä är inte ett tillåtet tecken Det kan därför vara lockande att använda svenska namn som variabelnamn. Det finns nackdelar med det. Exempelvis om man använder ett svenskt namn bör man låta alla namn vara svenska. Javas klassbibliotek har emellertid bara engelska identifierare, och det gör att programmet blir svårläst. Om man döper sina klasser med åäö kan även filsystemet ställa till det för javakompilatorn, även fast Java självt klarar av åäö. Författaren använder av den anledningen uteslutande engelska identifierare i "skarp" programkod. Det är dessutom en betydande del av jordens befolkning som inte förstår svenska variabelnamn. I detta kompendium har jag däremot försökt att använda mig av identifierare med svenska namn för enkelhetens skull. 2.3.3 Initieringssatser En initiering är att ge en deklarerad variabel ett startvärde. Då en variabel deklareras med ex. int i; har variabeln i ett okänt startvärde. För att i ska få ett meningsfullt värde måste man göra en tilldelning. En variation på tilldelningar är initieringar, som är en kombination av en deklaration och en tilldelning. Syntaxen ser ut som datatyp variabelnamn = startvärde;

2.3.4 Exempel på giltiga satser med variabeldeklarationer och intieringar int n; int i, j; double x; // i, j är en variabellista med två element // x deklareras som ett flyttal long numberofpaalokas, numberofcards; // två stora heltalsvariabler deklareras bool logic1, logic2, illogical; // tre variabler som kan anta värdet true och false char c; // variabel som innehåller ett unicode tecken ex 'A' double myfloatnumber = 2.3203; // initierad variabel int magicnumber = 42; // initierad variabel Då man väljer variabelnamn för variabler i programmet bör man tänka efter. Namnet ska beskriva variabelns betydelse tydligt utan att bli för bökigt att skriva. number_of_paalokas skulle med fördel bytas mot npalookas eller liknande. 2.3.5 Nyckelord Det finns i språket en uppsättning fördefinierad ord med speciella betydelser som inte får användas som identifierare, dessa kallas nyckelord. abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while 2.3.6 Datatypernas egenskaper Man använder variabler av olika datatyper till olika syften, och man måste välja datatyp med omsorg då man deklarerar sina variabler. 2.3.7 Lagring av enkla datatyper Java har följande storlekar på sina enkla datatyper char byte short int long float double 2 byte Unicode 1 bytes 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes Då en variabel av typen int lagras i datorns minne kommer den således att uppta 4 bytes minne.

Man kan enkelt räkna fram vilka talområden detta ger för heltalstyperna om man följer metoden i kompendiet "Datorsystem och programhantering", avsnitt intern datarepresentation. Samma avsnitt anger dessutom hur talområdet för flyttalen ska tolkas. byte - 128 till 127 short - 32 768 till 32 767 int +- 2 147 483 647 long +- 2^63 float E+-37, 6 siffrors noggrannhet double E+-308, 15 siffrors noggrannhet En tumregel är om man inte behöver använda sig av ett flyttal, dvs man ska räkna ett antal av något, el liknande, använder man int, annars använder man double. Exempel räkneprogram med olika datatyper class Compute { public static void main(string [] arg) { int antalbananer, antalapelsiner; double medelantal; } antalbananer = 89; antalapelsiner = 56; medelantal = (antalbananer + antalapelsiner) / 2.0; System.out.println( "Snitt "+ medelantal +" frukter av varje sort"); Det är en god vana att använda beskrivande variabelnamn. Rad 1-4 är de vanliga satserna för att påbörja huvudprogrammet. Rad 5 skapar två heltal med namnen antalbananer och antalapelsiner. Rad 6 skapar ett flyttal, dvs ett tal med decimaldel som ex 3.14159265. Flyttalet medelantal deklareras som double trots att talområdet för float mer än väl räcker till. Motivet till att välja float skulle vara att en double ansågs ta upp för mycket minne. Floatdeklarationen påverkar emellertid ytterst sällan programmets storlek i någon väsentlig grad, därför väljer man alltid double av bekvämlighet. Rad 8 och 9 är vanliga tilldelningar. Rad 11: medelantal = (antalbananer + antalapelsiner) / 2.0; Parenteser används för att additionen ska utföras innan divisionen (annars blir det ju inget medelvärde). Därefter sker division med 2.0. Det inskrivna värdet 2.0 ska betraktas som att vara av typen float medan ett värde skrivet som 2 ska betraktas som att vara av typen int. Prova att ändra värdet 2.0 till värdet 2. Blir det någon skillnad vid programkörning? Rad 13: sort"); System.out.println( "Snitt "+ medelantal +" frukter av varje Här slår texten ihop med variabeln medelantal som är av typen double, variabeln skrivs därför ut som ett flyttal till skärmen, med decimaldel.

Längre fram i programmeringsstudierna är det viktigt att inse skillnaden mellan den interna representationen av heltal och flyttal (dess bitmönster i minnet) och dess representation på skärmen. På skärmen är det en textrepresentation som syns och i minnet är det en heltalsrepresentation respektive en flyttalsrepresentation som finns. Resultatet av programkörning blir Snitt 72.5 frukter av varje sort Som synes innehåller 72.5 en decimaldel som inte hade kunnat erhållits om vi deklarerat medelantal som heltal. 2.4 Uttryck och operationer Ett uttryck är en speciell syntaktisk konstruktion. De flesta programsatser är i sig själva ett uttryck, eller innehåller ett uttryck. Vi har redan sett flera exempel på uttryck med operatorer. Vi har bland annat sett: Uttryck 1: antalbananer = 89; och Uttryck 2: medelantal = (antalbananer + antalapelsiner) / 2.0; och Uttryck 3: sort"); System.out.println( "Snitt "+ medelantal +" frukter av varje Deklarationssatserna räknas inte till uttryck Uttryck 1 är ett enkelt uttryck medan uttryck 2 och 3 är sammansatta. Vi kan se att det enkla uttrycket 1 består utav en operator, =, och två operander. antalbananer och 89. Det sammansatta uttrycket är flera hopslagna enkla uttryck. 2.4.1 Binära operationer Den vanligaste formen av enkla uttryck är just en binär operator och dess operander. Operatorn kallas binär eftersom den alltid behöver två operander. De binära operatorerna i java är:

Aritmetiska operatorer + Addition Subtraktion * Multiplikation / Division % Modulus += Addition med tilldelning = Subtraktion med tilldelning *= Multiplikation med tilldelning /= Division med tilldelning %= Modulus med tilldelning Tilldelningsoperator = Tilldelning Logiska operatorer!= Icke lika med < Mindre än <= Mindre än lika med == Lika med > Större än >= Större än lika med && Logiskt AND Logiskt OR Bitoperatorer ^ Exklusivt OR & Bitvis AND Bitvis OR ^= Exklusivt OR med tilldelning &= Bitwise AND med tilldelning = Bitvis OR med tilldelning De enkla räkneoperatorerna har behandlats tidigare, förutom modulusoperatorn. Varje räkneoperator har en tilldelningsvariant, exempelvis har + operatorn en variant +=. Denna operator är en ren bekvämlighet. I program stöter man ofta på situationer när en variabel ska öka eller minska i värde. Exempelvis int i; i = 65; System.out.println( " i har nu värdet 65 "); i = i + 8; System.out.println( " i har nu värdet 73 "); Exemplet är ett lösryckt programavsnitt som måste fogas in i main(string[] ) metoden för att fungera som program. Rad 4 i exemplet kan man alltså läsa ut som: Tilldela variabeln i det tidigare värdet på i plus 8. Mer korrekt ses satsen som att den består utav två operationer, där operation 1 är i + 8 med resultatet 73 av typen int, operation 2 är i = 73, i tilldelas värdet 73. Att öka värdet på en variabel på detta sätt är så vanligt att man har skapat en operator som utför denna sammansatta sats i en enda operation +=. Det lösryckta programavsnittet ovan omskrivet med += operatorn ser då ut som

int i; i = 65; System.out.println( " i har nu värdet 65 "); i += 8; System.out.println( " i har nu värdet 73 "); En marginell skillnad kan tyckas, men man lär sig snabbt att trivas med detta skrivsätt. Dessutom blir det väldigt tydligt då man läser programkoden. Fler exempel på räkneoperatorer kombinerade med tilldelning int i; i = 65; System.out.println( " i har nu värdet 65 " ); i -= 15; System.out.println( " i har nu värdet 50 "); i /= 5; System.out.println( " i har nu värdet 10 "); i *= 2; System.out.println( " i har nu värdet 20 "); Modulusoperatorn kan tänkas vara en ny bekantskap. En modulusoperation beräknar resten vid heltalsdivision. Heltalsdivision får man då man dividerar två värden av typen int och anger resultatet som ett heltal, ex 7 / 2 = 3. Divisionen 7 / 2 går inte jämt upp utan det korrekta svaret borde varit 7 / 2 = 3.5. Men eftersom det är fråga om heltalsdivision anger man inte decimaldelen av kvoten utan bara heltalsdelen. Istället anger man en rest för den del av kvoten som inte gick jämt upp som 7 / 2 = 3 rest 1. Resten kan beräknas ur heltalskvot * nämnare + rest = täljare, eller rest = täljare heltalskvot * nämnare. Modulusoperatorn har ett antal speciella användningsområden som kommer att framgå senare av exempel. 2.4.2 Unära räkneoperatorer Det finns ytterligare aritmetiska operatorer som är av unär typ. Dessa operatorer tar alltså bara en operand. ++ prefix inkrement, operator placeras före operand ++ postfix inkrement, operator placeras efter operand -- prefix dekrement, operator placeras före operand -- postfix dekrement, operator placeras efter operand Dessa operatorer ökar respektive minskar värdet på en numerisk variabel med ett. Den prefixa varianten sätts före variabelnamnet och den postfixa sätts efter variabelnamnet. int a; a = 8; ++a; // prefix System.out.println( "a har värdet 9"); a++; // postfix System.out.println( "a har värdet 10"); --a; // prefix a--; // postfix System.out.println( "a har värdet 8"); Skillnaden mellan prefix och postfix märks först om man sätter in operationerna i sammansatta uttryck. Den prefixa operationen ger som resultat det värde som variabeln har efter operationen, den postfixa ger det värde variabeln hade före operationen.

int a; int i; a = 8; i = ++a; // prefix ++a utvärderas till värdet 9 System.out.println( "a har värdet 9 och i har värdet 9"); i = a++; // postfix ++a utvärderas till värdet nio System.out.println( "a har värdet 10 och i har värdet 9"); i = --a; // prefix uttrycket - a ger värdet 9 i = a--; // postfix uttrycket a - ger värdet 9 System.out.println( "a har värdet 8 i har värdet 9"); Det som är skrivet i programkoden ovan efter tecknen // är kommentarer. En kommentar som skrivs på en rad startar med // och slutar då raden slutar. Det som står efter kommentartecknen kommer kompilatorn inte att bry sig om. Kommentarer står också ofta ensamma på en rad. int a; // Nu är variabeln a deklarerad. Kompilatorn bryr sig inte om denna rad Kommentarer är otroligt användbara som minnesanteckningar i programkod. Man kan även Skriva kommentarblock som sträcker sig över flera rader med symbolerna /* och */ ( observera ordningen). Tänk på att inte av misstag råka skriva några programsatser som ska utföras i ett kommentarblock. int a; /* Nu är variabeln a deklarerad. Kompilatorn bryr sig inte om raderna inuti kommentarblocket. Som tar slut nu. */ a = 8; 2.4.3 Tolkning av uttryck Funktionen hos ett binärt uttryck bestäms exakt av dess operator och dess operanders datatyper. Exempelvis Uttryck 1: antalbananer = 98; Tilldelningsoperatorn tillsammans med variabeln av typen int och siffran 98 av typen int anger att siffra 98 ( bestående av 4 bytes) ska kopiera (tilldela) dessa 4 bytes till variabeln antalbananer. Operationen som utförts kan beskrivas som (int ) = ( int ) Observera att detta inte är programsatser utan bara ett sätt att beskriva uttryck. Varje operation ger som resultat ett värde som kallas returvärde, detta värde har en datatyp som kallas returtyp eller resultattyp. Man får en exakt beskrivning av operationen om man dessutom anger returtypen som för Uttryck 1 är int. Detta kan man skriva som (int ) = (int ): int Generellt: ( datatyp operand till vänster ) operator ( datatyp operand till höger ) : returtyp Det som står till vänster om kolon kallas för operationens signatur. I tilldelningssatsen utnyttjas inte returvärdet. Det gör det däremot i den sammansatta satsen i Uttryck 2. medelantal = (antalbananer + antalapelsiner) / 2.0;

Satsen är sammansatt av tre enkla uttryck med var sin operator =, + och /. För att exakt hur satsen tolkas delar man upp den i dess enkla uttryck och utvärderar dom i tur och ordning. Denna ordning bestäms av operatorprioriteter som är angivna i bilaga operatorprioriteter. I korthet kan sägas att de flesta operatorer ska läsas från vänster till höger. Tilldelningsoperatorn = är ett tydligt undantag då den läses från höger till vänster. Uppenbara undantag finns också i aritmetiska uttryck som 3 + 4 * 5. Uttrycket 4*5 beräknas före additionen med 3, detta kommer sig av just operatorprioriteten. Utvärderingsordningen för operatorer kan alltid ändra med hjälp av parenteser. Jämför: ( 3 + 4 ) * 5 I tur och ordning utvärderas antalbananer + antalapelsiner denna operation är en addition mellan två heltal, och resultatet är ett heltal alltså ( int ) + ( int ) : int Då operationen är utförd har 89 och 56 adderats och resultatet 145 av typen int erhållits. Därefter utvärderas nästa operation, / operationen. Den kan man läsa ut som eller 145 / 2.0 (int ) / ( double ): double Detta kommer att medföra något som kallas type promotion där heltalet omvandlas till ett flyttal (mindre typ till större typ, det mindre talområdet omvandlas till det större). (double ) / ( double ): double Resultatet av en division med flyttal är ett flyttal. Av denna operation erhålls resultatet 72.5 av typen double. Därefter utförs operationen = eller medelantal = 72.5 ( double )= ( double ) : double För räkneoperatorerna gäller allmänt att om någon av operanderna är av flyttalstyp kommer resultatet vara av flyttalstyp, och omvänt, om båda operanderna är av heltalstyp kommer resultatet att vara av heltalstyp. Exempelvis ( double ) + ( double ) : double En addition av två flyttal ger resultat av flyttalstyp ( double ) - ( int ) : double En subtraktion av ett flyttal och ett heltal ger resultat av flyttalstyp på samma sätt som divisionen ovan..

Regeln för typer vid räkneoperationer kan ge en del oväntade resultat, i synnerhet vid division. Division mellan två heltal ger resultat av typen heltal ( int ) / ( int ) : int Exempelvis ger divisionen 13 / 5 resultatet 2. Betrakta: class StrangeDivision { public void main(string [] arg){ { int i, j; i = 14; j = 19; double resultat; resultat = j / i; System.out.println( " 19 / 14 = " + resultat); } } Vid programkörning skrivs på skärmen 19 / 14 = 1 Detta trots att variabeln resultat deklarerats som double. Eftersom operationen ( int ) / (int ) ger resultattyp int kommer variabeln resultat att innehålla värdet 1. Om vi stället hade skrivit Rad 8: resultat = j * 1.0 / i; Skulle vänsterledet i divisionen vara ett flyttal med divisionen ( double ) / ( int ) : double Och värdet på variabeln resultat skulle då vara 1.35714