You are on page 1of 52

Programmering

http://tinyurl.com/programmeringDT2012
F
orelasning 2

Ver
onica Gaspes
www2.hh.se/staff/vero

Center for Research on Embedded Systems


IDE-sektionen

Att anvanda kommandoraden

/*
Prints the first command line argument
*/
public class UseCommandLine{
public static void main(String [] cmdLn){
System.out.println(cmdLn[0]);
}
}

Flera kommandon
/*
Prints
Hello to you, <the first command line argument>!
*/
public class Hello2You{
public static void main(String [] cmdLn){
System.out.print("Hello to you, ");
System.out.print(cmdLn[0]);
System.out.println("!");
}
}

Text

F
or att hantera text finns en typ
av data som i Java kallas f
or
String.

Typer
I de flesta programspr
ak finns
flera typer av data. En typ ar en
mangd varden och de operationer
man kan g
ora med dessa varden.

Typen String
Varden
Typiska literaler
operation
operator

f
oljder av tecken
"Hello, " "1 " " * "
Att satta ihop
+

Text

F
or att hantera text finns en typ
av data som i Java kallas f
or
String.

Typer
I de flesta programspr
ak finns
flera typer av data. En typ ar en
mangd varden och de operationer
man kan g
ora med dessa varden.

Typen String
Varden
Typiska literaler
operation
operator

f
oljder av tecken
"Hello, " "1 " " * "
Att satta ihop
+

Text

F
or att hantera text finns en typ
av data som i Java kallas f
or
String.

Typer
I de flesta programspr
ak finns
flera typer av data. En typ ar en
mangd varden och de operationer
man kan g
ora med dessa varden.

Typen String
Varden
Typiska literaler
operation
operator

f
oljder av tecken
"Hello, " "1 " " * "
Att satta ihop
+

Text

F
or att hantera text finns en typ
av data som i Java kallas f
or
String.

Typer
I de flesta programspr
ak finns
flera typer av data. En typ ar en
mangd varden och de operationer
man kan g
ora med dessa varden.

Typen String
Varden
Typiska literaler
operation
operator

f
oljder av tecken
"Hello, " "1 " " * "
Att satta ihop
+

Text

Exempel
Uttryck

Varde

"Hello, " + "Vero!"

"Hello, Vero!"

"1" + " 2 " + "1"

"1 2 1"

"1234" + " + " + "99"

"1234 + 99"

"1234" + "99"

"123499"

Variabler

Man kan anvanda namn som


refererar till ett varde. Man kallar
dessa namn for variabler eller
parametrar, beroende p
a var de
f
orekommer.

Exempel
I programmet Hello2You ar
CmdLn ett s
adant namn och vi
sager att det ar parametern till
main. Och cmdLn[0] st
ar for ett
varde av typen String.

Fler uttryck av typ String


"Hello to you, " + cmdLn[0] + "!"
Vi vet inte vilket varde uttrycket har f
orran vi vet vilket varde
cmdLn[0] har! Och den f
ar ett varde nar vi k
or programmet med
ett kommandoradsargument!

Variabler

Man kan anvanda namn som


refererar till ett varde. Man kallar
dessa namn for variabler eller
parametrar, beroende p
a var de
f
orekommer.

Exempel
I programmet Hello2You ar
CmdLn ett s
adant namn och vi
sager att det ar parametern till
main. Och cmdLn[0] st
ar for ett
varde av typen String.

Fler uttryck av typ String


"Hello to you, " + cmdLn[0] + "!"
Vi vet inte vilket varde uttrycket har f
orran vi vet vilket varde
cmdLn[0] har! Och den f
ar ett varde nar vi k
or programmet med
ett kommandoradsargument!

Variabler

Man kan anvanda namn som


refererar till ett varde. Man kallar
dessa namn for variabler eller
parametrar, beroende p
a var de
f
orekommer.

Exempel
I programmet Hello2You ar
CmdLn ett s
adant namn och vi
sager att det ar parametern till
main. Och cmdLn[0] st
ar for ett
varde av typen String.

Fler uttryck av typ String


"Hello to you, " + cmdLn[0] + "!"
Vi vet inte vilket varde uttrycket har f
orran vi vet vilket varde
cmdLn[0] har! Och den f
ar ett varde nar vi k
or programmet med
ett kommandoradsargument!

Variabler

Man kan anvanda namn som


refererar till ett varde. Man kallar
dessa namn for variabler eller
parametrar, beroende p
a var de
f
orekommer.

Exempel
I programmet Hello2You ar
CmdLn ett s
adant namn och vi
sager att det ar parametern till
main. Och cmdLn[0] st
ar for ett
varde av typen String.

Fler uttryck av typ String


"Hello to you, " + cmdLn[0] + "!"
Vi vet inte vilket varde uttrycket har f
orran vi vet vilket varde
cmdLn[0] har! Och den f
ar ett varde nar vi k
or programmet med
ett kommandoradsargument!

Variabler

Man kan anvanda namn som


refererar till ett varde. Man kallar
dessa namn for variabler eller
parametrar, beroende p
a var de
f
orekommer.

Exempel
I programmet Hello2You ar
CmdLn ett s
adant namn och vi
sager att det ar parametern till
main. Och cmdLn[0] st
ar for ett
varde av typen String.

Fler uttryck av typ String


"Hello to you, " + cmdLn[0] + "!"
Vi vet inte vilket varde uttrycket har f
orran vi vet vilket varde
cmdLn[0] har! Och den f
ar ett varde nar vi k
or programmet med
ett kommandoradsargument!

Hello2You igen
/*
Prints
Hello to you, <the first command line argument>!
*/
public class Hello2You{
public static void main(String [] cmdLn){
System.out.println("Hello to you, "
+ cmdLn[0]
+ "!");
}
}

Heltal

For att hantera heltal finns en typ av data som i Java kallas for
int
Typen int
Varden
Typiska literaler
operation
operator

heltal mellan 231 och 231 1


1234 99 -99 1000000
addition subtraktion multiplikation kvot rest
+
*
/
%

Heltal

For att hantera heltal finns en typ av data som i Java kallas for
int
Typen int
Varden
Typiska literaler
operation
operator

heltal mellan 231 och 231 1


1234 99 -99 1000000
addition subtraktion multiplikation kvot rest
+
*
/
%

Heltal

For att hantera heltal finns en typ av data som i Java kallas for
int
Typen int
Varden
Typiska literaler
operation
operator

heltal mellan 231 och 231 1


1234 99 -99 1000000
addition subtraktion multiplikation kvot rest
+
*
/
%

Heltal
Exempel
uttryck
5 + 3
5 - 3
5 * 3
5 / 3
5 % 3
1 / 0
3 * 5 - 2
3 + 5 / 2
3 - 5 - 2
(3 - 5) - 2
3 - (5 - 2)

varde
8
2
15
1
2
13
5
-4
-4
0

kommentar

inga decimaler!
resten!
exekveringsfel!
* har precedens!
/ har precedens!
vanster associativitet
battre stil!

Heltal

public class IntOps{


public static void main(String[] cmdLn){
System.out.println(5 / 3);
System.out.println(5 % 3);
}
}
Java kan skriva ut heltal ocks
a!

Typkonvertering

Vi gor om programmet f
or att testa med tal angivna i
kommandoraden. Vi vill till exempel kunna k
ora
> java IntOps 9 2
public class IntOpsCmdLn{
public static void main(String[] cmdLn){
System.out.println(cmdLn[0] / cmdLn[1]);
System.out.println(cmdLn[0] % cmdLn[1]);
}
}

Typkonvertering

Vi gor om programmet f
or att testa med tal angivna i
kommandoraden. Vi vill till exempel kunna k
ora
> java IntOps 9 2
public class IntOpsCmdLn{
public static void main(String[] cmdLn){
System.out.println(cmdLn[0] / cmdLn[1]);
System.out.println(cmdLn[0] % cmdLn[1]);
}
}

Typkonvertering
> javac IntOpsCmdLn.java
IntOpsCmdLn.java:8: operator / cannot be applied
to java.lang.String,java.lang.String
System.out.println(cmdLn[0]/cmdLn[1]);
^
IntOpsCmdLn.java:9: operator % cannot be applied
to java.lang.String,java.lang.String
System.out.println(cmdLn[0]%cmdLn[1]);
^
2 errors
>
Det blir kompileringsfel: operatorerna / och % fungerar inte med
String! och cmdLn[0] och cmdLn[1] ar strangar!

Typkonvertering
> javac IntOpsCmdLn.java
IntOpsCmdLn.java:8: operator / cannot be applied
to java.lang.String,java.lang.String
System.out.println(cmdLn[0]/cmdLn[1]);
^
IntOpsCmdLn.java:9: operator % cannot be applied
to java.lang.String,java.lang.String
System.out.println(cmdLn[0]%cmdLn[1]);
^
2 errors
>
Det blir kompileringsfel: operatorerna / och % fungerar inte med
String! och cmdLn[0] och cmdLn[1] ar strangar!

Typkonvertering
public class IntOpsCmdLnConv{
public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x / y);
System.out.println(x % y);
}
}
1

Vi lagger till 2 variabeldeklarationer, f


or namnen x och y av
heltalstyp (int).

Vi konverterar en strang till heltal med


Integer.parseInt("123"). F
or att detta skall fungera
m
aste strangen vara en f
oljd av siffror!

Vi bestammer vardet som namnen st


ar f
or med = (tilldelning)

Typkonvertering
public class IntOpsCmdLnConv{
public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x / y);
System.out.println(x % y);
}
}
1

Vi lagger till 2 variabeldeklarationer, f


or namnen x och y av
heltalstyp (int).

Vi konverterar en strang till heltal med


Integer.parseInt("123"). F
or att detta skall fungera
m
aste strangen vara en f
oljd av siffror!

Vi bestammer vardet som namnen st


ar f
or med = (tilldelning)

Typkonvertering
public class IntOpsCmdLnConv{
public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x / y);
System.out.println(x % y);
}
}
1

Vi lagger till 2 variabeldeklarationer, f


or namnen x och y av
heltalstyp (int).

Vi konverterar en strang till heltal med


Integer.parseInt("123"). F
or att detta skall fungera
m
aste strangen vara en f
oljd av siffror!

Vi bestammer vardet som namnen st


ar f
or med = (tilldelning)

Typkonvertering
public class IntOpsCmdLnConv{
public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x / y);
System.out.println(x % y);
}
}
1

Vi lagger till 2 variabeldeklarationer, f


or namnen x och y av
heltalstyp (int).

Vi konverterar en strang till heltal med


Integer.parseInt("123"). F
or att detta skall fungera
m
aste strangen vara en f
oljd av siffror!

Vi bestammer vardet som namnen st


ar f
or med = (tilldelning)

Typkonvertering
public class IntOpsCmdLnConv{
public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x / y);
System.out.println(x % y);
}
}
1

Vi lagger till 2 variabeldeklarationer, f


or namnen x och y av
heltalstyp (int).

Vi konverterar en strang till heltal med


Integer.parseInt("123"). F
or att detta skall fungera
m
aste strangen vara en f
oljd av siffror!

Vi bestammer vardet som namnen st


ar f
or med = (tilldelning)

Heltal och text

public class IntOpsTest{


public static void main(String[] cmdLn){
int x = Integer.parseInt(cmdLn[0]);
int y = Integer.parseInt(cmdLn[1]);
System.out.println(x + " / " + y + " = " + x / y);
System.out.println(x + " % " + y + " = " + x % y);
}
}
1

Automatisk konvertering till String

/ och % har hogre precedens an + s


a resultatet raknas ut
innan det laggs till texten!

Logik

For att hantera booleska varden finns en typ av data som i Java
kallas for
boolean
Typen boolean
values
literals
operations
operators

true
true
and
&&

false
false
or
not
||
!

Logik

For att hantera booleska varden finns en typ av data som i Java
kallas for
boolean
Typen boolean
values
literals
operations
operators

true
true
and
&&

false
false
or
not
||
!

Booleska operationer

Vi kan beskriva operationerna i sin helhet, inte bara exempel eller


f
orklaringar.

a
true
false

!a
false
true

a
true
true
false
false

b
true
false
true
false

a && b
true
false
false
false

a || b
true
true
true
false

Booleska operationer

Vi kan beskriva operationerna i sin helhet, inte bara exempel eller


f
orklaringar.

a
true
false

!a
false
true

a
true
true
false
false

b
true
false
true
false

a && b
true
false
false
false

a || b
true
true
true
false

Booleska operationer

Vi kan beskriva operationerna i sin helhet, inte bara exempel eller


f
orklaringar.

a
true
false

!a
false
true

a
true
true
false
false

b
true
false
true
false

a && b
true
false
false
false

a || b
true
true
true
false

Jamforelser

Operationer som tar varden av en typ och resulterar i ett booleskt


varde.
Exempel
op
==
!=
<
<=
>
>=

betyder
likhet
olikhet
mindre an
mindre eller lika an
mindre an
mindre eller lika an

true
2 == 2
2 != 3
2 < 13
2 <= 2
13 > 2
2 >= 2

false
2 == 3
2 != 2
2 < 2
3 <= 2
2 > 2
2 >= 3

Jamforelser

Operationer som tar varden av en typ och resulterar i ett booleskt


varde.
Exempel
op
==
!=
<
<=
>
>=

betyder
likhet
olikhet
mindre an
mindre eller lika an
mindre an
mindre eller lika an

true
2 == 2
2 != 3
2 < 13
2 <= 2
13 > 2
2 >= 2

false
2 == 3
2 != 2
2 < 2
3 <= 2
2 > 2
2 >= 3

ett
Ar
artal skott
ar?
Ett
ar ar skott
ar om det ar delbart med 400 eller om det ar delbart
med 4 men inte med 100!
public class LeapYear{
public static void main(String[] cmdLn){
int year = Integer.parseInt(cmdLn[0]);
boolean isLeapYear = year % 400 == 0
||
year % 4
== 0
&&
year % 100 != 0);
System.out.println(isLeapYear);
}
}

ett
Ar
artal skott
ar?
Ett
ar ar skott
ar om det ar delbart med 400 eller om det ar delbart
med 4 men inte med 100!
public class LeapYear{
public static void main(String[] cmdLn){
int year = Integer.parseInt(cmdLn[0]);
boolean isLeapYear = year % 400 == 0
||
year % 4
== 0
&&
year % 100 != 0);
System.out.println(isLeapYear);
}
}

Reella tal

For att hantera reella tal finns en typ av data som i Java kallas for
double
Typen double
Varden
Typiska literaler
operation
operator

reela tal (beskrivna i IEEE standard 754)


3.14159 6.022e23 -3.0 2.0 1.4142135623730951
addition subtraktion multiplikation division
+
*
/

Reella tal

For att hantera reella tal finns en typ av data som i Java kallas for
double
Typen double
Varden
Typiska literaler
operation
operator

reela tal (beskrivna i IEEE standard 754)


3.14159 6.022e23 -3.0 2.0 1.4142135623730951
addition subtraktion multiplikation division
+
*
/

Reella tal
Exempel
public class DoubleOps{
public static void main(String[] cmdLn){
System.out.println(3.141 + .03);
System.out.println(3.141 - .03);
System.out.println(6.02e23 / 2.0);
System.out.println(5.0 / 3.0);
System.out.println(10.0 % 3.141);
System.out.println(1.0 / 0.0);
System.out.println(Math.sqrt(2.0));
System.out.println(Math.sqrt(-1.0));
}
}
Testa det!

Reella tal
Exempel
public class DoubleOps{
public static void main(String[] cmdLn){
System.out.println(3.141 + .03);
System.out.println(3.141 - .03);
System.out.println(6.02e23 / 2.0);
System.out.println(5.0 / 3.0);
System.out.println(10.0 % 3.141);
System.out.println(1.0 / 0.0);
System.out.println(Math.sqrt(2.0));
System.out.println(Math.sqrt(-1.0));
}
}
Testa det!

Matematik i Java
Det finns mycket fardigprogrammerat med doublel:
Math.abs(x)
Math.max(x,y)
Math.min(x,y)
Math.sin(x)
Math.cos(x)
Math.tan(x)
Math.exp(x)
ex
Math.log(x)
Math.pow(x,y)
Math.round(x) narmaste heltal
Math.random() slumptal i [0, 1)
Math.E
Math.PI

Slumpen
Vi testar slumpgeneratorn!
public class Random{
public static void main(String[] cmdLn){
System.out.println( Math.round( Math.random() ) );
}
}
Vad skriver programmet ut?

Slumpen
Vi testar slumpgeneratorn!
public class Random{
public static void main(String[] cmdLn){
System.out.println( Math.round( Math.random() ) );
}
}
Vad skriver programmet ut?

Slumpen
Vi testar slumpgeneratorn!
public class Random{
public static void main(String[] cmdLn){
System.out.println( Math.round( Math.random() ) );
}
}
Vad skriver programmet ut?

Typkonvertering
Automatisk: antingen nar det inte blir mindre exakt eller mot
String
Explicit: antingen genom cast eller med hjalp av en metod.
uttryck
"1234" + 99
Integer.parseInt("123")
(int) 2.71828
Math.round(2.71828)
(int) Math.round(2.71828)
(int) Math.round(3.14159)
11 * 0.3
(int) 11 * 0.3
11 * (int) 0.3
(int) (11 * 0.3)

typ
String
int
int
long
int
int
double
double
int
int

varde
"123499
123
2
3
3
3
3.3
3.3
0
3

Typkonvertering
Automatisk: antingen nar det inte blir mindre exakt eller mot
String
Explicit: antingen genom cast eller med hjalp av en metod.
uttryck
"1234" + 99
Integer.parseInt("123")
(int) 2.71828
Math.round(2.71828)
(int) Math.round(2.71828)
(int) Math.round(3.14159)
11 * 0.3
(int) 11 * 0.3
11 * (int) 0.3
(int) (11 * 0.3)

typ
String
int
int
long
int
int
double
double
int
int

varde
"123499
123
2
3
3
3
3.3
3.3
0
3

Typkonvertering
Automatisk: antingen nar det inte blir mindre exakt eller mot
String
Explicit: antingen genom cast eller med hjalp av en metod.
uttryck
"1234" + 99
Integer.parseInt("123")
(int) 2.71828
Math.round(2.71828)
(int) Math.round(2.71828)
(int) Math.round(3.14159)
11 * 0.3
(int) 11 * 0.3
11 * (int) 0.3
(int) (11 * 0.3)

typ
String
int
int
long
int
int
double
double
int
int

varde
"123499
123
2
3
3
3
3.3
3.3
0
3

Typkonvertering
Automatisk: antingen nar det inte blir mindre exakt eller mot
String
Explicit: antingen genom cast eller med hjalp av en metod.
uttryck
"1234" + 99
Integer.parseInt("123")
(int) 2.71828
Math.round(2.71828)
(int) Math.round(2.71828)
(int) Math.round(3.14159)
11 * 0.3
(int) 11 * 0.3
11 * (int) 0.3
(int) (11 * 0.3)

typ
String
int
int
long
int
int
double
double
int
int

varde
"123499
123
2
3
3
3
3.3
3.3
0
3

Slumpheltal

Generera ett slumptal mellan 0 och N-1


public class RandomInt{
public static void main(String[] cmdLn){
int N
= Integer.parseInt(cmdLn[0]);
double r = Math.random();
int n
= (int) (r * N);
System.out.println("Random integer is :" + n);
}
}

Slumpheltal

Generera ett slumptal mellan 0 och N-1


public class RandomInt{
public static void main(String[] cmdLn){
int N
= Integer.parseInt(cmdLn[0]);
double r = Math.random();
int n
= (int) (r * N);
System.out.println("Random integer is :" + n);
}
}

You might also like