Föreläsning 7. Föreläsning 7

Relevanta dokument
I ett program hantera man ofta samlingar av objekt av samma typ.

Föreläsning 7. Fält Klassen String

Fält och klassen String

Föreläsning 6. Fält. Fält Klassen String. Fält

Föreläsning 7. Föreläsning 7. Fält Klassen String. Fält Klassen String. Fält. I ett program hantera man ofta samlingar av objekt av samma typ.

Objektorienterad programmering

Föreläsning 7. for-satsen Fält

for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

Klassen String Mer om fält Något om inläsning

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 3-4 Innehåll

Instuderingsfrågor, del D

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

Lösningsförslag: Instuderingsfrågor, del D

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tvådimensionella fält

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Föreläsning 3. Iteration while-satsen

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Typkonvertering. Java versus C

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Föreläsning REPETITION & EXTENTA

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Enkla variabler kontra referensvariabel

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Mer om klasser och objekt

Iteration while-satsen

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Tentamen i Grundläggande Programvaruutveckling, TDA548

TDDC77 Objektorienterad Programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Lösningsförslag: Instuderingsfrågor, del A

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Tentamen OOP

TDIU01 - Programmering i C++, grundkurs

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 7-8 Innehåll

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 5-6 Innehåll

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lösningsförslag till tentamen

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

[] Arrayer = Indexerad variabel

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Algoritmer. Två gränssnitt

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

TENTAMEN OOP

TENTAMEN OOP

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-15, TDA540. Dag: , Tid:

Arrayer (fält)

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Föreläsning 2, vecka 8: Repetition

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

PROGRAMMERING-Java TENTAMINA

SMD 134 Objektorienterad programmering

Den som bara har en hammare tror att alla problem är spikar

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Objektorienterad programmering

Saker du ska kunna Föreläsning 13 & 14

Tentamen , Introduktion till Java, dtaa98, dtea53

Programmering för språkteknologer II, HT2011. Rum

Att skriva till och läsa från terminalfönstret

Instuderingsfrågor, del E

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Arrayer. results

Klassdeklaration. Metoddeklaration. Parameteröverföring

Malmö högskola 2008/2009 CTS

Transkript:

Föreläsning 7 I ett program hantera man ofta samlingar av objekt av samma typ. Klassen String Föreläsning 7 Sådana samlingar vill man vanligtvis kunna gruppera ihop till en sammanhängande struktur. För detta ändamål tillhandahåller Java språkkonstruktioner för att hantera fält. Klassen String Ett fält är en numrerad samling av element, där varje element är av samma datatyp och elementen selekteras med. Ett fält är ett objekt som nås via en referens list int[] list new int[5]; Indexering sker alltid från. Oinitierade heltal får värdet. Istället för att skapa ett fält med new kan fältet skapas genom att initiera värden till fältet vid deklarationen. Antalet värden som då deklareras bestämmer fältets storlek. list list[] list[1] list[] list[] list[] int[] list,,, 1; 1 list[] list[1] list[] list[] Varje enskilt element i ett fält kan handhas individuellt via sitt : list[] 1; list[1] 5; list[] 6; list[] ; list[] ; Längden av ett fält fås av instansvariabeln length list list 1 5 6 list[] list[1] list[] list[] list[] list.length int nrofelements list.length; 1 list[] list[1] list[] list[]

Tilldelning ger ingen kopia, utan en referens till samma fält! kan skapas av godtycklig typ. double [] numbers new double[]; String[] names "Adam", "Beda", "Cesar", "David", "Erik", "Fabian"; Point[] points new Point[]; listone int[] listone, 1,, 1, ; int[] listtwo listone; listtwo Klassen Point är definierad enligt: class Point private int x, y; Point(int x, int y) this.x x; this.y y; //fler metoder //Point Point[] points new Point[]; points[1] new Point(5, ); 1 1 Satsen listtwo[] 15; points resulterar således i att även elementet listone[] får värdet 15! listone 5 Oinitierade elemnet får värdet. listtwo 1 15 1 5 6 Klassen java.util.arrays Tilldelning ger ingen kopia, utan en referens till samma fält! I klassen java.util.arrays finns ett antal klassmetoder som är användbara när man arbetar med endimensionella fält: alist int[] alist,,,, 9; int[] anotherlist,,,, 9; 9 9 erar true om fälten a och b är lika långa och motsvarande komponenter är lika, annars eras false. int[] copyof(int[] f, int length) erar en kopia av fältet f med längden length. Om kopian är kortare än f sker en trunkering, om kopian är längre fylls kopian ut med :or. int[] copyofrange(int[] f, int from, int to) erar ett fält som innehåller elementen från from till to-1 i fältet f. String tostring(int[] f) erar en textrepresentation av fältet f, på formen [e1, e,, en] void fill(int[] f, int value) sätter alla element i fältet f till värdet value. void fill(int[] f, int from, int to, int value) sätter alla elementen från from till to i fältet f till värdet value. anotherlist Jämförn alist anotherlist ger resultatet false, eftersom det är värdet i variablerna alist och anotherlist som jämförs och inte värdet som dessa variabler refererar till!! 7 boolean equals(int[] a, int[] b)

Användning av metoder i java.util.arrays Klassen java.util.arrays Exempel: Att sortera och skriva ut ett fält import java.util.arrays; int[] list 5,,,, 1, 9, 6, 7, ; Arrays.sort(list); System.out.println(Arrays.toString(list)); void sort(int[] f) sorterar elementen i fältet f i stigande ordning void sort(int[] f, int from, int to) sorterar element från from till to i fältet f i stigande ordning. Utskriften som erhålls blir: [1,,,, 5, 6, 7,, 9] int binarysearch(int[] f, int key) erar för key om key finns i fältet f, annars eras ett värde <. Observera att fältet f måste vara sorterat! Exempel: Att lokalisera ett element i ett sorterat fält int binarysearch(int[] f, int from, int to, int key) erar för key om key finns i fältet f mellan from och to annars eras ett värde <. import java.util.arrays; int[] list 5,,,, 1, 9, 6, 7, ; Arrays.sort(list); //sortera fältet int Arrays.binarySearch(list, 9); if ( > ) System.out.println("Talet 9 finns i " + ); System.out.println("Talet 9 finns INTE i fältet!"); boolean isinlist(int[] list, int target) Observera att sortering kan innebära att man förstör fältet, ifall om den inbördes ordningen av elementen i fältet har betyd för applikationen. boolean found false; for (int < list.length; + 1) if (target list[]) found true; Att genomlöpa ett fält. Att söka i ett osorterat fält. Implementation av en metod som erar true om ett visst värde finns i ett För att genomlöpa alla elementen i ett fält används normalt en for- loop givet fält, annars erar metoden false. int[] list new int[]; found; Ett första försök: Använd en for-sats för genomsökning av hela listan for (int i i < list.length; i i + 1) //isinlist // gör de bearbetningar av elementen Samtliga dessa metoder finns också för andra typer av fält, t.ex. double[], boolean[] och char[]! 9 Innan vi börjar // som skall göras sökningen har vi inte boolean isinlist(int[] list, int target) funnit vad vi söker boolean found false; for (int < list.length; + 1) if (target list[]) found true; Nu har vi funnit det vi söker found; //isinlist När När vi vi funnit funnit vad vad vi vi söker söker fortsätter fortsätter sökningen sökningen ändock ändock till till slutet slutet av av listan! listan! Onödigt! Onödigt! Sluta Sluta när när vi vi hittat hittat vad vad vi vi söker! söker! Exempel: Summera talen i heltalsfältet list int sumofelements(int[] list) int sum for (int i i < list.length; i i + 1) sum sum + list[i]; sum; //sumofelements 11 1

Att söka i ett osorterat fält. En bättre lösning: Att söka i ett osorterat fält. Använd en while-sats och sluta när vi funnit det vi söker Alternativa implementationer boolean isinlist(int[] list, int target) boolean isinlist(int[] list, int target) int boolean found false; while ( < list.length &&!found) if (target list[]) found true; + 1; found; int while ( < list.length) if (target list[]) true; + 1; boolean isinlist(int[] list, int target) int false; while ( < list.length && target! list[]) + 1; //isinlist < list.length; Avbryter sökningen när vi funnit det vi söker eller då hela fältet är genomsökt boolean isinlist(int[] list, int target)! int list //isinlist //pre: list! //isinlist while ( int firstindexof(int[] < list.length) list, int target) isinlist(int[] list, int target) int boolean if (target list[]) < true; whileint ( list.length && target! list[]) boolean found false; + 1; while( &&!found) boolean isinlist(int[] list, int target) <+ list.length 1; if (target list[]) int list! if ( < found list.length) true; ( int lastindexof(int[] list, target) fält. Att söka i ett osorterat fält. while Att söka iint ett false; < list.length && target!osorterat list[]) ; int list.length Implementation + 1;- 1; av metoder som erar första respektive sista för ett //isinlist Nedan ges ett exempel på hur man inte skall implementera metoden. värde om värdet finns i ett givet fält, annars eras -1. (Varför -1?) + 1; while && target! list[]) Visserligen eras ett riktigt resultat, men. ( > givet 1; <-list.length; 1; //firstindexof list! found; int firstindexof(int[] list, int target) //isinlist private int uglyfirstindexof(int[] list, int target) int int ; //isinlist while ( < list.length && target! list[]) for ( <list.length && target! list[]; ++) ; + 1; ; //lastindexof if ( < list.length) list! 1 ; - 1; //uglyfirstindexof 1 if ( < list.length) ; - 1; //firstindexof 15 int lastindexof(int[] list, int target) int list.length - 1; while ( > && target! list[]) - 1; ; //lastindexof 16

Eget bibliotek med fältmetoder. Problemexempel De metoder vi implementerat ovan är handhar situationer som är vanligt återkommande delproblem i många skilda sammanhang. Det är därför mycket lämpligt all lägga dessa metoder i en och samma klass så att de kan återanvändas i olika tillämpningar. Här placerar vi metoderna i en klass med namnet ArrayUtils. Skriv en metod int[] removeallduplicates(int[] list) import java.util.arrays; class ArrayUtils // en erar true om target finns i fältet classvärdet NoDublicate list, // annars erar metoden värdet false. som tar ett heltalsfält list och erar ett nytt fält vilket innehåller samma element som list där alla eventuella dubbletter är borttagna. // förvillkor: list! boolean isinlist(int[] list, int target)... Exempel: list! // en erar för första förekomsten av target private int[] removeallduplicates(int[] list) Antag att följande deklaration har gjorts // i fältet list, finns inte target i list eras värdet -1 int[] vekt 1,, 1,,, 5, 1,,,, 1; int[] new int[list.length]; // förvillkor: list!newlist int firstindexof(int[] list, int target)... ett anrop av removeallduplicates(vekt) skall era ett fält med int nrofstoreelements följande utseende 1,,, 5, 1,. // en erar för sista förekomsten av target class ArrayUtils i i + 1) // i fältetfor list, finns inte target i list eras värdet -1 (int i i < list.length; // förvillkor: list!// en erar värdet true om target finns i fältet list, int list, int target).. intlastindexof(int[] nextelement.list[i]; // annars erar metoden värdet false. //ArrayUtils if (!ArrayUtils.isInList(Arrays.copyOf(newList, nrofstoreelements), nextelement)) 17 1 //newlist[nrofstoreelements] förvillkor: list! nextelement; boolean isinlist(int[] list, int+ target) nrofstoreelements nrofstoreelements 1; // en erar för första förekomsten av target // iarrays.copyof(newlist, fältet list, finns inte target i list eras värdet -1 Implementation: Design: nrofstoreelements); // förvillkor: list! Förvillkor://removeAllDuplicates list! import java.util.arrays; NoDublicate int firstindexof(int[] list, int target).class.. Diskussion: Vi börjar med att skapar ett nytt fält, som vi kan kalla newlist. Sedan Genomsök endast den del av list! tar vi ett element i taget från fältet list och lägger i dettaargs) element i fältet som innehåller element void main(string[] private int[] removeallduplicates(int[] list) newlist om elementet inte redan finns i newlist. int[] newlist new int[list.length]; en för,sista förekomsten av target int[]//vekt 1, erar, 1,,, 5, 1,,, 1; int nrofstoreelements Algoritm: for (int i fältet list, finns inte target i list eras värdet -1i i < list.length; i i + 1) int[]//result removeallduplicates(vekt); 1. nrofstoredelements int nextelement list[i]; if (!ArrayUtils.isInList(Arrays.copyOf(newList, nrofstoreelements), nextelement)). så länge det finns// flerförvillkor: element kvar i listlist! System.out.println(Arrays.toString(result)); newlist[nrofstoreelements] nextelement;.1. if (nästa elenent i list inte finns i newlist ) nrofstoreelements + 1; Returnera endast den del av //main int lastindexof(int[] list, int target).. nrofstoreelements..1.1. newlist[nrofstoredelements] nästa element i list; fältet som innehåller element.1.. nrofstoredelements nrofstoredelements + 1; //NoDublicate Arrays.copyOf(newList, nrofstoreelements);..som innehåller elementen som lagrats i newlist. Returnera den ett.fält Huvudprogram för att //removeallduplicates testa metoden Datarepresentation://ArrayUtils void main(string[] args) int[] vekt 1,, 1,,, 5, 1,,,, 1; int[] result removeallduplicates(vekt); System.out.println(Arrays.toString(result)); //main //NoDublicate newlist är av datatypen int[]. nrofstoredelements är av datatypen int. 19

Parallella fält. som uppslagstabeller. Två fält kallas för parallella fält om den data som finns i motsvarande i de båda fälten är logiskt relaterade till varandra på något sätt. Exempel: Antag att vi har en golftävling med 5 deltagare. Vi kan lagra deltagarnas namnen i en fält, deltagarnas startnummer i ett annat fält och deltagarnas resultat i ett tredje fält: användas som uppslagstabeller name startnr score "Kalle" 7 "Anna" 5 67 "Stina" 7 "Åsa" 1 7 //pre: none String getweekday(int daynumberofweek) if (daynumberofweek 1) "Monday"; if (daynumberofweek ) "Tuesday"; if (daynumberofweek ) "Wednesday"; if (daynumberofweek ) "Thursday"; if (daynumberofweek 5) "Friday"; if (daynumberofweek 6) "Saturday"; if (daynumberofweek 7) "Sunday"; "Illegal day number!"; //getweekday //pre: none "Sven" 6 String getweekday(int daynumberofweek) if (daynumberofweek 1) "Monday"; Är dessa fält parallella gäller att varje k i fältet namn är relaterat till k i //pre: daynumberofweek > 1 && daynumberofweek < 7 String getweekday(int daynumberofweek) fälten startnr och score, dvs "Stina" hade startnummer och gick banan på 7 slag. ) "Tuesday"; if (daynumberofweek final String[] weekdays "Monday", "Tuesday", "Wednesday", Obs: I just detta exempel hade det varit bättre att skapat en klass GolfPlayer med ) "Wednesday"; "Thursday", "Friday", "Saturday", "Sunday"; if (daynumberofweek instansvariablerna name, startnr samt score och istället använt ett enda fält weekdays[daynumberofweek - 1]; //getweekday med objekt av denna klass. if (daynumberofweek ) "Thursday"; classif ArgumentDemo 5) "Friday"; (daynumberofweek 1 void main(string[] args) "Saturday"; if (daynumberofweek 6) if (daynumberofweek i7) for (int i i < args.length; i + 1) "Sunday"; "Illegal day number!"; " + i + " " + args[i]); System.out.println("Argument //getweekday String[] name new String[5]; int[] startnr new int[5]; int[] score new int[5]; //main till main. Parametrar Parametrar till main. //ArgumentDemo en main har en parameterlista som utgörs av ett fält av strängar: void main(string[] args) Argumenten< till main-metoden ges när exekveringen av programmet startas. Startas //pre: daynumberofweek > 1 && daynumberofweek 7 exekveringen från kommandofönstret skriver man alltså Detta innebär att man kan ge indata till main-metoden parameterlistan. StringviagetWeekday(int daynumberofweek) java Demo Anna Beda Doris Betrakta main-metoden i klassen Demo nedan. Vad main gör är att skriva ut de strängar final String[] weekdays "Monday", "Tuesday", "Wednesday", som finns i dess parameter args. Sker exekveringen från jgrasp skapar man ett kommandorad i vilket argumenten ges,"saturday", genom att trycka på"sunday"; "Run Arguments" i menyn "Run". "Thursday", "Friday", class ArgumentDemo void main(string[] args) weekdays[daynumberofweek - 1]; for (int i i < args.length; i i + 1) //getweekday" + i + " " + args[i]); System.out.println("Argument //main //ArgumentDemo Innehåller parametern args strängarna "Anna", "Beda" och "Doris" blir utskriften Argument Anna Argument 1 Beda Argument Doris

Standardklassen String er i standardklassen String Texter handhas i Java med standardklassen String. Ett objekt av klassen String består av en följd av tecken, dvs element av typen char. int length() char charat(int pos) int Of(char c) Ett objekt av klassen String kan inte förändras efter att det har skapats, dvs objekten är icke-muterbara. int lastindexof(char c) int Of(String str) String int lastindexof(string str) Internt i klassen String lagras teckensträngen i ett teckenfält. - char[] value - int count boolean equals(string str) +String() +String(char[] value) +length() : double +charat(int ) : int boolean equalsignorecase(string str) String trim() ger antal tecken i strängen ger tecknet i position pos ger för första förekomsten av tecknet c, om c inte finns eras -1 ger för sista förekomsten av tecknet c, om c inte finns eras -1 ger för första förekomsten av strängen str, om str inte finns eras -1 ger för sista förekomsten av strängen str, om str inte finns eras -1 ger true om den aktuella strängen och strängen str är lika, annars eras false. jämför aktuell sträng med strängen str utan hänsyn till versaler och germaner. ger true om den aktuella strängen och strängen str är lika, annars eras false. ger en kopia av strängen där inledande och avslutande blanktecken är borttagna 5 6 er i standardklassen String int compareto(string str) gör alfabetisk jämför mellan aktuell sträng och str. Ger värdet om aktuell sträng och argumentet är alfabetiskt lika, ett värde mindre än om argumentet är större och ett värde större än om argumentet är mindre ger en sträng där str har lagts till efter aktuell sträng ger en kopia av den aktuella strängen där alla förekomster av tecknet old har bytts ut mot tecknet new ger delsträngen från position start till slutet av strängen ger delsträngen börjar i position start och slutar i position end-1 ger en kopia av strängen där alla versaler har bytts mot gemener ger en kopia av strängen där alla gemener har bytts mot versaler erar strängen som ett fält av tecken erar texten som motsvarar heltalet n String concat(string str) String replace(char old, char new) String substring(int start) String substring(int start, int end) String tolowercase(string str) String touppercase(string str) char[] tochararray() String value(int n) er i standardklassen Character int getnumericvalue(char ch) ger Unicode för ch boolean isdigit(char ch) ger värdet true om ch är en siffra, annars eras värdet false boolean isletter(char ch) ger värdet true om ch är en bokstav, annars eras värdet false boolean isletterordigit(char ch) ger värdet true om ch är en siffra eller bokstav, annars eras värdet false boolean islowercase(char ch) ger värdet true om ch är en liten bokstav, annars eras värdet false boolean isuppercase(char ch) ger värdet true om ch är en stor bokstav, annars eras värdet false char tolowercase(char ch) om ch är en stor bokstav eras motsvarande lilla bokstav annars eras ch om ch är en liten bokstav eras motsvarande stora bokstav annars eras ch char touppercase(char ch) Fler metoder finns i klassen String. 7

Standardklassen String Standardklassen String I Java används en internationell standard för att lagra tecken som kallas Unicode. Texter kan jämföras med metoderna compare eller equals: De svenska tecknen ligger inte i följd i denna standard, varför inte svenska tecken och svenska ord kan jämföras enligt alfabetisk ordning med metoden compareto i klassen String. Istället måste en särskild jämförare användas. co.compare(s1,s) ger värdet om s1 och s är alfabetiskt lika, ett värde < om s1 kommer för s och ett värde > om s kommer för s1. En jämförare är ett objekt av klassen Collator, som finns i paketet java.text. co.equals(s1, s) En jämförare deklareras på följande sätt: Collator co Collator.getInstance(new Locale("sv", "SE")); ger true om s1 och s är alfabetiskt lika, annars fås värdet false. Det är möjligt att sätta "nivån" på jämföraren: där co.setstrength(collator.primary) Skiljer endast på olika bokstäver. co.setstrength(collator.secondary) Skiljer på utsmyckade bokstäver. co.setstrength(collator.tertiary) Skiljer på utsmyckade bokstäver, samt på små och stora bokstäver. new Locale("sv", "SE") definierar de språkkonventioner som skall användas. Klassen Locale finns i paketet java.util. 9 Problemexempel Design: Att beräkna antalet siffror, antalet konsonanter respektive antalet vokaler är tre separata delproblem, varför vi skriver en metod för var och ett av dessa delproblem: Skriv ett Java-program som läser en mening från terminalen och räknar antalet vokaler, konsonanter och siffror. Analys: Indata: int getnrofdigits(string str) erar antalet siffror i strängen str int getnrofvowels(string str) erar antalet vokaler i strängen str int getnrofconsonants(string str) erar antalet konsonanter i strängen str En sträng av godtyckliga tecken. Algoritm för huvudprogrammet: Utdata: Utskrift av hur många vokaler, konsonanter respektive siffror som finns i den inlästa strängen. 1. Läs strängen indata. antsiffror getnrofdigits(indata);. antvokaler getnrofvowels(indata);. antkonsonanter getnrofconsonants(indata); 5. Skriv ut antvokaler, antkonsonanter och antsiffror Exempel: Strängen "1xfgÄåÖabcdeHI,% ger utskriften: Antalet vokaler är 6 Antalet konstanter är 7 Antalet siffror är " Datarepresentation: indata är av datatypen String antsiffror, antvokaler, antkonsonanter är av typen int. 1

Diskussion: fortsättning Diskussion: fortsättning För att avgöra om ett tecken är en siffra finns metoden isdigit i klassen Character. Algoritmen för metoden int getnrofdigits(string str) blir därför: Algoritmen för metoden int getnrofconsonants(string str) blir: 1. Sätt number. För varje tecken ch i str.1. if (Character.isLetter(ch) &&!isvowel(ch)). number 1. Sätt number. För varje tecken ch i str.1. if (Character.isDigit(ch)). number import javax.swing.joptionpane; class Count void main(string[] args) I metoden boolean isvowel(char ch) deklarerar vi en sträng som innehåller de bokstäver som är vokaler: false; För att avgöra om boolean ett tecken är endone bokstav finns metoden isletter i klassen Character. str!vowels "aeiouyåäö"; String Vi behöver dock särskilja om en bokstav är en vokal eller en konsonant varför vi inför while(!done) en metod: att avgöra om getnrofvowels(string tecknet ch är en vokal använder vi metoden på strängen privateför int str) Of vowels. Anropet "); String true JOptionPane.showInputDialog("Ge en mening: boolean isvowel(char ch) indata erar om ch är en vokal, annars false int number vowels.of(ch) ifint(indata )str) blir därför: Algoritmen för metoden getnrofvowels(string ger värdet finns bland de tecken for (int pos -1omtecknet pos ch<inte str.length(); possom ingår posi strängen + 1) vowels, 1. Sätt number done true; annars ger anropet ett heltal större eller lika med.. För varje tecken ch i str if (isvowel(str.charat(pos))) Eftersom strängen vowels innehåller endast de "små" vokalerna, men ch givetvis kan.1. if (isvowel(ch)) vara en "stor"vokal måste ch översättas number number + 1; till sin "lilla" motsvarighet. Detta görs med int nrofvowels getnrofvowels(indata); metoden tolowercase som finns i klassen Character.. number int nrofconsonants getnrofconsonants(indata); number; int nrofdigits getnrofdigits(indata); JOptionPane.showMessageDialog(, "Antalet vokaler är " + nrofvowels //getnrofvowels str! + "\nantalet konsonanter är " + nrofconsonants private int getnrofconsonants(string str) + "\nantalet siffror är " + nrofdigits); Implementation: Implementation: fortsättning int number // private boolean isvowel(char ch) import javax.swing.joptionpane; for//while (int pos pos < str.length(); posstr! pos + 1) class Count String vocals "aeiouyåäö"; void main(string[] args) char smallch Character.toLowerCase(ch); char ch str.charat(pos); private int getnrofdigits(string str) boolean done false; if (vocals.of(smallch)! -1) //main str! while(!done) true; private int getnrofvowels(string str) (Character.isLetter(ch) &&int!isvowel(ch)) number String indataif JOptionPane.showInputDialog("Ge en mening: "); int number if (indata ) false; for (int pos pos < str.length(); pos pos + 1) for (int pos pos < str.length(); pos pos + 1) done true; //isvowel if (isvowel(str.charat(pos))) if (Character.isDigit(str.charAt(pos))) int nrofvowels getnrofvowels(indata); int nrofconsonants getnrofconsonants(indata); number; int nrofdigits getnrofdigits(indata); number; JOptionPane.showMessageDialog(, "Antalet vokaler är " + nrofvowels //getnrofvowels str! + "\nantalet konsonanter är " + nrofconsonants //getnrofconsonants private int getnrofconsonants(string str) + "\nantalet siffror är " + nrofdigits); int number // number; //Count for (int pos pos < str.length(); pos pos + 1) str! //while char ch str.charat(pos); private int getnrofdigits(string str) //main //getnrofdigits int number if (Character.isLetter(ch) &&!isvowel(ch)) for (int pos pos < str.length(); pos pos + 1) if (Character.isDigit(str.charAt(pos))) number; //getnrofdigits number; //getnrofconsonants //Count 5 6