SMD 134
Schematiskt Javaprogram
Objektorienterad programmering
Dagens agenda:
• Typer i Java: primitiva datatyperna, referenstyper
• Variabler och variabeltilldelningar med primitiva
typer
• Konstanter av de olika typerna.
• Heltalsräkning och flyttalsräkning.
public class KlassNamn{
public static void main (String[] argv){
// Här står vad som skall göras när
// programmet exekveras (En sekvens av
// programsatser)
}
// Efter definitionen av main kan det följa
// definitioner av andra metoder
}
• Hanteringen av referenstyper i Java
• Användningen av = för att göra tilldelningar av
värden till variabler och av == och equals för att
jämföra värden
• Tre sätt att få in data till ett Javaprogram:
hårdlödning, inmatning vid programstart,
inhämtning under programexekvering.
Peter Lestander
Kommentarer i Java
Peter Lestander
Programsats
/**
* Detta är ett sätt att skriva en kommentar
* som går över flera rader
*/
• Ett kommando till datorn
• Måste ha en sidoeffekt annars är
kommandot överflödigt
/* Detta är ett annat sätt att skriva en
kommentar som går över flera rader */
Exempel på programsatser:
// Detta är en enradskommentar
pi = 3.141593;
namn = “Peter Lestander”;
System.out.println(“Hello, World!”);
Felaktig programsats:
7+5;
hejsan;
Peter Lestander
Peter Lestander
Block
Block & Variabler
• Ett block omges av { och }
• Markerar att ett antal programsatser hör ihop
int x = 5;
// Exempel på ett block
while(x <= 5){
x--; // Samma som x-1
System.out.print("x= ");
System.out.println(x);
}
• Block hjälper till att indentera koden som skrivs
• Indentering nödvändig för att kunna läsa och
förstå större program
• Det kan vara bra att sätta in en variabel i ett block
för att kunna använda namnet på variabeln igen
int x = 1;
int y = 0;
{
int a = 3;
x = 5;
y = a + x;
}
// Skulle y = a + y fungera?
y = y + x;
System.out.println(y);
// Vad skrivs ut?
Peter Lestander
Ett programexempel
• Man kan skapa hur ”djupa” block man vill i Java
/**
* Detta program hälsar på både
* engelska och svenska
*/
public class Hejsan{
public static void main(String[] argv){
{{{{
// engelsk hälsning
System.out.println("Hello, World!");
}}}}
{{{{
// svensk hälsning
System.out.println("Hej, världen!");
}}}}
}
}
Peter Lestander
Peter Lestander
Variabler
• En variabel är ett namngivet utrymme i datorns
minne som kan innhålla ett värde av en viss typ
• En variabel måste deklareras innan den kan
användas
Exempel:
// deklarering
int heltal ;
float reellt_heltal;
char tecken;
// tilldelning
heltal = 10;
reellt_heltal = 25.98;
tecken = ’X’;
Peter Lestander
Tilldelningssats
Variabelnamn (Identifierare)
• Allmän form <typ> <variabelnamn> = <uttryck>
• Variabeln av en viss typ till höger om ”=” tilldelas
värdet av yttryck
• Kan göras direkt vid deklarationen, kallas initiering
av variabeln
Exempel:
int antalHundar = 25;
int x = 325+175;
char tecken = ’R’;
boolean b = true;
double abc = 1.125;
• Får bestå av bokstäver (inkl åäöÅÄÖ,_$) samt
siffror
• Första tecknet måste vara en bokstav,_ eller $
• Ej reserverade ord
Giltiga
helTal
_lame4u_
$dollar
dettaÄrEnRänare
Peter Lestander
Namnkonventioner
Ogiltiga
hel.tal
2lame4u
€uro
boolean
Peter Lestander
Primitiva datatyper
• Använd tydliga namn så alla kan förstå
Typ
Storlek
• Tydligare variabelnamn ju längre ifrån
deklarationen de skall användas
byte
short
int
long
8
16
32
64
float
double
32 bitar
64 bitar
Bra Variabelnamn
antalBilar
counter
rad
årtal
Mindre bra
gnorf
kalle
x
blarf
• Börja alltid med liten bokstav
• Vid sammansatta ord börjar alltid det andra
ordet med stor bokstav
Exempel:
ettRiktigtLångtVariabelNamn
Peter Lestander
bitar
bitar
bitar
bitar
char
16 bitar
boolean 8 bitar
boolean har bara 2 värden, true eller false
Peter Lestander
Konstanter
Några problem
Heltalskonstanter
0
124
-3456789
Teckenkonstanter
’a’
’A’
’@’
Vad kommer att hända?
int x = 1000000 * 1000000;
Java svarar: -727379968
Flyttalskonstanter
12.50
3.141592654
0.00025
-1.125
Booleska konstanter
true
false
Vad kommer att hända?
int x = 100000;
int y = x*x/x;
Java svarar: 14100
Teckenkonstanter, se unicode tabell
http://thomas.prydslauritsen.dk/nyttigt/ascii-table.html
OBS, alltid decimalpunkt i flyttal, inte komma
Peter Lestander
Arrayer
Vad kommer att hända?
int x = 10;
int y = x/3;
int z = y*3;
Java svarar: 9
Är inte z = x = 10?
Peter Lestander
Arrayer fortsättning
• Ett antal variabler av samma typ lagrade i
samma enhet
• Att deklarera en arrayvariabel av typen int
int [] a;
• Om en array har längden k, så är första
minnesplatsen i arrayen 0 och sista k-1
• Att skapa en array av storleken 5 och ”knyta” a
till den
a = new int[5];
• Notation för array, antag att vi skapat en array
av storleken k och tilldelat den namnet a
Första platsen
Andra platsen
Tredje platsen
.
.
.
Sista platsen
a[0]
a[1]
a[2]
a[k-1]
Peter Lestander
• Värdet av a är inte ett värde utan en referens
till arrayen som skapats i datorns minne
• Att ge den andra platsen i arrayen ett värde
a[1] = 25;
• Att direkt deklarera och initialiseras en array variabel.
int [] a = new int[10]
Peter Lestander
Strängar
Strängar fortsättning
• En sträng är en ändlig följd av tecken
• Att konkatenera en sträng, att slå ihop 2 strängar
till en görs med operatorn +
• En sträng är oförändrelig
• Strängar i Java representeras av klassen String, här
finns en stor mängd metoder för att manipulera med
strängar
Strängkonstanter:
”Kalle Anka”
”smd134”
”12345”
”--{---@”
Exempel 1:
”Kalle ”+”och ”+”Kajsa ”+”Anka”;
Blir:
Kalle och Kajsa Anka
Exempel 2:
”Svaret ”+”är ”+(100-25);
Blir:
Svaret är 75
Att skapa en sträng:
String namn = ”Kalle Anka”;
Peter Lestander
Aritmetiska operatorer
• +, - och * används som i matematiken
• / ska man vara lite försiktig med
Peter Lestander
Aritmetiska operatorer forts..
int x = 3;
int y = 6:
int z;
– 9.0 / 5.0 = 1.8 men 9 / 5 = 1
• % modulo, heltalsrest
– 9 / 5 = 1 men 9 % 5 = 4
– resten vid heltalsdivision
• = är en tilldelning, x = 9.0 / 5.0 innebär att x
tilldelas vädet 1.8
Peter Lestander
z = y – x + x * y + y / x;
Java kommer att tilldela z = 23
De matematiska precedensreglerna gäller, om
osäker använd paranteser
z = y – x + (x * y) + (y / x)
Peter Lestander
++ och --
++ och – fortsättning
• Ärvda från programmeringsspråket C
• Kan användas före eller efter en
uppräkningsbar variabel
int x = 0;
int y = 0;
int x = 5;
int y;
y = x++;
Y = ++x;
• Mycket användbara
• Kort skrivsätt
• Lätt att missbruka
//motsvarar y = x, x = x + 1
//motsvarar x = x + 1, y = x
y = ++x + ++x;
// y får här värdet 3
// x får värdet 2
Peter Lestander
Villkor och villkorsoperatorn
• Ett sätt att ta reda på om något är sant eller
falsk, true eller false
x
x
x
x
x
x
== y
!= y
< y
> y
<= y
>= y
x lika med y?
x inte lika med y?
x mindre än y?
x större än y?
x mindre eller lika med y?
x större eller lika med y?
Exempel:
public class BoolTest{
public static void main(String[] argv){
int a=10;
int b=11;
System.out.println(a==b);
}
}
Peter Lestander
Hårdlödning
• Ett sätt att få in data till ett java program
• Ej speciellt användbart
Exempel 1
public class Räkna{
public static void main(String[] argv){
int x=1;
int y=2;
System.out.println(x+y);
}
}
Exempel 2
public class KalleAnka{
public static void main(String[] argv){
System.out.println(”Kalle ”+”Anka”);
}
}
Java svarar: false
Peter Lestander
Peter Lestander
Torkels LasIn program
Inläsning vid programstart
• Inläsning under programexekvering
• java <klassnamn> <data>
• Finns länk på hemsidan (uppdateras under em)
• Klassen Integer Java API JDK 1.3.1
• metoden man använder är parseInt(String s)
• Mycket bra sätt att läsa in heltal, flyttal och strängar
• Metoder i Torkels program för att läsa in data till
ett program, läsHeltal,läsFlyttal och
läsSträng
Exempel
public class MataIn{
public static void main(String[] argv){
int test;
test=LasIn.läsHeltal("Test :");
System.out.print(”Test är nu: ”+test);
}
}
• Samma för double, klassen Double
• metoden är parseDouble(String s)
Exempel
public class DataDirekt{
public static void main(String[] argv){
int indata=Integer.parseInt(argv[0]);
int x = 10;
System.out.println(indata+x);
}
}
>java DataDirekt 25
35
Peter Lestander
Ett snyggt sätt
import java.io.*;
Peter Lestander
Nästa föreläsning
• if satser, for satser, while satser
public class TestaLäsaIn {
public static void main(String[] argv) throws
Exception {
int tal;
//------ Input from keyboard-------//
InputStreamReader isr;
BufferedReader keyb;
String instring;
isr = new InputStreamReader(System.in);
keyb = new BufferedReader(isr);
//--------------------------------- //
• introduktion av algoritmer genom sökning och
sortering av arrayer
• användning av for, if och while för att
implementera algoritmer
• strukturerad programmering
• booleska operatorer
System.out.print("Skriv ett tal: ");
instring = keyb.readLine();
tal=Integer.valueOf(instring).intValue();
System.out.println("Du skrev: "+tal );
Läs gärna:
}
JFG kap 11-12, 14-16
JSS kap 3.2, 3.4-3.6, 3.7, 6.2
}
Peter Lestander
Peter Lestander