410 likes | 640 Views
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker Førsteamanuensis Alf Inge Wang. TDT4110 IT Grunnkurs. Undervisningsmål. Målet for forelesningen er å gjennom gå følgende tema i dybden og gi en repetisjon av: Variabler, Tabeller if-setninger for/while-løkker
E N D
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker Førsteamanuensis Alf Inge Wang Repetisjon JSP TDT4110 IT Grunnkurs
Undervisningsmål • Målet for forelesningen er å gjennom gå følgende tema i dybden og gi en repetisjon av: • Variabler, • Tabeller • if-setninger • for/while-løkker • Oppfordrer sterk til spørsmål underveis hvis det er enda ting som er uklart i dette stoffet! Repetisjon JSP
Variabler • Variabler brukes til å ta vare på informasjon som vi trenger under kjøring av et program. • I JSP/Java må man deklarere en variabel med en datatype før man kan bruke variabelen. • Navnet på en variabel bør si noe om hvilken type informasjon den skal inneholde. • For tellere og lignende kan man bruke korte variabelnavn som x,y,i, j etc. Repetisjon JSP
Deklarering (opprettelse) og tilordning av verdi (s.31) • Bruker den ”vanlige” JSP-merkelappen <% ... %> • Variabel opprettes slik (deklarerer data type): <% int antall; %> • Deretter kan vi gi variabelen en verdi slik: <% antall = 100; %> • Kan manipulere (endre) på verdi <% antall = antall + 1; %> Repetisjon JSP
Oversikt over datatyper vi bruker i kurset • int brukes til heltall: int antall=1; • double brukes til flyttall: double pi=3.14; • boolean brukes til sannhetsverdier (true eller false): boolean harFunnetElement=false; • String brukes til strenger (samling av flere tegn): String setning=”Dette er en fin setning”; • Variabler av typen String blir objekter som man kan kjøre metoder på: setning.equals(”Nasse nøff”); Repetisjon JSP
Oppgave 1: Lag variabler med datatype til dette problemet • ”Det skal lages et program som skal ta vare på og sende rapporter til bilister som fyller bensin på GasTex bensinstasjoner som inneholder alle nødvendige personinformasjon om kunde, hvor mye bensin har har kjøpt, hvor mye penger han har brukt på bensin, distanse kjørt (basert på at kunde taster inn ved kjøp) gjennomsnittspris på bensin, om kunden har gullkort, og hvor mange ganger kunden har kjøpt bensin”. • Trenger ikke å bruke tabeller! Repetisjon JSP
<% String fornavn; String etternavn; String gateadresse; int postnummer; String poststed; int hjemmeTelefon; int mobilTelefon; int kundenummer; boolean gullkort; double totaltBensin; double totaltDistanse; double totaltBetaling; double snittPris; int antallKjøp; %> Svar på oppgave 1: Repetisjon JSP
Bruk av variabler • Man kan initiere en variabel med en startverdi: int lengde=7; • Man kan beregne aritmetiske uttrykk: lengde=256*23+12*2-12*2; • Man kan regne på andre variabler: lengde=distanse*4+avstand*2; • Man kan øke/minske sin egen verdi: lengde=lengde+10; lengde=lengde-5; Repetisjon JSP
Bruk av variabler (2) • Man kan typeomforme uttrykk til riktig datatype: double svar= (double) 150/100; • Uten typeomformingen (double) får man svaret 1.0 • Alternativ: double svar= 150.0/100; • Man kan beregne sannhetsverdi i logiske uttrykk: int a=2; int b=5; int c=8; boolean sant= (a>b || b>c || c>a); Repetisjon JSP
Bruk av variabler (3) • Konkatenere strenger (sette sammen strenger): String navn=”Alf ”+”Inge ”+” Wang”; • Gir strengen navn=”Alf Inge Wang”; • Legge til tekst i strenger: String vers=”Jeg gikk en tur på stien ”; vers=vers+”og hørte skogens ro, ”; vers=vers+”da hørte jeg fra stien, ”; vers=vers+”en løk som sa koko.”; • Gir strengen vers=”Jeg gikk en tur ... løk som sa koko.”; Repetisjon JSP
Bruk av variabler (4) • For å bruke dobbelfnutter (” ”) i strenger må man bruke backslash (\) foran hver dobbelfnutt: String vers=”Jeg gikk en tur på \”stien\”, ”; vers=vers+”og hørte skogens \”ro\”, ”; out.println(vers); • Gir utskriften: Jeg gikk en tur på ”stien”, og hørte skogens ”ro”, Repetisjon JSP
Bruk av metoder som har String som parameter • I metoder som bruker String som parameter (f.eks. out.println() og executeQuery() kan man gjøre på samme måte som man bruker strenger: Stringvers=”Jeg gikk tur på stien”; vers = vers + ”og \”gidda\” ikke mer”; out.println(”Variabelen: ”+ vers +” og litt til”); Repetisjon JSP
Bruk av metoder som har String som parameter (2) • Å bruke en egen streng til spørring i databasen kan være nyttig for executeUpdate(): Stringnavn = ”Alf Inge”; Stringstatus = ”smurf”; inttelefonnr = 99999955; Stringsp = ”INSERT INTO person”; sp = sp + ”VALUES (’” + navn+ ”’,”; sp = sp + ”’” + status + ”’,”; sp = sp + telefonnr + ”)”; st.executeUpdate(sp); • Resultat: sp blir INSERT INTO person VALUES (‘Alf Inge’, ‘smurf’, ‘99999955’); Repetisjon JSP
Operatorer i logiske uttrykk • Logiske utrykk er et utrykk (påstand) som evaluerer til sann (true) eller usann (false • Operatorer man bruker i logiske uttrykk: < Mindre enn antallStudenter < 10000 true <= Mindre eller lik antallVerdensdeler <= 5 true > Større enn PI > 3.12 true >= Større enn eller lik PI >= 3.14 true != Ikke lik (ulik) 7 != 5 true == Lik 8 == 8 true ! Snur sannhetsverdien !false true Repetisjon JSP
Kombinasjon av logiske uttrykk • Man kan kombinere logiske uttrykk med på bruke && (og) og || (eller): • <%= (5>7)&&(3>9) %> Leses 5>7 OG 3>9 • For at uttrykket skal være sant, må begge sider av && være sanne (true). • <%= (4>2)||(4<9) %> Leses 4>2 ELLER 4<9 • For at uttrykket skal være sant, må minst en av sidene av || være sanne (true). Repetisjon JSP
Tabeller (array) • Brukes til å lagre flere elementer av samme datatype i en variabel • Tabell brukes typisk til å lagre lister av navn, en serie med måledata, og returnering av flere parametere fra en metode. • Eks: String[] navneliste = newString[20]; • Denne strengen inneholder 20 elementer fra index 0 til 19. navneliste[0] = ”Petter Hansen”; navneliste[1] = ”Johan Pedersen”; Repetisjon JSP
Tabeller i flere dimensjoner • I enkelte tilfeller er det ønskelig å kunne lage tabeller av flere dimensjoner: String[][] kartNavn = new String[100][100]; • Oppretter en tabell med navn kartnavn i to dimensjoner med størrelse 100,100. kartNavn[30][50] = ”Nidarosdommen”; • Setter inn verdi på tabellen på index 30,50. int[][][][][] pentaDimensjon = new int[10][10][10][10][10]; • Oppretter en tabell med 5 dimensjoner. • Husk at antall bytes som settes av i minnet: • (Multiplikasjon av størrelsen på alle dimensjoner) x (antall bytes for datatype) Repetisjon JSP
Oppgave 2: Hvor mye plass blir satt av i minnet (bytes)? • Oppgave 2a) int tar 4 bytes (32 bits) int[][][] måledata = new int[30][30][30]; • Oppgave 2b) double tar 8 bytes (64 bits) double[][][][][][] multidimensjon = new double[20][10][15][10][30][40]; • Oppgave 2c) hvor mye trengs for booelan? boolean[][] funnetKart = new boolean[200][200]; Repetisjon JSP
Svar oppgave 2: 1 Kbyte = 1024 bytes (210), 1 Mbyte =1,048,576 (220) • Oppgave 2a) int tar 4 bytes (32 bits) int[][][] måledata = new int[30][30][30]; Svar: 30x30x30 x 4 bytes= 108,000 bytes = ca 105 Kbytes • Oppgave 2b) double tar 8 bytes (64 bits) double[][][][][][] multidimensjon = new double[20][10][15][10][30][40]; Svar: 20x10x15x10x30x40 x 8 bytes= 288,000,000 bytes = 275 Mbytes • Oppgave 2c) boolean tar 1 byte (8 bits) boolean[][] funnetKart = new boolean[200][200]; Svar: 200x200 x 1 byte = 40,000 bytes = 39 Kbytes Repetisjon JSP
Valg: if-setning • Skrivemåte for en betingelse og eventuelt handlinger i JSP: if (<betingelse>) { <handling(er)>; } • Handlingen(e) utføres kun dersom betingelsen er sann • VIKTIG: Betingelsen er hva som helst som evaluerer eller returnerer en av verdiene true eller false. Krøllparantes Repetisjon JSP
if-setning med flere alternativer: else if Mange påfølgende betingelser og handlinger: if(<betingelse>){ <handling(er)>; } else if(<betingelse>){ <handling(er)>; } ... (evt. flere else if) else { <handling(er)>; } • NB! • Bare enav handlingen(e) utføres hver gang programmet utføres • Hvis ikke vi har else til slutt kan evt. ingen ting utføres Repetisjon JSP
Ulike typer if-setninger • Sammenlikning av størrelser på variabler: if (x>5 && (y==2 || z!=9)) { ... } • Her evalueres det logiske uttrykket til å få verdien true eller false • Bruk av metoder som returnerer true/false inne i betingelsen på if-setning: if (fornavn.equals(”Alf Inge”)) { ... } • Her kjøres metoden equals som returnerer enten true eller false if (rs.next()) { ... } • Her kjøres metoden next() som returnerer true eller false avhengig om det finnes mer data igjen. Repetisjon JSP
Ulike typer if-setninger (2) • Bruk av metoder som returnerer andre verdier enn true/false: if (mittNavn.compareTo(dittNavn)>0) {...} • Her kjøres metoden compareTo som returnerer et heltall. Dette heltallet settes inn i uttrykket som evalueres i uttrykket til enten true eller false • Bruk av boolean variabler: if (erSant) { ... } • boolean variabler kan enten ha verdien true eller false og kan settes direkte inn i en if-setning. Denne setningen sjekker om erSant har verdien true Repetisjon JSP
int a=3; int b=8; int c=12; if (c>a+b) { out.println(”Yeah”); } else { out.println(”Noah”); } int a=3; int b=8; int c=12; boolean sant=(c>a+b); if (sant) { out.println(”Yeah”); } else { out.println(”Noah”); } To alternative skrivemåte av samme if-setning: • Variabelen sant kan få verdien true eller false - det samme som uttrykket (c>a+b) Repetisjon JSP
To alternative skrivemåte av samme if-setning: (2) • Alternativt kunne man ha skrevet (smør på flesk): int a=3; int b=8; int c=12; boolean sant=(c>a+b); if (sant==true) { out.println(”Yeah”); } else { out.println(”Noah”); } Repetisjon JSP
Nøstede if-setninger • Man kan ha if-setninger inne i if-setninger (nyttig der du har hierarkiske nivåer): if (livsform.equals(”dyr”)) { if(art.equals(”hund”){ out.println(”Voff”); else { out.println(”Mjau eller noe annet...”); } } else { out.println(”Du er antagelig et menneske..”); } Repetisjon JSP
while-løkke while (<betingelse>) { handling(er); } • Utfører handling(er) i blokka hvis betingelsen er true • Betingelsen er lik som for if-setning og kan inneholde logiske uttrykk som inkluderer variabler, tall og metoder som kan evaluere til true eller false Repetisjon JSP
Huskeregel for while-løkke • Sørg for at betingelsen første gang while-løkka skal kjøres er sann. • Sørg for at handlingene i while-løkka en eller annen gang gjør at betingelsen blir false. • Før du kjørere JSP-skriptet, sjekk betingelsen og sjekk innholdet i handlingene i løkka. Repetisjon JSP
Nyttig bruk av while-løkker • Hente ut resultatsett fra en databasespørring: while(rs.next()) { ... } • Metoden next() returnerer true så lenge det er noe data å hente ut fra spørringen. • Når resultatsettet (rs) er tomt, returnerer next()false og while-løkka stopper. • Algoritmer for sortering: while(harByttet) { harByttet=false; ... (sjekke om data i tabell må bytte plass) • Bruker en boolean variabel for å registrere at to elementer i en tabell har byttet plass og skal dermed fortsette while-løkka Repetisjon JSP
for-løkker • Brukes til å gjenta en blokk et bestemt antall ganger. • Bruker en teller og en betingelse: <% for (initialisering teller; betingelse; endring teller) { handling(er); } • Gangen i en for-løkke: • Initialiser teller (f.eks. int x=0; • Sjekk betingelse og hvis den er true utfør blokk • Endre teller • Sjekk betingelse og hvis den er true utfør blokk • ... Repetisjon JSP
Nyttig bruk av for-løkker • Utføre noe et bestemt antall ganger: for(int i=1; i<=10;i=i+1) { ... } • Hvor mange ganger blir for-løkka utført? • Gå igjennom en tabell: for(int i=0; i<tabell.length;i=i+1) { out.println(tabell[i]+”<br/>”); } • Husk å starte variabelen fra 0 for å få med første element i tabellen • Bruker tabell.length til å få lengden på tabellen. Repetisjon JSP
Hvorfor bruker man ikke i<=tabell.length i betingelsen? String[] tabell = new String[10]; • Gir en tabell med 10 elementer og tabell.length=10 • tabell[0] Husk at index 0 er første element! • tabell[1] • tabell[2] • ... • tabell[9] Husk at index n-1 er siste element der størrelsen er n • Det siste elementet er altså tabell[9] som gjør at i<tabell.length er riktig Repetisjon JSP
Bruk av tabell.length for tabeller av flere dimensjoner • tabell.length gir antall rader i en tabell (Lengden på dimensjon 1) • tabell[0].length gir antall kolonner (Lengden på dimensjon 2) • tabell[0][0].length gir lengden dimensjon 3 osv. • Eks: String[][][] tabell = new String[10][7][5]; out.println(tabell.length); // Skriver ut verdien 10 out.println(tabell[0].length); // Skriver ut verdien 7 out.println(tabell[0][0].length); // Skriver ut verdien 5 Repetisjon JSP
Nøstede for-løkker (for-løkker inne i for-løkker) • Som for if-setningen kan man også ha flere nivåer med for-løkker (dette gjelder også while): int z=0; for (int x=1; x<10; x=x+1) { for (int y=1; y<10; y=y+1) { z=z+1; } // slutt for(y) }// slutt for (x) out.println(”zx”+z); • Hva blir skrevet ut her og hvordan blir programmet kjørt? Repetisjon JSP
Oppgave1: Bruk av for-løkker til traversering av tabell • Gitt at du har en tabell nedbor som er definert: double[][] nedbor = new double[24][60]; • Tabellen inneholder mm nedbør for 24 timer og 60 mintter av en dag: nedbor[time][minutt] • Lag et JSP-script som skriver ut nedbør for hvert kvarter for hver fjerde time: • 00:00, 00:15, 00:30, 00:45, 04:00, 04:15, 04:30, 04:45, 0800 ... • Her må man bruke nøstende for-løkker oppgave1.jsp Repetisjon JSP
Oppsummering • Variabler: • int: Brukes til beregninger og tellere. Aritmetiske uttrykk • double: Brukes til beregninger. Aritmetiske uttrykk • boolean: Tar vare på sannhetsverdier. Logiske uttrykk • String: Tar vare på tekster. Kan konkateneres • Tabeller: • Samling av data av samme type • Kan ha flere dimensjoner • Kan bruke tabell.length for å finne størrelse på tabell (n) • Index på elementer begynner på 0 og slutter på n-1 Repetisjon JSP
Oppsummering (2) • if-setninger • Betingelsen må kunne evalueres til true eller false • Betingelsen kan bestå av evaluering av variabler, en boolean variable, evaluering av resultat fra en metode, eller evaluering av en metode som returnerer true eller false • Kan bestå av else if og avsluttes ofte med else • Kan ha nøstede if-setninger som brukes som regel når betingelsene er av hierarkisk type Repetisjon JSP
Oppsummering (3) • while-løkker • Betingelsen er lik som for if-setninger og må evaluere til true eller false • Bruker i tilfeller der man har en metode som man kaller som en eller gang vil bli false, f.eks. rs.next() • Brukes i tilfeller der man er usikker på når man er ferdig (f.eks. sortering av innhold i en tabell). Repetisjon JSP
Oppsummering (4) • for-løkker: • Brukes i tilfeller der man skal utføre en blokk et beste antall ganger. • Utførelse av for er på følgende måte: • Initialisering av telle variabel • Sjekk av betingelse • Utføre blokk • Øk teller • Sjekk av betingelse • ... • Nøstede for-løkker er nyttige til å gå igjennom flerdimensjonale tabeller. Repetisjon JSP
Eksamensoppgave (5%) Følgende kode inneholder 5 feil. Finn disse feilene. Skriv ned linjenummer hvor feilen er og hva den riktige koden skal være. Repetisjon JSP
Eksamensoppgave Repetisjon JSP