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:
- Starta DrJava (om du inte redan gjort detta).
- Klicka på i nederkanten.
- Gör interaktionsrutan (eng. Interactions Pane) större genom att dra i kanterna.
- 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
- Det är skillnad på att räkna med heltal och att räkna med decimaltal!
- Datorer räknar inte alltid helt rätt!
- Datorer räknar ibland helt galet!
- 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:
- Variabler måste alltid deklareras.
- I deklarationen anges namn och typ.
- 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
-
Leta upp klassen
Math
i javadokumentationen och se vilka funktioner som finns! - Ta reda på värdet på Pi
-
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.
x = y
är tillåten om
- x och y har samma typ eller om
- x säkert kan "rymma" värdet av y så att ingen information går förlorad (nåja, det är nästan sant).
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åndouble
till int
så kan man använda en så kallad
typkonverteringsoperator (eng. type cast).
Exempel:
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:
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
-
Funktionen
Math.random()
returnerar ett slumptal i form av ettdouble
-värde mellan 0 och 1. Skriv ett uttryck som skapar ett slumptal i form av ett heltal mellan 1 och 6.(int)(Math.random()*6 + 1)
-
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?(int)(x + 0.5)
(förutsätter attx
≥ 0) -
Vilka datatyper har du sett under denna lektion?
int
för heltal
double
för flyttal -
Vilka aritmetiska operatorer har du sett
under denna lektion?
+, -, *, /, %,
++, --,
+=, -=, *=, /=, %= -
Vad är det för skillnad mellan heltals- och flyttalsaritmetik?
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. -
Vilka regler gäller det när man blandar heltal och flyttal i samma uttryck?
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 -
Vad finns i klassen
Math
? Hur används den? -
Vad är en variabel och vilka egenskaper har den?
En variabel har ett namn,
en datatyp och ettvärde.
Värdet kan ändras med tilldelningsoperatorn (=
). -
Vilka typkonverteringar kan ske automatiskt?
Från
int
tilldouble
-
Hur gör man explicita tykonverteringar?
Genom att sätta typ-namnet inom parentes framför det som ska konverteras.
Exempel:int x = (int)(10*Math.sin(x));
Strängar
- En sträng är en följd av 0 eller flera tecken (bokstäver, siffror, specialtecken, ...)
- Strängar ("strängkonstanter") omges av citationstecken (Exempel: "Ciao!")
-
Datatypen för att hantera strängar heter
String
som är en klass och inte en primitiv typ. -
En variabel deklarerad som
String
innehåller inte själva strängen utan endast en referens (adress, pekare) till ett så kallat String-objekt där texten finns lagrad -
Ett
String
-objekt kan inte ändras men enString
-variabel kan sättas att referera ett annatString
-objekt -
Operatorn
+
används för att sätta ihop (konkatenera) 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 ? |
+
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.
Dölj style3dev.css för att bli av med annoteringarna!