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

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

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

Föreläsning 7-8 Innehåll

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

Föreläsning REPETITION & EXTENTA

Föreläsning 3-4 Innehåll

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

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

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

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

Instuderingsfrågor, del D

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

Tentamen OOP

Malmö högskola 2008/2009 CTS

Tentamen i Grundläggande Programvaruutveckling, TDA548

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

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

Föreläsning 5-6 Innehåll

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

Objektorienterad programmering i Java

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

TENTAMEN OOP

Malmö högskola 2007/2008 Teknik och samhälle

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

(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 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

TENTAMEN OOP

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

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

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

Typkonvertering. Java versus C

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

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

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

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

Objekt och klasser - Introduktion

Tentamen i Grundläggande Programvaruutveckling, TDA548

Föreläsning 13 Innehåll

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

SMD 134 Objektorienterad programmering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Bedömning av kontrollskrivning, EDA016 Programmeringsteknik

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

PROGRAMMERING-Java TENTAMINA

Objektorienterad Programmering (TDDC77)

Java, klasser, objekt (Skansholm: Kapitel 2)

Malmö högskola 2007/2008 Teknik och samhälle

F4. programmeringsteknik och Matlab

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Tentamen, EDAA20/EDA501 Programmering

Objektorienterad Programkonstruktion

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 3: Booleans, if, switch

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

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

TENTAMEN OOP

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Laboration A Objektsamlingar

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Lösningsförslag tentamen FYTA11 Java

Grundläggande stränghantering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Del A (obligatorisk för alla)

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

PROGRAMMERING-JAVA TENTAMINA

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

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

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

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

Objektorientering: Lagring, räckvidd och livstid

Tentamen, EDA501 Programmering M L TM W K V

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

Repetition av OOP- och Javabegrepp

Transkript:

Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet används någon annanstans i programmet, t ex x = 5; System.out.println(x); slår kompilatorn upp rätt variabel. Denna uppslagning följer vissa regler synlighetsregler. Synlighetsregler (1) Synlighetsregler (2) En parameter är synlig i den metod där den deklarerats. public class BankAccount{ public void deposit(double depositamount){ amount += depositamount; printamount(); public void printamount(){ System.out.println( The amount is + amount); En lokal variabel är synlig från den punkt den deklarerats till blockets { slut. public void calculation(){ int x = 32; if(x > 0){ int y = x*10; System.out.println(x);

Synlighetsregler (3) Synlighetsregler (4) En lokal variabel som deklarerats i en for-sats är endast giltig inom for-satsen. for(int i = 10; i >= 0; i -= 2){ System.out.println( Now the counter is + i); System.out.println( Now the counter is + i); // FEL Den sista raden ger ett kompileringsfel: i cannot be resolved to a variable Attribut och metoder är synliga inom klassen. public class BankAccount{ private double amount; public void deposit(double depositamount){ amount += depositamount; printamount(); public void printamount(){ System.out.println( The amount is + amount); public class Scopes { private int a; public Scopes(int a) { this.a = a; System.out.println(a); public void p1() { double a = 5.3; System.out.println(a); public void p2() { if (6 * 7 == 42) { boolean a = true; System.out.println(a); public void p3() { { a = 9; System.out.println(a); public static void main(string[] args) { Scopes s = new Scopes(29); s.p1(); s.p2(); s.p3(); Varje gång namnet a används söker kompilatorn upp motsvarande deklaration. Börja leta bland föregående satser i det block { där namnet används Sök därefter utåt, från blocket, via metoden, till klassen Den närmsta deklarationen (enligt denna ordning) används Alltså: En deklaration är giltig i det block { där den står En deklaration kan skuggas av en annan (närmare) Parametrar är giltiga i metoden Programmet skriver ut fyra värden. Vilka? String & StringBuilder

Klassen String Slå ihop (konkatenera) strängar Klassen String beskriver en teckensträng (en följd av tecken). String s = "En massa tecken" String empty = ""; s empty en massa tecken String s1 = "En text"; String s2 = "En text till"; String result = s1 + " och " + s2; En text s1 s2 result En text till En text och En text till Längden på en sträng Notera att Längden på en sträng kan man få veta genom att anropa metoden length() String s1 = "Hej"; String s2 = "4%&6"; String s3 = ""; System.out.println(s1.length()); System.out.println(s2.length()); System.out.println(s3.length()); Strängen i sig är alltid ett objekt. Man kan alltså anropa en metod direkt på ett strängvärde. Följande: "Hej".length();..är alltså möjligt, och är samma sak som new String("Hej").length(); (Den andra konstruktionen är faktiskt möjlig för alla objekt, om man inte behöver en referensvariabel till dem.)

Pseudokod: behandla alla tecken i strängen Kod: Behandla alla tecken i strängen String s =...; for (int i = 0; i < s.length(); i++) { // aktuellt tecken nås med // anropet s.charat(i); Exempel. Räkna antal blanktecken i strängen s. int spaces = 0; for (int i = 0; i < s.length(); i++) { if (s.charat(i) == ' ') { spaces++; Viktiga operationer på String (urval) Vad jämförs egentligen här? /* Skapar en tom sträng("") */ String(); /* Ger antalet tecken */ int length(); /* Ger tecknet som ligger på plats pos */ char charat(int pos); /* true om innehållet i aktuell sträng är lika med innehållet i s */ boolean equals(object s); /* jämför aktuell sträng med s */ int compareto(string s); /* index för den första förekomsten av ch, -1 om ch inte finns */ int indexof(char ch); /* ny sträng med tecknen med index [start, end) */ String substring(int start, int end); if (s1 == s2) { System.out.println("Samma objekt"); else { System.out.println("Inte samma objekt"); Här jämförs innehållet i referensvariablerna s1 och s2. Vi kontrollerar alltså om s1 och s2 refererar till samma objekt eller inte. s1 s2 abc abc

Jämföra teckensträngar med equals Vill man jämföra innehållet i teckensträngarna måste man använda equals. Från specifikationen: /* Returnerar true om innehållet i aktuell sträng är lika med innehållet i s. */ boolean equals(object s); if (s1.equals(s2)) { System.out.println("Samma innehåll"); else { System.out.println("Inte samma innehåll"); Jämföra teckensträngar med compareto (bokstavsordning) /** Jämför aktuell sträng med s. Returnerar 0 om teckensträngarna är lika, ett negativt tal om aktuell sträng är mindre än s, ett positivt tal om aktuell sträng är större än s.*/ int compareto(string s); String s1 = "java"; s1.compareto("java") kommer ge ett svar == 0 s1.compareto("javac") kommer ge ett svar < 0 s1.compareto("java") kommer ge ett svar > 0 s1.compareto("jazz") kommer ge ett svar < 0 Klassen StringBuilder Klassen StringBuilder beskriver en följd av tecken som kan läsas av och ändras. StringBuilder b = new StringBuilder("En massa tecken"); b.append('!'); b En massa tecken! Varför StringBuilder? Man kan skapa strängar stegvis med String, men det är inte alltid effektivt. Här skapas en ny sträng (ett nytt objekt) i varje tilldelning. Ibland är det ineffektivt att skapa nya objekt på detta sätt. (Det gör ingen skillnad om man använder +=.) public static String fib(int n) { int f0 = 0; int f1 = 1; int f2 = 1; String result = "1"; for (int i = 2; i <= n; i++) { f2 = f1 + f0; f0 = f1; f1 = f2; result = result + " " + f2; return result;

String vs. StringBuilder Vid omfattande manipulationer av strängar rekommenderas StringBuilder. StringBuilder gör att man dynamiskt och effektivt kan ändra i en och samma sträng. Typiskt används metoderna append och insert. Så länge man hanterar konstanta (oföränderliga) strängar är String både enklare och effektivare. Viktiga operationer på StringBuilder Skapa, ta reda på längd och tecken (som String): /* Skapar en tom strängbuffert */ StringBuilder(); /* Skapa en strängbuffert innehållande en kopia av s * StringBuilder(String s); /* Returnerar antalet tecken i bufferten */ int length(); /* Ger oss tecknet på plats pos */ char charat(int pos); Skapa String-objekt med samma innehåll: /* skapar ett String-objekt med samma innehåll som denna strängbuffert */ String tostring(); Ändra innehållet i StringBuilder-objekt /* ändrar tecknet på plats k till ch */ void setcharat(int k, char ch); /* lägger till s efter tecknen */ StringBuilder append(string s); /* lägger in s på plats k, flyttar tecknen efter*/ StringBuilder insert(int k, String s); /* tar bort tecknet på plats k */ StringBuilder deletecharat(int k); Man kan sätta in värden av andra typer än String i ett StringBuilderobjekt. Det finns flera metoder append och insert. Dessa har en parameter av typen int, double, char,...! Tidigare exempel, nu med StringBuilder public static String fib(int n) { int f0 = 0; int f1 = 1; int f2 = 1; StringBuilder result = new StringBuilder("1"); for (int i = 2; i <= n; i++) { f2 = f1 + f0; f0 = f1; f1 = f2; result.append( ); result.append(f2); return result.tostring();

StringBuilder Metoden tostring Vad händer här? String s =...;... StringBuilder b = new StringBuilder(s); int i = 0; while (i < b.length() - 1) { if (b.charat(i) ==. ) b.charat(i) ==, ) { b.insert(i + 1, ); i++; i++; s = b.tostring(); Det är vanligt att man lägger till metoden tostring i sina klasser. Metoden tostring anropas automatiskt inuti println och används av debuggern. Den kan alltså användas för att presentera objektet på ett läsligt sätt. tostring deklareras såhär: public String tostring() Metoden tostring Metoden tostring i klassen Point (kap. 3) skulle kunna se ut så här: public String tostring() { return x + " " + y; eller så här: public String tostring() { StringBuilder b = new StringBuilder(); b.append(x); b.append(' '); b.append(y); return b.tostring(); För enstaka uttryck gör Java automatiskt strängkonkatenering med hjälp av StringBuilder. Dessa två exempel är alltså ekvivalenta. saippuakivikauppias

Övning på String Åter till main-metoden Skriv en metod som returnerar true om en given sträng är en palindrom och false i alla andra fall. Lös uppgiften i steg: 1. Palindrom utan mellanslag, endast stora bokstäver. 2. Palindrom med mellanslag, endast stora bokstäver. 3. Palindrom med mellanslag, stora och små bokstäver. public class Example { public static void main(string[] args) { System.out.println( Java är lajbans! ); Programmet är en klass Main-metoden är en metod som andra (men har en speciell uppgift) Main-metoden är statisk (precis som metoderna i Math) Main-metodens parameter är en vektor av strängar Lunds Tekniska Högskola Xxxxxxxxxxxxxxxx Xxxxxxxxxxxxxx ÅÅÅÅ-MM-DD