IN105-javaNelson-2. array, evt. flere dimensjoner. Institutt for informatikk Jens Kaasbøll sept. 1999. En funksjon om gangen En klasse om gangen



Like dokumenter
"Nelsons kaffebutikk"

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

Litt om pakker og mest om data inn og ut

Repetisjon. INF gruppe 13

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

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

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

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

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

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

Gjennomgang av eksamen H99

Løsningsforslag til eksamen i INF1000 våren 2006

Løsningsforslag eksamen in105, høsten 2000

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Inf1000 (Uke 10) HashMap og ArrayList

n / ($$ n 0$$/ $ " 1! <! ')! $ : ; $.+ $.5.+ .!)/!/ ) $.) 6$ 7$, $.5., $ 7$,

Løsningsforslag, inf101, våren 2001

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

UNIVERSITETET I OSLO

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

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

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

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF1010 våren Arv og subklasser - del 2

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

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Objektorientert design av kode. Refaktorering.

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

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

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF1010 våren 2018 tirsdag 23. januar

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

Forelesning inf Java 4

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

Gjennomgang av eksamen V99

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

b) 10 2 = 20 c) 5 1 = 5.

IN1010 våren januar. Objektorientering i Java

Oppgave 1 - Kortsvarsoppgave. INF1000 eksamen V05. Oppgave 1 (c) Oppgave 1 (b) Svar: a = 9, b=10

UNIVERSITETET I OSLO

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

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

Forelesning inf Java 5

Forelesning inf Java 5

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

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

TOD063 Datastrukturer og algoritmer

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

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

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

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

import java.io.*; import java.util.*; import javagently.text;

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Løsningsforslag Øving 7

INF Seminaroppgaver til uke 3

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

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

Leksjon 3. Kontrollstrukturer

INF1000: Forelesning 4. Mer om arrayer Metoder

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Løse reelle problemer

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000

Socket og ServerSocket

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

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

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

INF1000 (Uke 14) Resten av eksamen H03 + del av V05

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

Prøveeksamen inf november Arne Maus og Ole Christian Lingjærde

UNIVERSITETET I OSLO

Oppgave 3: Binær representasjon

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

(MVC - Model, View, Control)

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

UNIVERSITETET I OSLO

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

Velkommen til. INF våren 2016

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Transkript:

"Nelsons affebuti" et esempel på systemutviling med objeter Originale lysar av Jens Kaasbøll - mindre endringer av G. Sagestein og Knut Hegna IN5-javaNelson- Analyse Lageradministrasjon (inventory) Mange affeslag (blend, ind, coffee, type):, columbians, VIP, enyans, o Hvert affeslag har et, en, på lager, minimumsnivå, streode Hvert affeslag leveres i er (batches) o Hvert har en og en Funsjoner o Klargjøre for motta av er o Vise data o Sjee minimumsbeholdning o Sjee hvor mye tilgjengelig o Endre o Legge til et til beholdning o Selge affe o Fjern for gammel affe IN5-javaNelson-3 Nelsons affebuti Området som programmet sal handle om Oppgavene som bruerne (undene) sal gjøre Testreefølge: En funsjon om gangen Bruerevaluering Programutførelse og test Kompilering og retting av syntasfeil Analyse Hva består området av? Hvile funsjoner sal programmet dee? Kravspesifiasjon Design Hvordan sal programmet strutureres? Program og datastrutur Kodingsreefølge En funsjon om gangen En lasse om gangen Koding Velge array, evt. flere dimensjoner HashMap Nelsons affebuti modifisert (Gently 8.6) IN5-javaNelson-2 Analyse: Modell av butien Ett affelager Flere slag (type) Flere er for hvert slag mange mange IN5-javaNelson-4

Design: Metoder i -objetet Gently side 235 nyttparti() viskaffe() nytt() () sjeutløpsdato() lagerverdi() lesfrafil() Det lages bare en instans (et objet) av denne lassen utførordre() srivpåfil() IN5-javaNelson-5 Design: Velge datastrutur Array HashMap Lengde Fast Ubegrenset Ordning til max- 2 og flerdimensjonale Ingen Gjennomløp Enel for-løe Iteration put Sette inn objet Tilordning Oppdatere antall Ta ut objet Tilordning, evt. flytting, oppdatere antall Søing Ingen get remove Kaffe Ubegrenset antall 2 Ingen ordning 3 Gjennomløpes ved les/sriv på fil 4 Opprette og fjerne 5 Søing etter et HashMap Kaffeene Ubegrenset antall 2 Stadig nye inn og ut 3 Kronologis ordning 4 Gjennomløpes ved les/sriv på fil 5 Opprette nye, fjerne eldste 6 Ingen søing, ta neste Array best 3 6, HashMap 2 IN5-javaNelson-7 Design: Metoder i de øvrige objetene Gently side 235 () vispåsjerm() sjeminimumsbeholdning(int dato) endrepris() nyttparti() () double 6. Boolean sjeutløp(int dato) sjeutløp(int dato) vispåsjerm double tilgjengelig() 999723 lesfra(stream innfil) lesfra (Stream innfil) srivpå(stream utfil) srivpå (Stream utfil) IN5-javaNelson-6 Dato og tid har lasser for dette i paen util + Mange muligheter Tungt å sette seg inn i Kan brue int int dato, dato 2; dato < dato2 ønser vi sal bety at dato ommer før dato2. Leser derfor alle datoer inn fra terminal og fil på formen ååååmmdd IN5-javaNelson-8

Modellen Kenyan Columbian 78.9 62.5 999723 6. 3. 2. 99988 9996 8. 9995 IN5-javaNelson-9 Konstrutør og utførordreogtavarepådata () = new HashMap(); in = new Stream (System.in); fil = "affe.data"; void utførordreogtavarepådata() lesfrafil(); utførordre(); srivpåfil(); in fil affe.data IN5-javaNelson- Kontrolløren KaffeKontroll main l = new (); l.utførordreogtavarepådata(); l IN5-javaNelson- Filformat 3 Antall affeslag Columbian 62.5 2 Navn på affeslag Pris Antall er 3. 22 Mengde Utløpsdato 7. 22 83.5 2. 2 Kenyan 78.9 8. 26 IN5-javaNelson-2

void lesfrafil() lesfrafil ; innfil = new Stream (fil, Stream.READ ); int antslag = innfil.readint( ); for (int i=; i<=antslag; i++) { = new ( );.lesfra(innfil);.put(.,); // Slutt for fil innfil void lesfra(stream innfil) = innfil.readstring( ); = innfil.readdouble( ); = innfil.readint( ); for (int i=; i<=; i++) { [i] = new (); [i].lesfra( ); () = new [+]; innfil fil affe.data void lesfra(stream innfil) innfil = innfil.readdouble( ); = innfil.readint( ); 6. 999723 IN5-javaNelson-3 Reefølge i oding Etter å ha larlagt funsjonalitet datastrutur og programstrutur sal de enelte metoder defineres og odes. To veier: En funsjon av gangen med nødvendige metoder i hver lasse for å unne utføre funsjonen o Es: Innlesing i personregister + Kan teste hver funsjon hvis vi har utsriftsrutiner Må holde oversit over variable i mange lasser Vil følge denne reefølgen i Kaffebutien En lasse av gangen med de metodene som trengs for å utføre alle funsjoner + Konsentrasjon om variablene i denne lassen Må unne forutse hva en metode i en annen lasse an gjør IN5-javaNelson-5 Testing For å teste en funsjon, må vi ha en måte å observere hva den gjør lesfrafil lager endringer i modellen i primærlageret, så vi an ie vite hva den gjør før vi lager utsriftsmetoder IN5-javaNelson-4 Organisering av metodene Standard framgangsmåte for oding av en av de ordrene programmet sal utføre er å lage en metode i hvert objet som gjør sin jobb med å søe / lese av / oppdatere variablene i sitt objet for denne ordren Metoden i aller metoden i som igjen aller metoden i mange mange IN5-javaNelson-6

srivpåfil void srivpåfil() ; utfil = new Stream (fil, Stream.WRITE); utfil.println(.size()); Iterator it =.values( ).iterator ( ); while (it.hasnext ( )) { = () e.next();.srivpå( utfil ); utfil.close( ); fil innfil fil affe.data utførordre void utførordre () String ordre=""; while (!ordre.equals( "A" )) { System.out.println ("Ordre (Vis all affen, " + "nytt Kaffeslag, nytt Parti, " + "Selg, sje Utløpsdato, " + "Lagerverdi, Avslutt)?" ); ordre = in.readstring( ); if ( ordre.equals ( "V" )) { viskaffe ( ); else if ( ordre.equals ( "K" )){ nytt( ); else if ( ordre.equals ( "P" )){ nyttparti( ); else if ( ordre.equals ( "S" )){ selg( ); else if ( ordre.equals ( "U" )){ sjeutløpsdato( ); else if ( ordre.equals ( "L" )){ lagerverdi( ); // Slutt ommando-løa in IN5-javaNelson-7 IN5-javaNelson-9 og srivpå 3 void srivpå(stream utfil) utfil.println(+" "++" "+antallpartier()); for (int i=; i<=; i++) [i].srivpå(utfil); utfil fil void srivpå (Stream utfil) affe.data utfil utfil.println(+" "+); 6. 999723 IN5-javaNelson-8 viskaffe void viskaffe() ; Iterator it =.values( ).iterator( ); while ( it.hasnext( )) { = () it.next( );.vispåsjerm( ); IN5-javaNelson-2

og vispåsjerm 3 void vispåsjerm() System.out.println( ); System.out.println(); System.out.print( "Pris: r" + Stream.format(,6,2)); System.out.println(" Antall er: " + antallpartier( )); System.out.println(" Mengde Utløpsdato"); for (int i = ; i <= ; i++) [i].vispåsjerm( ); // slutt vispåsjerm void vispåsjerm() System.out.println( Stream.format (, 6, ) + " " + ); 6. 999723 IN5-javaNelson-2 Nytt affeslag-objet Brazilian 72.5 (String n, double p) // Konstrutør som får verdier tilsendt = n; = p; = new [+]; IN5-javaNelson-23 nytt void nytt( ) throws IOException System.out.print( "Navn? " ); String = in.readstring( ); System.out.print( "Pris? " ); double = in.readdouble( );.put(, new (,)); 72.5 Brazilian må ha en onstrutør som tar verdier gjennom parametre IN5-javaNelson-22 Design: Invariant for -arrayen Nye er settes inn sist i int er indesen for (nyeste) som er satt inn Gamle er tas ut fra begynnelsen int er indesen for (eldste) som stadig er med int er høyeste indes i Invariant: <=i<: [i] = <=i<=: [i]!= <i<=: [i] = Når == og det ommer et nytt, flyttes alle ene først i arrayen, sli at == IN5-javaNelson-24

selg void ; String ; System.out.print ( "Kaffeslag? " ); = in.readstring( ); // Leter fram affeslaget med dette et: = ().get(); if (!=) { // Et affeslag med dette et ble funnet.selg( ); else System.out.println( "Belager ingen affe som heter " + ); IN5-javaNelson-25 selg Testdata for salg; double selg(double vilselge) double solgt; if (>=vilselge) { = -vilselge; return vilselge; else { solgt = ; = ; return solgt; vilselge 6 Et affe som ie fins Mer enn på lager Mer enn det er i ett Mindre enn det et for salg 6. 999723 IN5-javaNelson-27 selg void double vilselge; System.out.print( "Hvor mange ilogram? " ); vilselge = in.readdouble( ); if (vilselge > pålager( )) System.out.println( "Belager, vi har bare " + pålager( )+ " på lager nå" ); else { double solgtnå =, igjenåselge = vilselge; for (int i = ; igjenåselge > ; i++) { solgtnå = [i].selg( igjenåselge ); igjenåselge = igjenåselge - solgtnå; fjerntommepartier( ); 5 9 vilselge solgtnå igjenåselge double pålager() double beholdning=; for (int i=; i<=; i++) { if ([i]!= ) beholdning = beholdning + [i].; // Slutt for return beholdning; beholdning IN5-javaNelson-26 fjerntommepartier void fjerntommepartier() 5 9 for (int i=; i<=; i++) { if ([i]!= ) { // Unødvendig test hvis invarianten holder if ([i].==) { [i]=; = i+; // Slutt if ([i]!= ) // Slutt for Testes enlest ved å sette til 3 eller et annet lite tall IN5-javaNelson-28

sjeutløpsdato void sjeutløpsdato( ) int dato; System.out.print( "Dato (ååååmmdd)? " ); dato = in.readint( ); ; Iterator it =.values( ).iterator( ); while ( it.hasnext( )) { = () it.next( );.sjeutløpsdato(dato); // slutt while dato 99935 IN5-javaNelson-29 void nyttparti() 7 if (== & ==) { System.out.println("Belager, programmet er fullt"); else { if (==) { // Her er > // Flytter alle objetene sli at de starter i [] for (int i=; i<=; i++) [i-+] = [i]; = antallpartier(); = ; ; ++; [] = new (); [].lesfraterminal(); // Slutt else 9 nyttparti IN5-javaNelson-3 sjeutløpsdato 7 double sjeutløpsdato(int dato) for (int i=; i<=; i++) { if ([i].<dato) { [i]=; = i+; // Slutt if // Slutt for 9 dato 99935 IN5-javaNelson-3 lesfraterminal void lesfraterminal() System.out.print ("Mengde? "); = in.readdouble( ); System.out.print ("Utløpsdato (ååååmmdd)? "); = in.readint( ); 6. 999723 Fullstendig program via programesempelsida IN5-javaNelson-32