Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/boker/java/ versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3 Bruk av ferdige klasser Objekter som modeller av virkelighetenside 2-3 Et bankkonto-objektside 4 Objekter og klasserside 5 Klassediagramside 6 Klassen Kontoside 7-8 Tilgangs- og mutasjonsmetoder, mutabel og immutabelside 9 Et fullstendig klientprogramside 10-14 En referanse settes lik en annen referanseside 15 Datasaneringside 16 Klassen Randomside 17-18 Unntaksobjekterside 19 Klassekonstanter- og metoder i Java-biblioteketside 20 Klassemetoder for å omforme tekst til tallside 21 Pakker og importside 22-24 Å lese data fra brukeren – JOptionPaneside 25-27 Klassen java.lang.Stringside 28-30 Å tilpasse et program til lokale forholdside 31 Formatering av desimaltall og tidspunkterside 32-35

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 2 Objekter som modeller av virkeligheten •modell - en forenkling av virkeligheten. Vil fokusere på bestemte sider ved virkeligheten. •objekt - en modell av en ting som problemet vi skal løse, handler om. –fokus på kunnskap, objektet vet en del ting om seg selv: •eksempler på objekter: –Et bankkonto-objekt vet nummeret sitt, hvem som eier kontoen og saldoen. Det må kunne håndtere innskudd og uttak. –En student vet sitt eget studentnummer, sine egne karakterer, navn, fødselsdato og adresse. Han vet hvordan han skal komme seg til studiestedet, og hvordan han skal løse eksamensoppgavene. –Et møte vet hvor det holder til, hvem som skal delta, når det starter og når det er planlagt avsluttet. Etter en tid vet det også hvem som deltok, og når det virkelig sluttet. •ikke akkurat som i virkeligheten, men dette er modeller, og modeller er ikke miniatyrer av virkeligheten

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 3 Objekter i virkeligheten og i programmering •Et objekt i en objektorientert modell er vesensforskjellige fra det virkelige objektet som det er en modell av. •Modellobjektet har –mye kunnskap om seg selv –ansvar for å utføre visse oppgaver. •Dette er uavhengig av om det virkelige objektet er levende, dødt eller abstrakt. •Vi tar likevel nesten alltid utgangspunkt i de virkelige objektene, når vi skal lage modellobjektene. •Når vi i fortsettelsen snakker om objekter, mener vi modellobjektene. Dersom vi ønsker å referere til de virkelige objektene, sier vi det i klartekst.

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 4 Et bankkonto-objekt 123456676756 Ole Olsen 2300,50 innskudd uttak finn navn finn saldo finn kontonr faktakunnskap (egenskaper) oppgaver (atferd)

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 5 Objekter og klasser •Et objekt har –en tilstand: en situasjon i livet til objektet, der objektet tilfredsstiller en betingelse, gjennomfører en aktivitet eller venter på at noe skal skje - eksempler? –attributter: navngitte egenskaper med definerte verdiområder - eksempler? –identitet: et objekt skiller seg fra alle andre objekter –atferd: den mengden oppgaver (operasjoner) som objektet kan utføre •Innkapsling er en viktig egenskap ved objekter –opplysninger om hvordan en oppgave løses er gjemt inne i objektet –klienten forholder seg kun til den atferden som er definert for objektet •En klasse er en beskrivelse av en mengde objekter som har det til felles, at de har de samme attributtene og samme atferd.

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 6 Klassediagram •Klasser illustreres ved hjelp av klassediagram. •Klassediagram er en del av UML (Unified Modeling Language). •En klasse beskriver en datatype. Gjør oppgave 2 side 82. klassenavn attributter operasjoner Konto kontonr navn saldo finnKontonr finnNavn finnSaldo innkudd uttak

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 7 Grensesnittet til et objekt av klassen Konto •Grensesnittet er en beskrivelse av atferden til objektet, det vil si de meldingene som en klient kan sende til objektet. •Operasjonene programmeres som metoder. Metodene i klassen Konto kan beskrives med følgende metodehoder: •long finnKontonr() •StringfinnNavn() •double finnSaldo() •void innskudd(double beløp) •void uttak(double beløp) •Metodekroppene inneholder programkoden som ligger bak (implementasjonen), for eksempel oppdatering av saldoen ved uttak. •Parametrene forteller at vi må sende data sammen med meldingene. I dette tilfelle skal to av meldingene ha med en desimalverdi. parametre (formelle) parametre

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 8 Objektet kan sende svar tilbake Sett inn 1000 kroner kr 3300,50 123456676756 Ole Olsen 2300,50 Finn saldo klient tjener 123456676756 Ole Olsen 3300,50 tjener ingen returverdi, returtype void desimaltall returneres, returtype double

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 9 Tilgangs- og mutasjonsmetoder long finnKontonr() String finnNavn() double finnSaldo() void innskudd(double beløp) void uttak(double beløp) Tilgangsmetoder, endrer ikke datainnholdet i objektet Mutasjonsmetoder, endrer datainnholdet i objektet Klasser som kun tilbyr tilgangsmetoder kalles immutable klasser (datainnholdet kan ikke forandres). Klasser som tilbyr mutasjonsmetoder kalles mutable klasser (datainnholdet kan forandres).

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 10 Et fullstendig klientprogram class KontoTest { public static void main(String[] args) { /* Oppretter et objekt av klassen Konto. */ Konto olesKonto = new Konto(123456676756L, "Ole Olsen", 2300.50); /* Setter inn 1000 kroner */ olesKonto.innskudd(1000.0); /* Spør objektet om den nye saldoen */ double saldo = olesKonto.finnSaldo(); /* Skriver ut saldoen */ System.out.println("Etter innskudd er saldoen lik " + saldo); }

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 11 Å lage et objekt En klasse skal tilby såkalte konstruktører som gjør det mulig å lage objekter av klassen. Konstruktørhode :Konto(long startKontonr, String startNavn, double startSaldo) Vi lager et objekt ved å bruke konstruktøren Konto olesKonto = new Konto(123456676756L, "Ole Olsen", 2300.50); parametre argumenter samsvar datatype og rekkefølge

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 12 Objektet i primærminnet olesKonto Konto olesKonto = new Konto(123456676756L, "Ole Olsen", 2300.50); klassenavn navn på referanse argumenter reservert ord for å skape et objekt 123456676756 Ole Olsen 2300,50 En referanse er en variabel som inneholder adressen til den plassen der objektet ligger. Vi sier at variabelen tilhører en referansetype. For enkelthets skyld bruker vi variabelnavnet som om det var navnet på objektet, og ikke på en referanse til dette. String er en slik referansetype. De andre datatypene vi hittil har stiftet bekjentskap med tilhører gruppen ”primitive datatyper”.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 13 Sender en melding til et objekt ved å kalle en metode Metodehode :void innskudd(double beløp) Vi bruker metoden for å sende en melding til et bestemt objekt: olesKonto.innskudd(1000.0); parameter argument objekt metodekall

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 14 Typen til argumentet må stemme med parametertypen •Typen behøver ikke være den samme, det er nok at argumentet automatisk kan omformes til parametertypen. •Eksempel: Metoden –void økPris(double økning) •vil akseptere følgende kall: –enVare.økPrisen(20); // argumentets type er int, omformes automatisk til double –enVare.økPrisen(12.50); // argumentets type er double, ingen omforming •Også andre talltyper som er mindre enn double aksepteres som argument.

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 15 En referanse settes lik en annen referanse Det eksisterer ikke lenger noen referanse til det andre objektet, det blir derfor fjernet fra primærminnet. olesKonto olesKonto2 Før: To referanser til hvert sitt konto-objekt Etter at setningen olesKonto2 = olesKonto; er utført: olesKonto2 olesKonto Gjør oppgave 1-4 side 88.

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 16 Datasanering •Hva skjer med alle objektene etter hvert? •Blir minnet fullt til slutt dersom man stadig lager nye objekter? •Java bruker en teknikk som kalles automatisk datasanering (engelsk: automatical garbage collection). Med jevne mellomrom rydder Java opp i minnet. Objekter som det ikke lenger eksisterer referanser til, slettes. •Ikke alle programmeringsspråk rydder opp selv. En C++- programmerer må for eksempel selv passe på å frigjøre plass som det ikke lenger er behov for. Også Java tilbyr metoder som lar programmereren be om opprydding i spesielle situasjoner.

17 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 17 Klassen Random Et objekt av klassen Random kan generere pseudo-tilfeldige tall klient tjener, objektet randomGen Gi meg et tilfeldig tall i intervallet [0..99]! 76 randomGen.nextInt(100) java.util.Random randomGen = new java.util.Random(frø); int tall = randomGen.nextInt(grense);

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 18 Programmet ser slik ut class TestRandom { public static void main(String[] args) { final int grense = 100; // ønsker tall i intervallet [0, 99] final int frø = 17; // frøet bør være et primtall java.util.Random randomGen = new java.util.Random(frø); int tall1 = randomGen.nextInt(grense); int tall2 = randomGen.nextInt(grense); int tall3 = randomGen.nextInt(grense); int tall4 = randomGen.nextInt(grense); System.out.println( "Her er fire tilfeldige tall i intervallet [0.." + (grense - 1) + "]: " + tall1 + " " + tall2 + " " + tall3 + " " + tall4); } /* Kjøring av programmet: Her er fire tilfeldige tall i intervallet [0..99]: 76 20 94 16 */ Gjør oppgave 1 side 91.

19 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 19 Unntaksobjekter •Setningen –int svar = 6 / 0; •kompilerer uten feil. Ved kjøring stopper programmet med følgende melding: Exception in thread "main” java.lang.ArithmeticException: / by zero •Et objekt av en ”exception”-klasse kalles et unntaksobjekt. •Unntaksobjekt blir laget når visse feil inntreffer. •Unntaksobjekt kastes. •Det er mulig å fange dem, og håndtere feilen på en fornuftig måte. (se kap.11) klassenavn

20 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 20 Klassekonstanter og –metoder i Java-biblioteket •Den mest vanlige måten å programmere på er å lage objekter og sende meldinger til dem. Vi kaller metodene for objektmetoder. •Et bibliotek bør imidlertid tilby enkelte metoder av generell natur, såkalte klassemetoder. Disse kan brukes uten å være knyttet til et objekt: –metoder for matematiske beregninger (kvadratrot, sinus, cosinus, etc.) –metoder for søking og sortering •Klassemetoder er merket med modifikatoren static –Fra klassen java.lang.Math: •public static double sqrt(double tall) •public static double sin(double tall) –Eksempel på bruk: •double kvadratroten = Math.sqrt(15678); •Biblioteket inneholder også mange konstanter, i klassen java.lang.Math: •public static final double PI = 3.14159265358979323846; –Eksempel på bruk: •double circumference = Math.PI * 2 * radius;

21 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 21 Klassemetoder for å omforme tekst til tall •Eksempel på bruk: String tekst1 = "2345"; String tekst2 = "45.3"; int tall1 = Integer.parseInt(tekst1); // tolker tekst1 som heltall double tall2 = Double.parseDouble(tekst2); // tolker tekst2 som desimaltall System.out.println(tall1 + " " + tall2); •Utskrift: 2345 45.3 Gjør oppgaven side 93.

22 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 22 Pakker •Java API’et inneholder mange klasser. De organiseres i pakker. •En pakke er en samling med klasser. Standardpakker: –grafikk, lyd og bilder –kommunikasjon over nettverk –databasehåndtering •Alle klasser tilhører en pakke. –De fleste klassene vi lager vil tilhøre en navnløs pakke. –Klasser til mer allmenn bruk bør ligge i en pakke med navn. •Pakkenavnet må være identisk med navnet på den underkatalogen der klassene i pakken ligger. •Pakkenavnet er en del av klassenavnet, eksempel: java.util.Random •Vi trenger ikke å oppgi pakkenavn for klasser i pakken java.lang.

23 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 23 import-deklarasjonen for klasser •I stedet for å skrive det fullstendige klassenavnet hver gang, kan vi sette en import-deklarasjon i begynnelsen av filen: –import java.util.Random; •Kan erstatte klassenavnet med *, da er alle klasser i denne pakken tilgjengelig: –import java.util.*; •Eksempel: import java.util.*; class TestRandom { public static void main(String[] args) {..... Random randomGen = new Random(frø);

24 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 24 import-deklarasjonen for klassekonstanter og -metoder •Kan gjøre klassekonstanter og –metoder tilgjengelig med import static, eksempel: import static java.lang.Math.*; // alle klassekonstanter og -metoder import static java.lang.Integer.parseInt; // kun parseInt class TestImportStatic { public static void main(String[] args) { System.out.println("Den matematiske konstanten pi er lik " + PI); System.out.println("Den matematiske konstanten e er lik " + E); int tall = parseInt("-345"); System.out.println("Tall er lik " + tall); int maks = Integer.MAX_VALUE; // denne konstanten er ikke importert System.out.println("Største heltallsverdi er " + maks); } Utskriften ser slik ut: Den matematiske konstanten pi er lik 3.141592653589793 Den matematiske konstanten e er lik 2.718281828459045 Tall er lik -345 Største heltallsverdi er 2147483647 import static benyttes i boka kun for JOptionPane

25 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 25 Å lese data fra brukeren Vi bruker klassen javax.swing.JOptionPane: String lengdeLest = JOptionPane.showInputDialog( "Lengde (meter): "); String breddeLest = JOptionPane.showInputDialog( "Bredde (meter): "); JOptionPane.showMessageDialog(null, "Arealet av rektangelet er " + arealet + " kvadratmeter");

26 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 26 Her er hele programmet /* * Arealberegning2.java E.L. 2004-03-17 * * Leser inn lengde og bredde av et rektangel, deretter beregnes arealet. */ import static javax.swing.JOptionPane.*; class Arealberegning2 { public static void main(String[] args) { String lengdeLest = showInputDialog("Lengde (meter): "); String breddeLest = showInputDialog("Bredde (meter): "); double lengde = Double.parseDouble(lengdeLest); double bredde = Double.parseDouble(breddeLest); double arealet = lengde * bredde; showMessageDialog(null, "Arealet av rektangelet er " + arealet + " kvadratmeter"); } /* Eksempeldata: Lengde: 5.8 m Bredde: 2.4 m Arealet av rektangelet er 13.92 kvadratmeter. */

27 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 27 Flere meldingsbokser JOptionPane.showMessageDialog(null, "Den enkleste meldingsdialogen"); JOptionPane.showMessageDialog(null, "Viser feilmeldingssymbolet", "Metoden med fire parametre", JOptionPane.ERROR_MESSAGE); ImageIcon bilde = new ImageIcon("blaa.gif"); JOptionPane.showMessageDialog(null, "En gif-fil med blå firkant", "Metoden med fem parametre", 0, bilde); Gjør oppgave 1 side 98.

28 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 28 123456676756 2300,50 En av standardklassene: klassen java.lang.String String by = "Trondheim"; er det samme som: String by = new String("Trondheim"); Trondheim by Ole Olsen skal egentlig være slik: olesKonto 123456676756 Ole Olsen 2300,50 olesKonto

29 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 29 Noen få av klassens nærmere 50 metoder •String(String verdi) // konstruktør •char charAt(int posisjon) // returnerer tegnet på den gitte posisjonen // Posisjonene nummereres fra og med 0. •int length() // returnerer antall tegn som teksten består av •String toLowerCase() // lager ny tekst lik den gamle, alle bokstavene små •String toUpperCase() // lager ny tekst lik den gamle, alle bokstavene store •String trim() // lager ny tekst, blanke foran og bak er fjernet •Metoder som søker etter et enkelt tegn eller en delstreng. Søking forfra: –public int indexOf(int tegn) –public int indexOf(int tegn, int fraIndeks) –public int indexOf(String delStreng) •Metoder som søker etter et enkelt tegn eller en delstreng. Søking bakfra: –public int lastIndexOf(int tegn) –public int lastIndexOf(int tegn, int fraIndeks) –public int lastIndexOf(String delStreng) –public int lastIndexOf(String delStreng, int fraIndeks)

30 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 30 import static javax.swing.JOptionPane.*; class TestString { public static void main(String[] args) { String tekst = showInputDialog("Skriv en tekst: "); String utenBlankeForanOgbak = tekst.trim(); String resultat = "Blanke fjernet: " + utenBlankeForanOgbak; String store = tekst.toUpperCase(); resultat = resultat + "\nBare store bokstaver: " + store; String små = tekst.toLowerCase(); resultat = resultat + "\nBare små bokstaver: " + små; char førsteBokstav = tekst.charAt(0); resultat = resultat + "\nFørste bokstav: " + førsteBokstav; char andreBokstav = tekst.charAt(1); resultat = resultat + "\nAndre bokstav: " + andreBokstav; int antTegn = tekst.length(); resultat = resultat + "\nLengden til teksten: " + antTegn; showMessageDialog(null, resultat); } /* Utskriftvindu: Blanke fjernet: Anne Katrine Ås Bare store bokstaver: ANNE KATRINE ÅS Bare små bokstaver: anne katrine ås Første bokstav: A Andre bokstav: n Lengden til teksten: 15 */ tekst Anne Katrine Ås store ANNE KATRINE ÅS små anne katrine ås A førsteBokstav n andreBokstav 15 antTegn Eksempel på bruk av klassen String Gjør oppgave 1-3 side 103. En ny og større streng lages i hver tilordningssetning som har resultat på venstre side av tilordningstegnet. utenBlankeForanOgBak Anne Katrine Ås resultat Blanke fjernet: …

31 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 31 Å tilpasse et program til lokale forhold •Med formatering mener vi hvordan for eksempel et tall vises fram på skjermen eller på annen utskriftsenhet. Formatering berører ikke verdien i seg selv. •Anta at variabelen tall inneholder verdien 35645,4. Tallverdien kan skrives ut (formateres) på flere måter: –35,645.4 –35 645,4 –35 645,40 –35645 •Formatering av tall er en liten del av det vi kaller ”tilpasning til lokale forhold”. Andre tilpasninger er myntenhet og datoformat. •I Windows setter vi dette i ”Regionale innstillinger”. •I Java kan vi la programmet følge det miljøet programmet kjører i (dvs. regionale innstillinger), eller vi kan selv sette lokalisering (= språk og land). •Klassen java.util.Locale hjelper oss med dette: Locale norsk = new Locale("no", "NO"); Locale.setDefault(norsk); •Kun bestemte klasser tar hensyn til lokalisering. Eksempel på setning som ikke tar hensyn til lokalisering: System.out.println(tall);

32 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 32 Formatering av desimaltall import java.util.Locale; import java.text.NumberFormat; class TallFormatering { public static void main(String[] args) { Locale svensk = new Locale("sv", "SE"); Locale.setDefault(svensk); double tall = 0.757; NumberFormat tallformat = NumberFormat.getNumberInstance(); NumberFormat prosentformat = NumberFormat.getPercentInstance(); NumberFormat pengeformat = NumberFormat.getCurrencyInstance(); System.out.println("Som desimaltall: " + tallformat.format(tall)); System.out.println("Som prosent: " + prosentformat.format(tall)); System.out.println("Som beløp: " + pengeformat.format(tall)); } /* Kjøring av programmet: Som desimaltall: 0,757 Som prosent: 76% Som beløp: 0,76 kr */

33 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 33 Formatering av desimaltall, forts. •Vi bruker klassen java.text.DecimalFormat. •Eksempel: DecimalFormat formatet = new DecimalFormat("###0.00"); String tekst = formatet.format(13.4); System.out.println(tekst); tekst = formatet.format(-3456789.4); System.out.println(tekst); •gir utskriften (merk desimalkomma!) 13,40 -3456789,40 •Formatet bygges opp av koder, én kode for hver posisjon: 0 null: Skriv alltid ett siffer på denne plassen. # skigard: Skriv ett siffer på denne plassen, men ikke dersom dette sifferet er en null i begynnelsen eller slutten av tallet.. punktum: Her skal desimalskillet være. Vis minst ett siffer til venstre for desimalskillet, og alltid akkurat to sifre til høyre for desimalskillet.

34 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 34 Koder for å lage mønster til DecimalFormat-konstruktøren kodetolkes someksempeltallverdi og utskrift 0Et siffer”0000.00”6,7 blir 0006,70 #Et siffer, men vis det ikke dersom det er en null i begynnelsen eller slutten av tallet. ”####.##”6,7 blir 6,7.Plassering av desimalskille (komma på norsk). se over,Plassering av gruppeseparator (mellomrom på norsk). “###,###.##”56786,7 blir 56 786,7

35 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 3, side 35 Formatering av tidspunkter import java.util.Date; import java.text.DateFormat; class DatoFormatering { public static void main(String[] args) { Date nå = new Date(); // objektet inneholder informasjon om dato og klokkeslett /* Viser datoen på to forskjellige måter */ DateFormat dFormatShort = DateFormat.getDateInstance(DateFormat.SHORT); DateFormat dFormatLong = DateFormat.getDateInstance(DateFormat.LONG); System.out.println("Dato, format SHORT: " + dFormatShort.format(nå)); System.out.println("Dato, format LONG: " + dFormatLong.format(nå)); /* Viser klokkeslettet på to forskjellige måter */ DateFormat tFormatShort = DateFormat.getTimeInstance(DateFormat.SHORT); DateFormat tFormatLong = DateFormat.getTimeInstance(DateFormat.FULL); System.out.println("Klokkeslett, format SHORT: " + tFormatShort.format(nå)); System.out.println("Klokkeslett, format LONG: " + tFormatLong.format(nå)); } /* Kjøring av programmet: Dato, format SHORT: 18.02.04 Dato, format LONG: 18. februar 2004 Klokkeslett, format SHORT: 10:46:26 Klokkeslett, format LONG: kl 10.46 CET */


Laste ned ppt "Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google