Villkor (selektion) i Java if-satsen
switch-satsen
Programmet väljer väg…
Om … gör programmet si annars gör det så
satser
satser
satser satser
Ja Nej
if-satsen
if (logisk uttryck) {
… // om sant gör något
}
else {
… // annars gör något annat
}
Logiska uttryck är true el false
Byggs upp av relationer och operatorer Ex. relationer:
> Större än
>= Större än och lika med
< Mindre än
<= Mindre än och lika med
== Lika med
!= Icke lika med Ex.operatorer:
&& och
|| eller
! icke
Exempel if-satser
if
if (saldo>0) {
System.out.prinln("Det finns pengar på kontot");
}
if med else
if (ålder>=18) { lön=18000;
}
else {
lön=15000;
}
Testa likhet
if (datum == 20090101) {
System.out.println("Gott nytt år!");
}
Testa icke lika med
if ( låskod!=1456) {
System.out.println("Fel låskod");
Exempel if-satser…
Går rötterna att räkna ut i pq-formeln?
if ( (p/2)*(p/2)<q ) {
System.out.println("Rötterna går ej att beräkna");
}
else {
x1 = … // Första roten x2 = … // Andra roten
System.out.println("x1=" + x1 + " x2=" + x2);
}
OCH-test: Är variabeln årtal i intervallet [1990,2010]?
if ( (årtal>=1990) && (årtal<=2010) ) { …
}
ELLER-test: Är variabeln årtal utanför intervallet [1990,2010]?
if ( (årtal<1990) || (årtal>2010) ) { …
Alt 1:
if (x>=y) { // x större än eller lika med y?
max=x; // då är max=x }
else { // Annars, är max=y max=y;
}
Alt 2:
max=x; // Hypotes: max=x if (y>max) { // y större än max?
max=y; // Ja, sätt max=y }
Exempel, beräkna maxvärdet av två tal x,y
spara maxvärdet i variabeln max
Alt 1:
if ( (x>=y) && (x>=z) ) { max = x;
}
if ( (y>=x) && (y>=z) ) { max = y;
}
if ( (z>=x) && (z>=y) ) { max = z;
}
Alt 2:
max = x; // Hypotesen är att max=x if (y>max) {
max = y;
}
if (z>max) { max = z;
Exempel beräkna maxvärdet av tre tal x,y,z
Lagra maxvärdet i variabeln max.
int val;
System.out.println("Välj mellan följande");
System.out.println("(1) Kaffe. (2) Cappucino.");
val = scan.nextInt(); // Läs in kundens val // Yttre if-sats
if (val==1) {
System.out.println("Kaffe beställd … ");
}
else {
// Inre if-sats if (val==2) {
System.out.println("Cappucino beställd…");
}
else {
System.out.println("Fel val…");
} // Slut inre if-sats } // Slut yttre if-sats
Exempel nästlad if-sats: en if-sats i en annan if-sats
En if-sats i en annan if-sats
Inkomstskatt = kommunal skatt + statlig skatt.
För år 2007 gällde följande:
1. Kommunalskatten i Uppsala kommun är 31,80 kr, dvs skatten är 31,8% av inkomsten.
2. a) Statlig skatt betalas för den som har en årsinkomst på mellan
316 700 kr och 476 700 kr med 20 % på den del som överstiger 316 700 kr.
b) På den inkomst som överstiger 476 700 kr är den statliga inkomstskatten 25 %.
c) Den som tjänar mindre än 316 700 kr betalar ingen statlig skatt.
Skriv ett program som frågar efter en årsinkomst,
Beräkna och skriv ut den sammanlagda skatten, dvs kommunal plus statlig skatt.
Vi löser det på tavlan…
Exempel, beräkna inkomstskatt
Villkor och strängar
Exempel, kontroll av lösenord:
System.out.println("Ge lösenordet");
String s = scan.nextLine();
// Kolla om strängen stämmer exakt med lösenordet if ( s.compareTo("hEmLiGt")==0 ) {
System.out.println("Korrekt lösenord");
… }
Exempel, fråga om man vill göra något eller ej:
System.out.println("Vill du slå tärningen (j/n)?");
String s = scan.nextLine(); // läs in svaret
// Kolla om första tecknet i strängen s är J eller j if ( s.charAt(0)=='J' || s.charAt(0)== 'j' ) {
int tärning = (int) (6*Math.random() + 1);
System.out.println("Tärningen visar:" + tärning);
}
Övningar: skriv javaprogram med if-satser
A1. Läs in ett flyttal och lagra värdet i variabeln x. Om x är negativt
skall texten NEGATIV skrivas ut, annars POSITIV. Testa med lite olika värden för att bekräfta att det blir korrekt.
A2. Läs in två flyttal. Beräkna och skriv ut det största värdet av de två.
Testa med lite olika värden för att bekräfta att det blir korrekt.
A3. Läs in två heltal och jämför värdena. Skriv ut FÖRSTA MINST,
BÅDA LIKA eller ANDRA MINST beroende på hur talen förhåller sig till varandra. Testa med lite olika värden för att bekräfta att det blir korrekt.
A4. Skriv ett program som ställer följande tre frågor där man svarar 1 ifall man menar Ja och 2 ifall man menar Nej.
Är du man? Är du under 30 år? Har du inga barn?
Om minst två av villkoren är uppfyllda skall programmet skriva ut följande:
Du är kvalificerad för jobbet hos oss!
Övningar: javaprogram med if-satser…
A5. Slumpa ett tärningskast. Om tärningen visar 1 eller 6 skriv ut VINST annars FÖRLUST.
A6. Slumpa två st tärningskast, lagra värdena i varsin variabel. Om de båda tärningskasten får samma värde skall texten LIKA skrivas ut, annars OLIKA.
A7. Skriv ett program där man frågar efter p och q samt beräknar rötterna till y=x2+px+q=0.
Programmet skall först kontrollera om rötterna är reella. Om inte så är fallet skall ett meddelande skrivas ut. Annars skall rötternas
värden beräknas och skrivas ut. Testa med lite olika värden på p och q.
switch-satsen
satser
satser
satser
satser satser satser satser
Programmet kan välja flera alternativa vägar…
1
2 3 4 5
Exempel, styra en sköldpadda…
World w = new World();
Turtle t = new Turtle(w);
int val;
System.out.println("Vad vill du göra? ");
val = scan.nextInt(); // Läs in svaret switch (val) {
case 1: t.forward(); break;
case 2: t.turnRight(); break;
case 3: t.turnLeft(); break;
default: System.out.println("Felval");
}
World w = new World();
Turtle t = new Turtle(w);
int val;
while (true) {
System.out.println("Vad vill du göra? ");
val = scan.nextInt(); // Läs in svaret switch (val) {
case 1: t.forward(); break;
case 2: t.turnRight(); break;
case 3: t.turnLeft(); break;
default: System.out.println("Fel val");
} // slut switch-sats } // slut while-sats
Modifiera programmet: Frågan upprepas i en oändlig loop:
Vi placerar frågan och switch-satsen i while-loopen
Värdena i switch-satsen måste vara uppräkningsbara, dvs heltal eller tecken
Exempel heltalet tärning:
switch (tärning) {
case 1 : … ; break;
case 2 : … ; break;
default: … }
Exempel tecknet teck:
switch (teck) {
case 'A' : … ; break;
case 'B' : … ; break;
case 'C' : … ; break;
default: …
}
Exempel: Översätt sifferbetyg till bokstavsbetyg
Ett sifferbetyg skall översättas till ett textbetyg enligt följande:
1 VU, 2U, 3G, 4VG, 5MVG.
Vi läser in ett sifferbetyg (ett heltal) och skapar en strängvariabel betyg
som får strängvärdet VU, U, G, VG eller MVG beroende på vad sifferbetyget är.
Skriver sedan ut värdet av betyg .
System.out.println("Ge sifferbetyg: ");
int sifferbetyg = scan.nextInt();
String betyg;
switch (sifferbetyg) {
case 1: betyg="VU"; break;
case 2: betyg="U"; break;
case 3: betyg="G"; break;
case 4: betyg="VG"; break;
case 5: betyg="MVG"; break;
default: betyg="???";
System.out.println("Okänt betyg");
}
System.out.println("Blir bokstavsbetyg: " + betyg);
Övningar: skriva javaprogram med switch-satsen
B1. Lös kaffe/cappucino-programmet, men med en switch-sats.
B2. Fråga efter EN romersk siffra och skriv ut värdet av den enligt följande tabell:
I1, V5, X10, L50, C100, D500, M1000
Tips: Läs in den romerska siffran som en text till en strängvariabel s.
String s;
s = scan.nextLine();
Plocka fram det första tecknet i strängen på följande sätt:
char t;
t = s.charAt(0); // Tecknet i position 0 Skriv sedan en switch-sats som beräknar värdet.
B3: Fråga efter ett romerskt tal med två siffror, exvis VI, och beräkna värdet.
B4. Lös uppgift B1, men med en loop som upprepat frågar efter val av dryck tills man fått ett korrekt svar.