Lektion 2
Allt material till lektionen finns på kursens hemsida:
http://www.it.uu.se/edu/course/homepage/prog1/wvt07/
Lösningsförslag
- kod
- kod
- kod
- kod
- kod
- kod
- kod
Vi rekommenderar att ni jobbar två och två för att ha någon att diskutera problemen med. Jobba i den takt som passar er. Vi kommer att stoppa upp nu och då för att gå igenom vissa moment så att alla ska få ut så mycket som möjligt av övningarna. Det finns ju alltid flera olika lösningar till ett problem och det är bra om man känner till dem så att man kan välja den mest lämpliga (om det nu bara finns en).
Under den här lektionen ska vi öva på små program som innehåller direkta satser, villkorssatser (3.2 L&L(3), 5.1 och 5.2 L&L(4) eller 1.10 S) och repetitionssatser (3.6 L&L(3), 5.5 L&L(4) eller 1.12, 9.3 S) (läs gärna i boken innan ni börjar så slipper ni onödiga kompileringsfel). Flera program finns halvklara så det är bara ett ladda hem, fylla i koden som saknas, kompilera och exekvera programmet. För att öppna koden i BlueJ gör ni så här:
- Skapa ett nytt BlueJ-projekt i din Java-katalog: välj Project -> New Project (se till att du står i Java-katalogen). Fyll i namnet
Lektion2
Välj sedan New Class i BlueJ (inte i menyn). Fyll i klassnamnet och klicka Ok. Högerklicka på symbolen för klassen som dyker upp. Välj Open Editor. Sudda allt som står där. Klicka på länken till koden i det här dokumentet och markera och kopiera. Klistra sedan in koden i BlueJ-editorn.
- Hur man kompilerar och kör i BlueJ:
- kompilera: klicka på
Compile i editorn, eller högerklicka på klassen i BlueJ-fönstret och välj Compile. Koden kommer automatiskt att sparas när du kompilerar!
- exekvera programmet (kör programmet): högerklicka på klassen. Välj
void main(String[] arg). Klicka Ok i fönstret som kommer upp. Programmet startas alltså i main-metoden.
- Utskriftsfönstret som öppnas har en meny "Options". Där finns alternativet
clear som rensar fönstret mellan programkörningarna.
- Om BlueJ hänger sig: Försök i första hand bryta med Ctrl-Shift-R, eller högerklicka på "polkagrisen" i BlueJ-fönstret och välj Ctrl-Shift-R. Om det inte fungerar finns två alternativ:
- Döda processen: öppna ett terminalfönster. Den som loggat in skriver:
ps -aef|grep användarnamn. Sök i listan som kommer upp efter BlueJ-processer. Skriv kill processnummer. Om BlueJ-fönstren inte försvinner, sök vidare i listan efter andra BlueJ-processer.
- Logga ut. Logga in igen och starta om BlueJ. Den senaste versionen av programmet du kompilerade finns kvar eftersom programmet automatiskt sparas vid kompilering i BlueJ.
ÖVNINGARNA
Ladda hem följande program, eller markera och kopiera koden, se ovan.
Fyll i det som fattas i koden (markerat med "..."). Siffrorna vid raderna är
förklarade under programmet.
Kompilera programmet. Rätta eventuella kompileringsfel du får och kompilera igen.
OBS! Koden sparas automatiskt när du klickar Compile.
Kör programmet, se instruktionen ovan. När man kör programmet kan det se ut så här:
Hur gammal är du?
30
Du är 360 månader dvs 10950 dagar.
Programkod:
import java.util.Scanner;
public class Ex1
{
public static void main(String[] arg)
{
int year, month, day; //(1)
Scanner scan = new Scanner(System.in); //(2)
System.out.println("Hur gammal är du? ");//(3)
year = scan.nextInt(); //(4)
month = year*12; //(5)
... //(6)
System.out.println("Du är " + month + "... //(7)
}
}
(1) 3 lokala variabler av typen int, dvs heltal deklareras
(2) ett Scanner-objekt skapas för inmatning
(3) ger utskrift på skärmen, se exemplet ovan
(4) inmatning från tangentbordet av ett heltal, se exemplet
(5) beräkning av antalet månader - inget syns på skärmen
(6) beräkning av antalet dagar. Skriv raden själv.
(7) Fyll i det som fattas. Se exemplet
Ladda hem följande program till katalogen Lektion2, eller markera och kopiera koden. Fyll i det som ska stå på rad 3, se kommentaren nedan. Kompilera och
provkör:
public class Ex2
{
public static void main(String[] arg)
{
int tal, a; //sats 1
tal=0; //sats 2
System.out.println("Välkommen!");
... //sats 3
{
System.out.println("HEJ!"); //sats 4
tal = tal+1; //sats 5
}
}
}
Kommentarer och förklaringar:
sats 1: två lokala variabler deklareras.
sats 2: variabeln tal tilldelas värdet 0.
sats 3: Här börjar while-loopen: "Så länge tal är mindre än 5, gör det som står
inom måsvingarna". Skriv raden själv.
sats 4: skriv ut HEJ, byt rad
sats 5: (icke-matematiskt och typiskt dataskrivsätt) "Det nya
värdet på tal = det gamla värdet + 1".
Det som står inom måsvingarna utförs så länge som villkoret i
parentesen är SANT
- Lägg till en rad efter sats 5:
System.out.println(tal); //sats 6
Provkör och se hur variabeln tal ändras under
programkörningen.
- Prova att ta bort måsvingarna ({ och }) till
while-loopen och byt plats på sats 4 och 5.
Provkör och se vad som sker. (Sätt dit måsvingarna igen efteråt.)
- Ändra utskriftsraden till
System.out.print("HEJ!"); Kompilera och kör. Vilken blir skillnaden?
- Rad 5 kan skrivas på ett mer kompakt sätt. Hur?
Ladda hem följande program, eller markera och kopiera koden. Gör uppgifterna a) - c) nedan.
import java.util.Scanner;
public class Ex3
{
public static void main(String[] arg)
{
int a,b,c;
System.out.println("Ge tal till a och b: ");
a = scan.nextInt();
b = scan.nextInt();
if (a>0) c = 1; //Om a>0 tilldela variabeln c värdet 1
else c = 0; //annars får c värdet 0
System.out.println("c = " + c);
}
}
- Ändra programmet så att c får värdet 1 om båda variablerna a och b är större än 0, annars ska c få värdet 0.
- Ändra igen. Nu räcker det att en av variablerna a och b har ett värde som är större än 0 för att c ska få värdet 1. Annars får c värdet 0. Testkör och kolla att du gjort rätt:
Ex) Om a = 3 och b = -2 ska c bli 1
Om a = -5 och b = 12 ska c bli 1
Om a = 7 och b = 2 ska c bli 1
Om a = -4 och b = -8 ska c bli 0
- Ändra igen: c ska få värdet 1 om a är större än noll och om b ligger utanför intervallet [0,10]. Annars ska c fö vädet 0.
Ladda hem följande program, eller markera och kopiera koden och fyll i
det som fattas (markerat med "..."). Läs in 5 olika tal m.h.a.
en while-loop. Summera talen efter hand som de läses
in i en variabel sum. Skriv ut summan med lämplig
ledtext. Läs kommentarena i programmet för hjälp.
import java.util.Scanner;
public class Ex4
{
public static void main(String[] arg)
{
int ... //fyll i de variable du behöver (kan fyllas i sist)
i=1; //i ges ett startvärde!
System.out.println("programmet summerar fem tal.");
while (i<=5) //Satserna mellan { och } utförs om det
{ //stämmer att i<=5
... //Mata in ett tal. Använd inte 5 olika variabelnamn!
... //Summera talet till variabeln sum
... //Öka i med 1.
} //När i blivit 6 är det slut på while-loopen
System.out.println(... //Skriv ut summan med lämplig ledtext
}
}
Prova att köra ditt program flera gånger. Vad måste göras med
variabeln sum innan man går in i loopen?
Samma som i föregående uppgift men använd for i
stället. (Öppna en ny klass med namnet Ex5.java, sudda det du inte behöver och skriv in koden.)
... //Börja som i föregående uppgift
for (i=1; i<=5; i++) //Variabeln i räknar fr o m 1
{ //t o m 5, ett steg i taget
//Satserna mellan { och } utförs 5 gånger
... //Mata in ett tal.
... //Summera talet till variabeln sum
} //Betyder slut på for-loopen
... //Avsluta som i föregående uppgift
Läs in ett antal positiva tal och summera dem. Fortsätt ända
tills ett negativt tal matas in. Det negativa talet skall inte räknas
in i summan. Skriv ut summan samt hur många tal du läst in, ej
inräknat det negativa talet.
Du behöver följande variabler:
tal, sum och i som räknar hur många tal du
matat in.
Vad passar bäst, for eller while om man från
början inte vet hur många tal som skall matas in? Hur formuleras
villkoret "..tills ett negativt tal matas in..", dvs så länge talet är
positivt?
OBS: tal och i måste ges startvärden före
loopen.
Skriv ett program som frågar efter ett heltal och sedan beräknar och skriver ut fakulteten av talet. Testa gärna både med for- och while-loop.