Observera att detta är en arbetsversion av sidan!
Dölj style3dev.css för att bli av med annoteringarna!

Lektion 1: Grundläggande Java och användning av DrJava

Syfte: Introducera DrJava-miljön och grundläggande element i Java-språket.
Viktiga begrepp: Datatyperna int och double
Konstanter, variabler, aritmetik.
Klassen Math.
Strängar och String-objekt.
Arbetsform: Arbeta gärna tillsammans med någon men skriv alltid egen kod!
Diskutera med varandra!
Uppskattad arbetstid: 1 timme.
Redovisning: Ingen obligatorisk men diskutera oklarheter med lärare/labbhandledare.

Komma igång

Om det är första gången du ska använda DrJava på denna kurs ska du, innan du startar DrJava, läsa och göra det som beskrivs på någon länkarna (beroende på vilket system du avser köra på):

Därefter:

  1. Starta DrJava (om du inte redan gjort detta).
  2. Klicka på i nederkanten.
  3. Gör interaktionsrutan (eng. Interactions Pane) större genom att dra i kanterna.
  4. Lägg DrJava-fönstret och fönstret du läser detta i bredvid varandra så att du ser båda och kan kopiera kod från detta fönster till interaktionsrutan.

Obs: Interaktionsrutan är speciell för programmeringsmiljön DrJava. Många andra Java-miljöer saknar en sådan.

Tips: När du använder interaktionsrutan är det bra att veta att man kan ta tillbaka, redigera och göra det man skrivit tidigare med hjälp av pilarna på tangentbordet.

Aritmetik

Prova att i tur och ordning skriva nedanstående aritmetiska uttryck i interaktionsrutan. Begrunda resultaten!

Prova detta! Kommentar
2*1/2
1/2*2
2*(1/2)
2*(1./2)
2.*(1/2)
37%10 Procent-tecknet är rest-operator
37%5
5%3
2734/10*10
1/0
1./0
1e3 + 2e3
1024*1024*1024
1024*1024*1024*2 Kom ihåg att du kan ta igen det gamla uttrycket med pilarna!
1024*1024*1024*2*2
0.1*0.1

Försök förstå varför det blir som det blir!

Lärdomar

  1. Det är skillnad på att räkna med heltal och att räkna med decimaltal!
  2. Datorer räknar inte alltid helt rätt!
  3. Datorer räknar ibland helt galet!
  4. Det är viktigt att veta i vilken ordning operationer utförs!

Datatyper

Begreppet datatyp är mycket viktigt i Java (liksom många andra programmeringsspråk). I Java skiljer man mellan primitiva datatyper och referenstyper.

Ovan såg vi exempel på två primitiva datatyper: heltal (tal utan decimaler) och flyttal (tal som skrivs med decimalpunkt).

Det finns flera olika heltalstyper: byte, short, int och long. De skiljer sig i hur mycket plats de tar i minnet och därmed hur stora talen kan vara. Vi kommer huvudsakligen använda typen int.

Det finns också två olika flyttalstyper: float och double. Även dessa skiljer sig i hur stor plats de tar och därmed i hur stora talen kan vara och hur många siffrors noggrannhet de kan ha. Vi kommer huvudsakligen använda typen double.

Fråga: Vad är skillnaden mellan å ena sidan heltalstyper och å andra sidan flyttalstyper?
Diskutera med en handledare om du är osäker på svaret!

Alla datatyper som nämndes ovan är primitiva. Referenstyper kommer att introduceras i nästa lektion. (Sist i denna lektion nämner vi typen String som är ett exempel på en referenstyp.)

Variabler

En variabel är en namngiven storhet som kan lagra ett värde. I Java gäller:

  1. Variabler måste alltid deklareras.
  2. I deklarationen anges namn och typ.
  3. Det går att ge variabeln ett värde i deklarationen.

Skriv följande i interaktionsrutan:

Skriv! Kommentar
double x; Deklarerar en variabel av typen double.
double y = 14.5; Deklarerar en variabel och ger den ett värde.
double z = -1.2e3;
int i = 4; Deklarerar en variabel av typen int.
y*z
x*y
y*i
u

Vilka slutsatser kan man dra av resultatet av resultaten?

Generellt i Java gäller att deklarationer och satser ska avslutas med semikolon men just i DrJavas interaktionsruta innebär ett radslut utan semikolon att värdet ska skrivas ut. (Prova vad som händer om du sätter semikolon efter något av de sista uttrycken!)

Tilldelningar

Variabler kan ges nya värden med hjälp av tilldelningsoperatorn =.

Prova i tur och ordning (med och utan semikolon)!

Prova!
i = 2;
x = 4.5;
y = i*x;
y = i*x;
i = i + 2;

Hur tar man reda på värdena på variablerna i, x och y har?

Prova!
int c = 2;
++c
c
c++
c
c--
c

Vad gör dessa operatorer?

Vad är det för skillnad på uttrycken ++x och x++?

Prova!
int x = 2;
x += 4;
x
x *= 2
x
x -= 11
x
x /= 2
x

Matematiska funktioner

Klassen Math innehåller matematiska funktioner.

Exempel: Beräkna hypotenusan i en rätvinklig triangel

Prova!
double k1 = 3, k2 = 4;
double h=Math.sqrt(k1*k1 + k2*k2);
h

Exempel på andra funktioner i klassen Math är sin, cos, exp och log.

I klassen finns också konstanterna PI och E som alltså skrivs som Math.PI och Math.E. (Observera att konstanter i java enligt konventionerna alltid skrivs med VERSALER.)

Övningar

  1. Leta upp klassen Math i javadokumentationen och se vilka funktioner som finns!
  2. Ta reda på värdet på Pi
  3. Prova funktionen Math.random() några gånger

Typkonverteringar

Prova!
double x = 0.5;
int i = 2;
x = 2*i
i = x*2

Den första tilldelningen gick bra men inte den andra.

Princip:
Tilldelningen

x = y

är tillåten om


Det senare är fallet om t ex x är double och y är float, int eller short.

I alla dessa fall är den omvända tilldelningen y = x illegal.

Explicita typkonverteringar

Om man vill göra en "otillåten" tilldelning t ex från double till int så kan man använda en så kallad typkonverteringsoperator (eng. type cast).

Exempel:

double x = 2.9; int n; n = (int) x;

varvid n får värdet 2 dvs det trunkerade värdet av x.

Konverteringen, som ofta kallas typkastning, kan göras var som helst i uttryck.

Exempel:

(int)(100*(1/(double) n) + (int)Math.exp(x));

Typkastningsoperatorerna skrivs alltså som ett typnamn (int, long, float, double...) omgivet av parentestecken.
Dessa operatorer har hög prioritet vilket innebär att man ofta behöver använda parenteser för att få dem att verka på rätt uttryck.

Frågor och övningar

  1. Funktionen Math.random() returnerar ett slumptal i form av ett double-värde mellan 0 och 1. Skriv ett uttryck som skapar ett slumptal i form av ett heltal mellan 1 och 6. Svar
    (int)(Math.random()*6 + 1)
  2. Vid omvandling från flyttalstyper till heltalstyper trunkeras värdena dvs decimalerna stryks. Hur kan man göra om man vill att värdet av x rundat till närmaste heltal? Svar
    (int)(x + 0.5)    (förutsätter att x ≥ 0)
  3. Vilka datatyper har du sett under denna lektion? Svar
    int för heltal
    double för flyttal
  4. Vilka aritmetiska operatorer har du sett under denna lektion? Svar
    +, -, *, /, %,
    ++, --,
    +=, -=, *=, /=, %=
  5. Vad är det för skillnad mellan heltals- och flyttalsaritmetik? Svar
    Heltal representeras exakt och heltalsaritmetiken ger exakta resultat så länge resultaten håller inom typens talområde.
    Flyttalen kan inte alltid representeras exakt och aritmetiken kan ge avrundningsfel.
  6. Vilka regler gäller det när man blandar heltal och flyttal i samma uttryck? Svar
    Java behandlar varje enskild operation för sig. Om båda operanderna är av heltalstyp så blir resultatet av heltalstyp. Om den ena är av heltalstyp och den andra av flyttalstyp så konverteras först heltalsoperanden till flyttal och resultatet blir ett flyttal.
    Exempel: Uttrycket
       (double)(1/2 + (int)(3./2)) + 2
    
    har värdet 3.0
  7. Vad finns i klassen Math? Hur används den? Svar
    Ett antal matematiska funktioner som sin, cos, exp, log ....
    Se vidare dokumentationen
  8. Vad är en variabel och vilka egenskaper har den? Svar
    En variabel har ett namn,
    en datatyp och ettvärde.
    Värdet kan ändras med tilldelningsoperatorn (=).
  9. Vilka typkonverteringar kan ske automatiskt? Svar
    Från int till double
  10. Hur gör man explicita tykonverteringar? Svar
    Genom att sätta typ-namnet inom parentes framför det som ska konverteras.
    Exempel:
       int x = (int)(10*Math.sin(x));

Strängar

Exempel:

Prova! Kommentar
String name ="Kalle"; String familyName = "Andersson"; int age = 14;
String fullName = name + " " + familyName; Konkatenering
fullname + " är " + age + " år" Blanding av strängar och tal
1 + 2 + "hej"
1 + (2 + "hej")
"hej" + 1 + 2
"hej \n du \t\tglade! " Vad gör specialtecknen \n och \t?
Observera att operatorn + har helt annan innebörd om minst en av dess operander är av type String än om båda operanderna är numeriska.

Gå till nästa lektion.

Valid CSS!