if (ören>99) {kr=kr+1; ören=ören-100;}Men om jag hade tvåhundratrettisju ören fick jag byta ut if-satsen mot en while-slinga. Det här programmet skriver ut
5 kr, 37 ören
.
class Pengar1 { public static void main(String[] args) { int kr=3, ören=237 ; while (ören>99) { kr=kr+1 ; // eller kr++ ören=ören-100 ;} // eller ören-=100 System.out.println(kr+" kr, "+ören+" ören") ;}}Med operatorerna ++ och
-=
blir programmet kortare.
Det blir också obegripligare, särskilt om ++ används inne i ett uttryck.
En while-slinga tas om ända tills villkoret inte är sant längre.
En oändlig slinga får man med while(1<17)
eller
while(true)
. Men slingan kan alltid brytas med
break
. Vår while-slinga kunde alltså ha skrivits så här:
while(true) { if (ören<100) break ; kr=kr+1 ; ören=ören-100 ;}
0123456789
.
class Slingor1 { public static void main(String[] args) { System.out.print("Siffrorna är: ") ; for(int i=0; i<10; i++) System.out.print(i) ; System.out.println() ;}}Och det här gör en nedräkning
10...9...8...7...6...5...4...3...2...1...0...PANG!!!
class Slingor2 { public static void main(String[] args) { System.out.println("Nedräkning: ") ; for(int i=10; i>=0; i--) System.out.print(i+"...") ; System.out.println("PANG!!!") ;}}
System.currentTimeMillis()
ger antal ms sedan
Unix födelse 1 jan 1970. Det kan användas för att göra en slinga
som går runt, runt i exakt en sekund.
class Slingor3 { public static void main(String[] args) { long starttid = System.currentTimeMillis() ; long sluttid=starttid+1000 ; System.out.print("TICK ") ; while(System.currentTimeMillis()<sluttid) ; System.out.println("TACK!") ;}}Observera att slingan inte innehåller en enda sats - eller en tom sats, hur man nu vill se det. En sådan sekundslinga är så användbar att vi gör den till en egen procedur. Varje anrop av
ticka()
tar en sekund och skriver sedan ut TICK.
Inom den egna klassen är anropet bara ticka()
, från
andra klasser i andra filer blir det Slingor4.ticka()
.
class Slingor4 { static void ticka() { long starttid = System.currentTimeMillis() ; long sluttid=starttid+1000 ; System.out.print("TICK ") ; while(System.currentTimeMillis()<sluttid) ;} public static void main(String[] args) { for(int i=0; i<10; i++) ticka() ; System.out.println("TACK!") ;}}
class Slingor5 { public static void main(String[] args) { for(int i=1; i<=100; i++) { if(i%3==0) System.out.println("BURR") ; else System.out.println(i) ;}}}Operatorn % uttalas modulo och betyder "resten vid heltalsdivision". Om
i%3
är noll är talet
i
delbart med 3. Om i%10
är 3 måste talet
i
vara av typen 3,13,23,33,43,... Om man vill säga
BURR när talet är delbart med 3 ELLER slutar på 3 ELLER
börjar på 3 kan man använda eller-operatorn ||.
class Slingor6 { public static void main(String[] args) { for(int i=1; i<=100; i++) { if(i%3==0 || i%10==3 || i/10==3) System.out.println("BURR"); else System.out.println(i) ;}}}Om man byter ut eller-operatorn mot och-operatorn &&, när blir det då BURR? Och-eller-förväxling tillhör dom vanligaste programmeringsfelen.
class Slingor7 { public static void main(String[] args) { System.out.println("Pytagoreiska trianglar:") ; for(int a=1; a<=100; a++) { for(int b=1; b<=100; b++) { for(int c=1; c<=100; c++) { if(a*a+b*b==c*c) System.out.println(a+","+b+","+c);}}}}}