= 5)] skriv ut tekst teller++ initiering av løkken løkkebetingelsen løkkekroppen oppdatering av løkkebetingelsen"> = 5)] skriv ut tekst teller++ initiering av løkken løkkebetingelsen løkkekroppen oppdatering av løkkebetingelsen">

Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon 2003-03-04 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon 2003-03-04 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/Javabok/ versjon 2003-03-04 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6 Løkke som kontrollstruktur Hva er en løkke?side 2 while-setningen med eksempelside 3 Å teste løkkerside 5 Et eksempel på grafikkside 6-7 for-setningenside 8-9 Nøstede kontrollstrukturerside 10 do-while-setningenside 11 Valg av løkkesetning og testing av løkkerside 12 Kontroll av inndataside 13 Å bruke pakker som ikke tilhører Java API’etside 14-15 Å skrive ut tall i kolonnerside 16

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 2 Hva er en løkke? En algoritme er et begrenset og ordnet sett med veldefinerte regler for løsning av et problem. Tre kategorier rekkefølge eller kontrollstrukturer: –sekvens (kapitlene 2-4) –valg (kapittel 5, Java-setninger: if og switch) –løkke (dette kapitlet, Java-setninger: while, for, do) En løkke gjør det mulig å gjenta en enkelt setning eller en blokk én eller flere ganger. En tellerkontrollert løkke er en løkke der antall gjennomløp er kjent på forhånd.

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 3 while-setningen med eksempel class SkrivMangeLinjer { public static void main(String[] args) { int teller = 0; while (teller < 5) { System.out.println("Dette er en linje"); teller++; } Utskrift: Dette er en linje while-setningen: while (logisk uttrykk) setning/blokk Gjør oppgaven side 174. teller = 0 [teller < 5] [teller >= 5)] skriv ut tekst teller++ initiering av løkken løkkebetingelsen løkkekroppen oppdatering av løkkebetingelsen

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 4 class SoekEtterTall { public static void main(String[] args) { final int grense1 = 0; final int grense2 = 70; final int grense3 = 80; final int grense4 = 100; Random tallGen = new Random(); int antOKTall = 0; int tall = grense1 + tallGen.nextInt(grense4 - grense1 + 1); while (tall grense3) { antOKTall++; System.out.println(tall); tall = grense1 + tallGen.nextInt(grense4 - grense1 + 1); } System.out.println("Vi måtte trekke " + antOKTall + " tall til vi fant et ugyldig: " + tall); } En løkke med en generell betingelse trekk tall [tall < 70 || tall > 80] [tall >= 70 && tall <= 80] antOKTall++ trekk tall initiering av løkken løkkebetingelsen løkkekroppen oppdatering av løkkebetingelsen antOKTall = 0 skriv ut resultater

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 5 Å teste løkker Formuler testdata som fanger opp følgende tilfeller: –Løkken gjennomløpes 0 ganger. –Løkken gjennomløpes eksakt 1 gang. –Løkken gjennomløpes noen ganger. –Er det mulig å konstruere testdata som gjør at løkkebetingelsen aldri blir usann? Hvis ja, vil dette kunne bli en evig løkke, og det var vel ikke meningen? Gjør oppgavene 1-3 side 177.

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 6 Et eksempel på grafikk Vi skal lage et vindu med 11 tilfeldig plassert flekker. Følgende konstanter er deklarert: private static final int diameter = 20; private static final int sentr = diameter / 2; private static final int antStreker = 10; Størrelsen på tegneflaten finner vi inne i paintComponent(): maksXverdi = getWidth() - 1; maksYverdi = getHeight() - 1; En x-verdi trekkes slik: int x = tallGen.nextInt(maksXverdi - diameter); En sirkel tegnes slik: vindu.fillOval(x, y, diameter, diameter); En rett linje mellom to punkter tegnes slik: vindu.drawLine(x1, y1, x2, y2); Oppgaver –Finn antall løkkegjennomløp. –Sett opp løkkebetingelsen. –Konstruer resten av løkken.

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 7 Løsning import java.awt.*; import javax.swing.*; import java.util.Random; class Vindu extends JFrame { public Vindu(String tittel) { setTitle(tittel); setSize(400, 300); // bredde, høyde setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container guiBeholder = getContentPane(); Tegning tegningen = new Tegning(); guiBeholder.add(tegningen); } class Tegning extends JPanel { private static final int diameter = 20; private static final int sentr = diameter / 2; private static final int antStreker = 10; /* Nok med en tallgenerator pr klasse */ private static Random tallGen = new Random(); private int maksXverdi; private int maksYverdi; Gjør oppgavene side 179. public void paintComponent(Graphics tegneflate) { super.paintComponent(tegneflate); maksXverdi = getWidth() - 1; maksYverdi = getHeight() - 1; int x = tallGen.nextInt(maksXverdi - diameter); int y = tallGen.nextInt(maksYverdi - diameter); tegneflate.fillOval(x, y, diameter, diameter); int teller = 0; while (teller < antStreker) { int forrigeX = x; int forrigeY = y; x = tallGen.nextInt(maksXverdi - diameter); y = tallGen.nextInt(maksYverdi - diameter); tegneflate.drawLine(forrigeX + sentr, forrigeY + sentr, x + sentr, y + sentr); tegneflate.fillOval(x, y, diameter, diameter); teller++; } class TegnFlekkerMedLinjer { public static void main(String[] args) { Vindu etVindu = new Vindu("Flekker med linjer"); etVindu.show(); }

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 8 class SkrivMangeLinjer { public static void main(String[] args) { int teller = 0; while (teller < 5) { System.out.println("Dette er en linje"); teller++; } class SkrivMangeLinjer { public static void main(String[] args) { for (int teller = 0; teller < 5; teller++) { System.out.println("Dette er en linje"); } for-setningen while-setningen kan brukes til alle typer løkker. Vanlig å bruke for-setningen dersom løkken er tellerkontrollert. Oppgave: Identifiser initiering, betingelse og oppdatering av løkkebetingelsen i de to løkkekonstruksjonene over. Syntaks: for (initiering; betingelse; oppdatering av betingelse) setning/blokk Definisjonsområdet til variabler deklarert i for-setningen er for-setningen selv.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 9 for-setningen, eksempler Tegner 30 sirkler etter hverandre int x = 0; int y = 50; for (int teller = 0; teller < 30; teller++) { vindu.drawOval(x, y, 20, 20); x += 20; } Andre for-setninger for (int tall = 1000; tall > 500; tall--) { // teller ned fra 1000 til og med 501 for (int xPos = 100; xPos < 800; xPos += 5) { // øker med 5 for hvert // gjennomløp for (int medlNr = 101; medlNr <= 900; medlNr++) { // medlNr fra og med // 101 til og med 900

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 10 Nøstede kontrollstrukturer if-setninger inne i hverandre, løkker inne i hverandre, if- setninger inne i løkker og omvendt, osv... Hva skrives ut når følgende program kjører? class SumAvTall { public static void main(String[] args) { for (int linjeteller = 0; linjeteller < 10; linjeteller++) { int sum = 0; for (int tall = 1; tall <= linjeteller; tall++) { sum += tall; System.out.print(tall + " "); } System.out.println("Summen blir: " + sum); } Gjør oppgave 1 side 182.

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 11 do-while-setningen do-while-setningen skiller seg fra for- og while-setningene ved at løkkekroppen alltid gjennomløpes minst en gang Praktisk ved innlesing der data skal kontrolleres Eksempel: int antStudenter; do { String lestTekst = JOptionPane.showInputDialog("Oppgi antall studenter (maks. 30): "); antStudenter = Integer.parseInt(lestTekst); } while (antStudenter 30); Syntaks: do setning/blokk while logisk uttrykk

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 12 Valg av løkkesetning Bruk for-setningen dersom antall gjennomløp av løkken er kjent på forhånd, eller der en heltallsvariabel øker eller avtar med en fast verdi for hvert gjennomløp. Bruk while-setningen dersom antall løkkegjennomløp styres av en generell betingelse. Bruk do-while-setningen dersom antall løkkegjennomløp styres av en generell betingelse, og løkken alltid skal gjennomløpes minst en gang.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 13 Kontroll av inndata Lager en klasse (DataLeser) med klassemetoder for innlesing av data: –public static String lesTekst(String ledetekst) –public static int lesHeltall(String ledetekst) –public static double lesDesimaltall(String ledetekst) Bruk: String tekst = DataLeser.lesTekst("Skriv en tekst: "); double desimaltall = DataLeser.lesDesimaltall("Skriv et desimaltall: "); int heltall = DataLeser.lesHeltall("Skriv et heltall: "); Metoden lesTekst(): public static String lesTekst(String ledetekst) { String tekst = JOptionPane.showInputDialog(ledetekst); while (tekst == null || tekst.trim().equals("")) { JOptionPane.showMessageDialog(null, "Du må oppgi data."); tekst = JOptionPane.showInputDialog(ledetekst); } return tekst.trim(); } Metodene for innlesning av tall bruker parseInt() og parseDouble(). Unntakshåndtering dersom teksten ikke kan tolkes som tall. Vis programliste 6.5. Gjør oppgavene side 189.

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 14 Å bruke pakker som ikke tilhører Java API’et com xssoft grafikkdatabaser Sirkel.class Polygon.class Person.class Eiendom.class c: java C LASSPATH=.;C:\java import com.xssoft.grafikk.Sirkel; globalt entydig klassenavn

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 15 mittBibliotek mittBibliotek er en pakke som følger med boka Pakken inneholder bl.a. klassen DataLeser De første linjene i klassen ser nå slik ut: package mittBibliotek; import javax.swing.JOptionPane; public class DataLeser { mittBibliotek DataLeser.class c: java C LASSPATH=.;C:\java import mittBibliotek. DataLeser;

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 6, side 16 Å skrive ut tall i kolonner Bruker klassen mittBibliotek.MittTallformatUt MittTallformatUt formatet = new MittTallformatUt(5, 2); double tall = 8.5; for (int i = 0; i < 8; i++) { System.out.println(formatet.format(tall)); tall *= 10; } gir utskriften: 8,50 85,00 850,00 8500,00 85000,00 850000,00 8500000,00 85000000,00


Laste ned ppt "Programmering i Java versjon 2003-03-04 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."

Liknende presentasjoner


Annonser fra Google