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.



Relevanta dokument
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.

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

Del A (obligatorisk för alla)

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

Malmö högskola 2008/2009 CTS

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

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

Del A (obligatorisk för alla)

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

LyckaTill önskar Anna

Tentamen OOP

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

Objektorienterad programmering i Java

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

TENTAMEN OOP

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

Lösningsförslag övning 2.

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

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

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

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 )

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen i Programmeringsteknik I

Objekt och referenser

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Föreläsning 3-4 Innehåll

Laboration 3, uppgift En klass för en räknare

Tentamen i Programmeringsteknik I

Objektorienterad Programmering (TDDC77)

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

Laboration A Objektsamlingar

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

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

Föreläsning 6: Metoder och fält (arrays)

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

JAVA Mer om klasser och objektorientering

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

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

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

Tentamen i Programmeringsteknik I, ES,

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

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 OOP

Föreläsning 2, vecka 8: Repetition

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

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

TENTAMEN OOP

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) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Tentamen FYTA11 Javaprogrammering

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Tentamen. Lösningsförslag

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Laboration 1 - Grunderna för OOP i Java

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

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Del A (obligatorisk för alla)

Klasshierarkier - repetition

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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 REPETITION & EXTENTA

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

OOP Objekt-orienterad programmering

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Tentamen i Programmeringsteknik I

(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

Kompilera och exekvera Javakod

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

OOP Objekt-orienterad programmering

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

OOP Objekt-orienterad programmering

Instuderingsfrågor, del D

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Enkla variabler kontra referensvariabel

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

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.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

2D1339 Programkonstruktion för F1, ht 2004

Transkript:

1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som kan hantera företagskunder. Data om företaget skall vara företagsnamn, adress och den utlåningsränta banken ger företaget. Vidare skall det finnas ett finansindextal som visar företagets finansiella ställning. Finansindextalet representeras av ett decimaltal mellan 1.0 och 10.0 och bestäms av bankens ekonomer. Du skall skriva klassen Company med två konstruktorer: en standardkonstruktor utan parametrar, och en överlagrad konstruktor där instansvariablerna namn, adress och finansindextal får värden genom parametrar. Vidare skall klassen ha en tostring-metod som returnerar en sträng med värden på objektets instansvariabler. Slutligen skall det finnas en metod finanscheck som bestämmer instansvariabeln utlåningsränta: utlåningsräntan skall vara 0.029, dvs 2.9% om finansindextalet är större än 5, och annars skall utlåningsräntan vara 0.032, dvs 3.2%. Skriv slutligen en main-metod i klassen eller i en egen testklass som gör följande: a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna. b) Anropar metoden finanscheck som bestämmer utlåningsräntan. c) Skriver ut information om Company-objektet m h a tostring-metoden. OBS! Inga metoder utöver de som beskrivs i uppgiften ovan får läggas till // Klassen hanterar ett företag i en bank import java.util.scanner; public class Company { private String namn; private String adress; private double ränta; private double finansindextal; public Company() { namn = "NoName"; adress = "NoAdress"; 1

public Company(String newname, String newadress, double newfinansindex) { namn = newname; adress = newadress; finansindextal = newfinansindex; public void finanscheck() { if (finansindextal > 5.0) ränta = 0.029; else if (finansindextal <= 5.0) ränta = 0.032; public String tostring() { String s = namn + "\n" + adress + "\n" + "Räntesats: " + ränta + "\n" + "Finansindextal: " + finansindextal; return s; public static void main(string[] arg) { Company comp = new Company("HippHurra", "Broadway 1, Uppsala", 7); comp.finanscheck(); //Man behöver inte skriva comp.tostring() System.out.println(comp); 2 Uppgift 2 Nya arbetstillfällen Ett rekryteringsföretag gör statistik på hur många jobb de förmedlat per månad under ett år. Antalet jobb lagras i en array med heltal. Ett exempel på en sådan array med värden inlagda är: 23, 34, 31, 40, 37, 58, 12, 25, 39, 42, 45, 21 I exemplet har företaget lyckats hitta 23 jobb i januari, 34 jobb i februari osv. Din uppgift är att skriva klassen Jobbfix. Klassen finns påbörjad nedan. Arrayen som innehåller antalet skapade jobb under ett år är en instansvariabel. 2

a) Skriv en metod matain som för varje månad frågar efter hur många jobb som skapats och låter användaren mata in värden för årets tolv månader i arrayen. b) Skriv en metod summa som summerar samtliga jobb som skapats under året och returnerar summan. c) Skriv en metod maxvarde som söker rätt på det största värdet i arrayen och returnerar detta. Du behöver inte ta hänsyn till om flera element i arrayen innehåller lika stora tal. d) Skriv slutligen en main-metod i klassen eller i en egen testklass som skapar ett objekt av typen Jobbfix och sedan testar alla metoder så att användaren kan se att metoderna fungerar. OBS! Inga metoder utöver de som beskrivs i uppgiften ovan får läggas till. import java.util.scanner; public class Jobbfix { private int[] jobb; public Jobbfix() { jobb = new int[12]; //Skriv resten av klassen här import java.util.*; public class Jobbfix { private int[] jobb; public Jobbfix() { jobb = new int[12]; 3

public void matain() { for (int i=0; i<12; i++) { Scanner scan = new Scanner(System.in); System.out.print("Mata in data för månad " + (i+1)+ ": "); jobb[i] = scan.nextint(); public int summa() { //variabeln sum måste nollställas först! int sum = 0; for (int i=0; i<12; i++) sum = sum + jobb[i]; return sum; public int maxvärde() { int max = 0; //Ge variablen ett rimligt startvärde: //max kan aldrig vara mindre än 0. for (int i=0; i<12; i++) { if (max < jobb[i]) max = jobb[i]; return max; public static void main(string[] arg) { Jobbfix jf = new Jobbfix(); jf.matain(); System.out.print("Sammanlagt har vi förmedlat " + jf.summa()); System.out.println(" jobb under ett år."); System.out.print("Maximalt har " + jf.maxvärde()); System.out.println(" jobb förmedlats på en månad."); 4

3 Uppgift 3 1. Givet följande klass 1 public class Kopp { 2 3 private int talet; 4 5 public Kopp(int n) { 6 talet = n; 7 8 9 public int get(){ 10 return n; 11 12 13 public void set(int i) { 14 n = i; 15 16 17 public static void main(string[] args) { 18 Kopp[] kafferep = new Kopp[5]; 19 for (int i=1; i<=5; i++) { 20 kafferep[i].set(i); 21 22 23 (a) Vid kompileringsförsöket fås följande felmeddelanden Kopp.java:10: cannot find symbol symbol : variable n location: class Kopp return n; ^ Kopp.java:14: cannot find symbol symbol : variable n location: class Kopp n = i; ^ Förklara vad det beror på och hur man ska lösa problemet. (2p) Svar: Felet är att man försöker använda n som inte är ett attribut i klassen utan en formell parameter i konstruktorn. Den naturliga ändringen är att byta n mot talet i get och set-metoden alternativt att byta namn på attributet talet till n men då måste bytet göras överallt dvs även i konstruktorn. Vanligt förekommande felaktiga svar: 5

Metoderna måste heta getn och setn för att Java skall veta vad som skall returneras eller sättas. Nej, metodernas namn har inget med saken att göra. Ur Javas synpunkt skulle get-metoden kunna heta fasteranki (men det är naturligtvis olämpligt ur mänsklig synpunkt). Det är vad metoden gör (i detta fall alltså return talet) som betyder något. set-metoden måst stå före get-metoden. Nej, i vilken ordning metoderna i en klass skrivs spelar ingen roll (i Java i andra programmeringsspråk kan det ha betydelse) Man måste lägga till n som attribut i klassen. Ja, det kan man göra men då blir det en annan klass (med två attribut) och då bör man ändra i konstruktorn och dessutom ändå ha get och set-metoder för det första attributet (talet) (b) Efter att ha rättat felen går kompileringen bra men när man försöker köra programmet får man följande utskrift Exception in thread "main" java.lang.nullpointerexception at Kopp.main(Kopp.java:20) Förklara vad det beror på och hur man ska lösa problemet. (2p) Svar: Diagnosen betyder att man på rad 20 (kafferep[i].set(i)) försöker utnyttja (följa) en objektreferens som är tom. kafferep[i] innehåller således null. På rad 18 skapar man själva arrayen men man har inte skapat några element. En lösningen är alltså att mellan rad 19 och 20 lägga in raden kafferep(i) = new Kopp(); men då måste man också definiera en parameterlös konstruktor. Den bästa lösningen är att byta rad 20 mot kafferep[i] = new Kopp(i); Vanligt förekommande felaktiga svar: Man missar element 0. Ja, det gör man visserligen men det är inget fel. Det finns inget i Java som säger att man måste börja med att behandla första elementet i en array. Iterationen går för långt - sista elementet har index 0 men loopen går till 5 Ja, det är också sant men det är inte det felet som Java klagar på (det är däremot felet i uppgift c). Felet inträffar redan vid första iterationen dvs när i är 1. (c) När även detta är åtgärdat får man följande fel. Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at Kopp.main(Kopp.java:20) Rätta felet! (2p) Svar: Felet är att variabeln i som används som index i arrayen får värdet 5. Arrayen innehåller 5 element och dessa numreras 0, 1, 2, 3, 4. Iteratonsvillkoret i<=5 6

måste således ändras till i<5. (Troligen vill man också ändra undre grånsen från 1 till 0 men det kan man ju inte veta med säkerhet.) 4 Uppgift 4 Diagonalen hos ett parallellogram Du är ansvarig för att skriva en klass som utför beräkningar på parallellogram. Den längsta diagonalen hos ett parallellogram beräknas med formeln ÓÒ Ð=Ô 2 + 2 + 2 cos«där och är sidorna på parallellogrammet och«är parallellogrammets spetsiga vinkel. Du har skapat ramen till klassen 1 och ska nu skriva en metod som beräknar längden på den längsta diagonalen. public class Parallellogram { private double a, b, alpha; public Parallellogram(double starta, double startb, double startalpha) { a = starta; b = startb; alpha = startalpha; // Metod för att beräkna den längsta diagonalen public double longdiagonal() { // Skriv klart metoden Dina uppgifter är: a) Skriv färdigt metoden longdiagonal i klassen. b) Skriv en mainmetod i klassen eller i en testklass. Du ska använda mainmetoden för att beräkna den längsta diagonalen hos parallellogrammet: = 1 5, =2,«=37 5Æ. Skriv sedan ut resultatet av beräkningen. 1 Den trubbiga vinkeln,, kan beräknas genom 180 för den. «, så vi behöver inte deklarera en instansvariabel 7

public class Parallellogram { // Aplha är den spetsiga vinkeln, private double a, b, alpha; // Defaultkonstruktor public Parallellogram() { a = 1; b = 1; alpha = 45; // Överlagrad konstruktor public Parallellogram(double starta, double startb, double startalpha) { a = starta; b = startb; alpha = startalpha; // Beräknar den längsta diagonalen på parallellogrammet. public double longdiagonal() { return Math.sqrt(Math.pow(a,2) + Math.pow(b,2) + 2*a*b*Math.cos(alpha*Math.PI/180)); public static void main(string[] args) { Parallellogram para = new Parallellogram(1.5, 2, 33.5); double dia = para.longdiagonal(); System.out.println(dia); 8