I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Like dokumenter
INF1000 (Uke 4) Mer om forgreninger, While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

INF1000 : Forelesning 3

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

Eksempel: Body Mass Index (BMI)

Forelesning inf Java 3

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Forelesning inf Java 3

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

INF 1000 høsten 2011 Uke 3 6. september

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

INF1000 høst Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Arrayer

Repetisjon INF 1000 våren 2006

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

INF1000 : Forelesning 2

Fullstendige programeksempler. INF1000 : Forelesning 2. Eksempel 1. Eksempel 2. Vi skal nå se på endel programeksempler.

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Java 3. Litt om Java-teknologien. Fortsette innføringen i språket Java Idag: variable, uttrykk, lese fra terminal, forgreninger. 31.

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Java. Java 3. Ulike varianter for ulike behov

Forelesning inf Java 4

Mål for INF1000. Repetisjon INF 1000 våren Representasjon av data. Programvareutvikling - oversikt

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Oversikt. INF1000 Forelesning 6. Variable Deklarasjon. Variabel en plass i lageret int radius;

De numeriske datatypene. INF1000 : Forelesning 2. Sannhetsverdier. Desimaltall. int og double er eksempler på numeriske datatyper

INF1000 : Forelesning 2

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Ukeoppgaver INF1000: 12. feb 16. feb

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Repetisjon Program. INF1000 Uke 2. Repetisjon Program Prosedyren main Alt inne i klasser. Repetisjon Variable og uttrykk

Oversikt. INF1000 Uke 4. Logisk uttrykk Beregne uttrykk. Eksempel (Feil sist) Logisk uttrykk. Litt repetisjon En feil i forrige forelesning

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Forelesning inf Java 5

Forelesning inf Java 5

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Blokker og metoder INF1000 (Uke 6) Metoder

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Java. INF1000- uke 3. Ulike varianter for ulike behov

Når du løser oppgaver. INF1000 : Forelesning 3. Eksempel: Celcius og Fahrenheit. Hvilke data beskriver problemet?

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

INF1000 : Forelesning 5

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

Forelesning inf Java 2

Forelesning inf Java 2

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Oversikt. INF1000 Uke 3. Underveisevaluering. Spørsmål

Ukeoppgaver 2: sep (INF Høst 2010)

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Forelesning inf Java 2

INF1000: Forelesning 4. Mer om arrayer Metoder

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

løsningsforslag-uke5.txt

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Java. INF1000 : Forelesning 2. Ulike varianter for ulike behov. Java Standard Edition (Java SE) Java:

Forelesning inf Java 5

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

INF1000 : Forelesning 1 (del 2)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

INF1000 (Uke 6) Mer om metoder, tekster

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

UNIVERSITETET I OSLO

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF1000 (Uke 6) Mer om metoder, tekster

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

Del 1 En oversikt over C-programmering

UNIVERSITETET I OSLO

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Transkript:

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus Bruaset og Dag Langmyhr 02-02-2004 2 Tre måter å lese fra terminal Først: importere easyio og åpne forbindelse til tastaturet Lese item for item: For å lese et heltall: inint() For å lese et desimaltall: indouble() For å lese ett ord: inword() For å lese alle ord: inword("\n") Tre måter å lese fra terminal Lese linje for linje: For å lese resten av linja: inline() Lese tegn for tegn: For å lese neste tegn (også hvite tegn): inchar() 02-02-2004 3 02-02-2004 4 Heltallsdivisjon va konverterer ikke fra heltall til desimaltall når to heltall adderes, subtraheres, multipliseres eller divideres: 234 + 63 : heltall (int) 235-23 : heltall (int) 631 * 367 : heltall (int) 7 / 2 : heltall (int) Heltallsdivisjon Legg spesielt merke heltallsdivisjonen: Når to heltall divideres på hverandre i va blir resultatet et heltall, selv om vanlige divisjonsregler tilsier noe annet. Dette kalles heltallsdivisjon, og resultatet er det samme som om vi fulgte vanlige divisjonsregler og så avrundet nedover til nærmeste heltall. Dvs (7/2) = = (int) (7.0/2.0) = = 3. 02-02-2004 5 02-02-2004 6 Ole Chr. Lingjærde 1

Oppgave Avgjør i hvert tilfelle hvilken datatype resultatet har: Uttrykk 2 + 6 * 3 14.2 + 6 3/2 + 4 "Vekt: " + 25 + " kg" "" + 17.4 Math.ceil(5.3) + (int) 3.25 Datatype int double int String String double Repetisjon: If-setninger If-setninger uten else-gren: if (logisk uttrykk) /* Her kommer de instruksjonene som skal utføres når det logiske uttrykket er sant (true) */ 02-02-2004 7 02-02-2004 8 Repetisjon: If-setninger If-setninger med else-gren: if (logisk uttrykk) /* Her kommer de instruksjonene som skal utføres når det logiske uttrykket er sant (true) */ else /* Her kommer de instruksjonene som skal utføres når det logiske uttrykket er usant (false) */ If-setninger kan settes sammen Sammensetning av flere if-setninger: if (x < 0) System.out.print("Tallet er negativt"); else if (x == 0) System.out.print("Tallet er null"); else System.out.print("Tallet er positivt"); 02-02-2004 9 02-02-2004 10 Eksempel: Adgang til studier Løsnings-skisse For å få adgang til universitetet i Ruritania må man oppfylle begge disse kravene: alder 18 karaktersnitt > 4.8 Lag et program som, gitt en persons alder og karaktersnitt, skriver ut på skjerm om personen får adgang til universitetet eller ikke. 02-02-2004 11 class AdgangTilUniversitetet <deklarasjoner> <les alder og karaktersnitt fra terminal> <avgjør om personen kan få adgang og skriv ut resultatet> Ting vi må ta stilling til: Hvilke variable trenger vi? Hva slags type skal de ha? Hvordan avgjør vi om personen skal få adgang eller ikke? Hvordan skal utskriften se ut? 02-02-2004 12 Ole Chr. Lingjærde 2

Løsning class AdgangTilUniversitetet class AdgangTilUniversitetet Løsning int alder; double karsnitt; Out skjerm = new Out(); In tast = new In (); skjerm.out( Alder: ); alder = tast.inint(); skjerm.out( Karaktersnitt: ); karsnitt = tast.indouble(); if (alder >= 18) if (karsnitt > 4.8) skjerm.outln( Personen kan tas opp ); else skjerm.outln( Personen kan ikke tas opp ); else skjerm.outln( Personen kan ikke tas opp ); 02-02-2004 13 Oppgave Hva blir skrevet ut av dette programmet? (les programmet nøye) class IfTest String s = "Petter"; if (s.equals("jens")); System.out.println("Ordet var " + s); 02-02-2004 15 Svar: sjau Uke4/IfTest2>java IfTest2 B Oppgave 2 class IfTest2 double x = -0.5; double y = 0.5; if (Math.ceil(x) == Math.ceil(y)) System.out.println("A"); if ((int) x == (int) y) Hva blir skrevet System.out.println("B"); ut av dette if (x < y) programmet? if (x < 0) if (y < 0) System.out.println("C"); else System.out.println("D"); 02-02-2004 16 Alternativ til if-else: switch En sammensetning av flere if-setninger kan i noen tilfeller erstattes med en switch-setning: switch (uttrykk) case verdi1: <instruksjoner> break; case verdin: <instruksjoner> break; default: <instruksjoner> Et uttrykk som gir en verdi som er av en av typene char eller int (evt. byte eller short) 02-02-2004 17 Break Nøkkelordet break avbryter utførelsen av switch-setningen Når break mangler, fortsetter utførelsen på neste linje (det er sjelden ønskelig) 02-02-2004 18 Ole Chr. Lingjærde 3

Eksempel class BrukAvSwitch char c = 'x'; switch(c) case 'a': System.out.println("Tegnet var en a"); break; case 'b': System.out.println("Tegnet var en b"); break; default : System.out.println("Tegnet var ikke a eller b"); 02-02-2004 19 Oppgave Hva blir skrevet ut av dette programmet? class Divisjon if (1/2 > 0) System.out.println("A"); else System.out.println("B"); 02-02-2004 20 Blokker En blokk er en samling instruksjoner omgitt av krøllparenteser: instruksjon 1; instruksjon 2;. instruksjon n; Alle steder i et va-program hvor det kan stå en instruksjon, kan vi om ønskelig i stedet sette en blokk 02-02-2004 21 her er en blokk her er en blokk Eksempel class Blokker double x = -10.2; double absx; if (x < 0) absx = -x; System.out.println("Absoluttverdien er: " + absx); else absx = x; System.out.println("Absoluttverdien er: " + absx); 02-02-2004 22 Deklarasjoner inne i blokker Vi har lov til å deklarere variable inne i en blokk, forutsatt at de ikke allerede er deklarert utenfor blokken Eksempel: double x = 0.3; if (x < 0) double y; // y er deklarert inne i en blokk y = -x; Deklarasjoner inne i blokker En variabel deklarert inne i en blokk (f.eks. y ovenfor) slutter å eksistere når blokken er utført Derfor er dette ulovlig: double x = 0.3; if (x < 0) double y; y = -x; x = y; // Ulovlig, siden y ikke eksisterer her 02-02-2004 23 02-02-2004 24 Ole Chr. Lingjærde 4

While-setninger Vi kan få utført en instruksjon (eller en blokk) mange ganger ved hjelp av en while-setning (også kalt while-løkke): while (logisk uttrykk) setning 1; setning 2;.. setning n; While-setninger Virkemåte: 1. Det logiske uttrykket regnes ut 2. Hvis uttrykket er sant (true), utføres setning 1,2,,n, og deretter går vi til punkt 1 ovenfor (NB: det logiske uttrykket kan da ha skiftet verdi!) 3. Hvis uttrykket er usant (false), avsluttes while-setningen 02-02-2004 25 02-02-2004 26 Eksempel på while-setning Hva skjer når while-setningen utføres? class SkrivLinjer int N = 6; int i = 1; while (i <= N) System.out.println(""); System.out.println("Nå er while-løkka ferdig"); 02-02-2004 27 i: 1 N: 6 i <= N? i: 2 N: 6 i: 3 N: 6 i: 4 N: 6 i: 5 N: 6 i <= N? i <= N? i <= N? i <= N? System.out.println(""); i: 6 N: 6 i <= N? System.out.println(""); i: 7 N: 6 i <= N? Nei while-løkka avsluttes 02-02-2004 28 System.out.println(""); System.out.println(""); System.out.println(""); System.out.println(""); Kompilering og kjøring > javac SkrivLinjer.java > java SkrivLinjer Nå er while-løkka ferdig 02-02-2004 29 Evig løkke Dersom testen i while-løkka aldri blir usann (false), vil utførelsen av while-løkka aldri stoppe. Dette kalles en evig løkke class EvigLokke1 while (true) System.out.println(""); class EvigLokke2 int i = 1, j = 2; while (i < j) System.out.println(""); 02-02-2004 30 Ole Chr. Lingjærde 5

Kompilering og kjøring Oppgave > javac EvigLokke1.java > java EvigLokke1 (osv) > javac EvigLokke2.java > java EvigLokke2 (osv) 02-02-2004 31 Hva blir utskriften fra dette programmet? class LokkeTest int i = 3; while (i > 0) System.out.print("Nå er i = "); System.out.println(i); i = i - 1; 02-02-2004 32 Oppgave 2 Eksempel: Gangetabell Hva blir utskriften fra dette programmet? class LokkeTest2 int i = 1; while (i < 4) System.out.print("Nå er i = "); System.out.println(i); 02-02-2004 33 Lag et program som bruker en while-løkke til å beregne "tregangen" og lage en slik utskrift på skjermen: 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15 6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27 10 * 3 = 30 02-02-2004 34 Løsnings-skisse class TreGangen public static void main (String[] args) <deklarasjoner> <initialisering av variable> <while-løkke, hvor hvert gjennomløp regner ut og skriver ut en ny linje på skjermen> 02-02-2004 35 While-løkka while (ikke ferdig) <finn svaret på neste regnestykke> <skriv ut svaret> For å finne svaret på neste regnestykke, må vi holde rede på de to tallene som skal ganges sammen. Vi trenger bare en variabel for dette, siden annen faktor alltid er lik 3. Vi lager også en variabel for svaret: int k, svar; Vi initialiserer slik: k = 1; Dermed blir svaret på neste regnestykke: svar = k * 3; 02-02-2004 36 Ole Chr. Lingjærde 6

while-løkka forts. Ferdig program while (ikke ferdig) svar = k * 3; System.out.print(k + " * 3 = " + svar); Vi må i tillegg huske å endre verdien til k i slutten av hvert gjennomløp (ellers gjør vi samme regnestykke igjen og igjen): k = k + 1; Hvor lenge skal while-løkka løpe? Vi kan bruke denne testen: k <= 10 class TreGangen public static void main (String[] args) int k=1, svar; while (k <= 10) svar = k * 3; System.out.println(k + " * 3 = " + svar); k = k + 1; 02-02-2004 37 02-02-2004 38 Kompilering og test Eksempel: stolpediagram > javac TreGangen.java > java TreGangen 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15 6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27 10 * 3 = 30 02-02-2004 39 Anta f.eks. at fire mobiltelefoner koster henholdsvis 600, 300, 900 og 1200 kroner. Det kan vi visualisere slik: mobil 1: ****** mobil 2: *** mobil 3: ********* mobil 4: ************ Antall stjerner er i hvert tilfelle lik prisen / 100. Vi skal lage et program som lager et slikt stolpediagram for to mobiltelefoner, gitt prisen på de to telefonene. 02-02-2004 40 Hvilke data beskriver problemet? Input: Prisen til de to telefonene (to desimaltall) Output: Antall stjerner som skal skrives ut for hver av telefonene (to heltall) 02-02-2004 41 Fremgangsmåte Antall stjerner som skal skrives ut for hver telefon er prisen delt på 100. Vi må også avrunde til et heltall Dette kan vi f.eks. gjøre slik: antall1 = (int) (pris1 / 100); antall2 = (int) (pris2 / 100); For å få skrevet ut riktig antall stjerner bruker vi en while-løkke: Hvert gjennomløp av løkka skriver ut en enkelt stjerne Vi teller opp antall gjennomløp av løkka (= antall stjerner) og stopper når antallet er det vi ønsker 02-02-2004 42 Ole Chr. Lingjærde 7

Løsnings-skisse Hvordan skrive ut antall1 stjerner? class Stolpediagram public static void main (String[] args) <deklarasjoner> <les inn pris1 og pris2 fra terminal> antall1 = (int) (pris1 / 100); <skriv ut "mobil 1: "> <skriv ut antall1 stjerner> antall2 = (int) (pris2 / 100); <skriv ut "mobil 2: "> <skriv ut antall2 stjerner> Vi kan bruke en while-løkke: int i = 0; while (i < antall1) System.out.print("*"); En ting mangler: trenger et linjeskift etter at alle stjernene er skrevet ut (slik at neste stolpediagram kommer på ny linje). Vi kan gjøre dette slik (etter while-løkka): System.out.println(""); // Denne lager linjeskift 02-02-2004 43 02-02-2004 44 class StolpeDiagram public static void main (String[] args) int antall1, antall2, i; In tastatur = new In(); System.out.print("Pris på telefon 1: "); double pris1 = tastatur.indouble(); System.out.print("Pris på telefon 2: "); double pris2 = tastatur.indouble(); System.out.print("mobil 1: "); antall1 = (int) (pris1 / 100); i = 0; while (i < antall1) System.out.print("*"); System.out.println(""); // Start ny linje på skjermen System.out.print("mobil 2: "); antall2 = (int) (pris2 / 100); i = 0; while (i < antall2) System.out.print("*"); System.out.println(""); // Start ny linje på skjermen Kompilering og test > javac Stolpediagram.java > java Stolpediagram Pris på telefon 1: 800 Pris på telefon 2: 1200 mobil 1: ******** mobil 2: ************ 02-02-2004 46 Eksempel: Finne gjennomsnitt Lag et program som leser en rekke desimaltall fra terminal, helt til brukeren oppgir tallet 999 som betyr at innlesningen skal avsluttes. Programmet skal deretter regne ut gjennomsnittet av de innleste verdiene og skrive ut svaret på skjermen. Løsnings-skisse Framgangsmåte: Vi bruker indouble() til å lese desimaltallene Vi lager en while-løkke for innlesningen, slik at innlesningen kan foretas så mange ganger det er ønsket Hver gang vi leser en ny lovlig verdi, adderer vi det til summen av de foregående verdiene. Vi holder også rede på hvor mange verdier som er innlest Testen i while-løkka sørger for stopp når siste innleste verdi er 999 Etter while-løkka deler vi summen på antall innleste verdier, og skriver ut svaret på skjermen 02-02-2004 47 02-02-2004 48 Ole Chr. Lingjærde 8

While-løkka sum = 0; x = 0; Sett x lik en hvilken som helst verdi forskjellig fra 999 while (x!= 999) <les x fra terminal> if (x!= 999) sum = sum + x; antall = antall + 1; Når vi kommer hit, kan vi risikere at ingen verdier er lest (kun 999), så vi vet ikke om sum/antall er veldefinert Så lenge vi ikke har lest stoppsignalet 999, fortsetter vi innlesningen Vi oppdaterer variablene sum og antall 02-02-2004 49 Ferdig program class FinnGjennomsnitt public static void main (String[] args) double x = 0, sum = 0; int antall = 0; In tast = new In(); Out skjerm = new Out(); while (x!= 999) skjerm.out("oppgi et desimaltall (999 for å avslutte): "); x = tast.indouble(); if (x!= 999) sum = sum + x; antall = antall + 1; if (antall == 0) skjerm.outln("ingen verdier ble oppgitt!"); else skjerm.out("gjennomsnitt: "); skjerm.outln(sum/antall, 2); Eksempel: Innlesning med sjekk Lag et program som leser et heltall mellom 1 og 100 fra terminal. Hvis det innleste tallet ikke ligger i det lovlige intervallet, skal programmet be om nytt tall. Løsnings-skisse Framgangsmåte: Vi bruker metoden inint() til å lese heltallet fra terminal Vi legger selve innlesningen inni en while-løkke, slik at innlesningen om nødvendig kan utføres flere ganger Testen øverst i while-løkka må være true når vi første gang kommer til while-løkka, og vi må sørge for at verdien blir false straks vi har lest en lovlig verdi (slik at videre innlesning stopper) 02-02-2004 51 02-02-2004 52 Programskisse class LesVerdi public static void main (String[] args) <deklarasjoner> boolean fortsett = true; while (fortsett) <les inn heltall fra terminal> <sett fortsett lik false hvis lovlig verdi, og gi feilmelding hvis ulovlig verdi> <skriv ut verdien> 02-02-2004 53 Ferdig program class LesVerdi public static void main (String[] args) int verdi = 0; boolean fortsett = true; In tast = new In(); while (fortsett) System.out.print("Oppgi verdi (1,2,,100): "); verdi = tast.inint(); if (verdi >= 1 && verdi <= 100) fortsett = false; else System.out.println("Ulovlig verdi! Prøv igjen!"); System.out.println("Du oppga verdien " + verdi); 02-02-2004 54 Ole Chr. Lingjærde 9