Uppgiter markerade med asterisk (*) kan hoppas över om man får ont om tid.
Snabblänk: API-spec
Resultatet ska se ut enligt följande:
C:\PROGRAM\jdk\proj\AF>java uppg1 stina kalle sven lena Value argument 1 = stina Value argument 2 = kalle Value argument 3 = sven Value argument 4 = lena
I en sportaffär vill man ha ett program för hantering av sina produkter. Början till en klasshierarki till stöd för sådan hantering ser ut så här:
Det här ska finnas i respektive klass:
Försök att reda ut vad som händer och vad som är fördelar med polymorfism och vad som är nackdelar.
Vidareutveckla applikationen från deluppgift 1 i övning 1. Om en parametersträng innehåller en siffra ska ett undantag av klassen SifferException kastas. och programmet ska avslutas. Klassen SifferException skriver du i en egen fil som heter SifferException.java. Låt klassen ärva Exception.
Två körexempel:
Ledning:M:\ PCSA\JAVA\OVNING\OVN2 >java uppg1 pel2e stina kalle SifferException: Sträng får inte innehålla siffra. M:\ PCSA\JAVA\OVNING\OVN2>java uppg1 pelle stina ka3le Value argument 0: pelle Value argument 1: stina SifferException: Sträng får inte innehålla siffra.
Skriv en static void-metod som heter checkString, och som kollar igenom en inläst sträng och kastar ett SifferException om den innehåller en siffra. Anropa den metoden för varje argumentsträng.
Mainmetoden ska avslutas om det uppstår en exception. Undantagshanteringen ska alltså omsluta for-loopen.
Ersätt koden i main-metoden så att den skapar 10 stycken Complex-objekt och anropar skrivTal för vart och ett av dem. Sätt sedan alla tio objekten till null och anropa System.gc och System.runFinalization. Skriv sedan ut värdet av Complex.antalKomplexaTal. Kommentera bort System.gc och System.runFinalization och kolla vad som händer. Vilka slutsatser kan dras?
Det kommer inte att gå bra. Korrigera till det blir rätt och red ut varför det fungerar som det gör.
Skriv en javaapplet som givet en cirkelarea beräknar motsvarande cirkeldiameter.
Skriv en applikation som startar två trådar, som vi kan kalla "1" och "2". Dessa trådar ska tävla om att komma först till position 30 på skärmen. För varje steg åt höger som trådarna tar ska namnet på tråden skrivas ut på skärmen. Varje tråd ska slumpvis sova mellan 1 och 1000 millisekunder efter varje steg som tas åt höger. Innan avslut ska programmet skriva ut vem som vann.
Resultatet ska se ut enligt följande:
och så vidare till position 30, följt av info om vem som vann.C:\PROGRAM\jdk\proj\AF>java ovning2 1 1 2 1 2 1 2 2 1 1 2 1
Utveckla en serverapplikation som (via Sockets) kan ta emot två kommandon: UP och DOWN för att öka respektive minska värdet på en heltalsvariabel. Minsta tillåtna värde på variabeln ska vara 0 och högsta tillåtna ska vara 25. Applikationen ska dessutom visa statusinformation om senaste mottagna kommando eller säga att ingen klient finns uppkopplad.
Kommunikation med teckensträngar:
"UP" från klient till server betyder räkna upp
"DOWN" från klient till server betyder räkna ned.
Server svarar med:
"OK" om det gick bra att räkna UPP/NED
"LIMIT" om UP slog i taket eller DOWN slog i botten
Testa er server med hjälp av telnet.
Utveckla en klientapplikation som kan prata med serverapplikationen i övningen ovan och skicka den kommandona UP och DOWN. Klienten ska vidare presentera de data som kommer från servern. Maskin att koppla upp emot ska anges som parameter till programmet då det startas.
Prova att kommunicera med varandras klienter och servrar.
Ifall medlemsvariablen number har eller får värdet 10 vid anrop av increment ska denna händelse rapporteras till alla registrerade lyssnare som en "HIGH_LIMIT"-händelse. Det görs genom att anropa metoden handleHighLimit hos respektive lyssnare.
Ifall number har eller får värdet 0 vid anrop av decrement ska denna händelse rapporteras till alla registrerade lyssnare som en "LOW_LIMIT"-händelse. Det görs genom att anropa metoden handleLowLimit hos respektive lyssnare.
Funktionen addListener ska som parameter ta ett objekt som implementerar det här gränssnittet:
Klassen Number måste lagra sina lyssnarobjekt någonstans. Lagra i någon typ av vektor, eller implementera en länkad lista internt i klassen.public interface NumberListener { public void handle_low_limit(); public void handle_high_limit(); }
Skriv en klass Low som implementerar gränssnittet NumberListener. Klassen ska han en medlemsvariabel namn som instansieras via konstruktorn. Hanteringen av LOW_LIMIT ska bestå i att medlemsvariabeln namn, namnet på klassen och " hanterar LOW_LIMIT" skrivs ut. Händelsen HIGH_LIMIT ska inte hanteras.
Skriv en klass High som implementerar NumberListener Klassen ska han en medlemsvariabel namn som instansieras via konstruktorn. Hanteringen av HIGH_LIMIT ska bestå i att medlemsvariabeln namn, namnet på klassen och " hanterar HIGH_LIMIT" skrivs ut. Händelsen LOW_LIMIT ska inte hanteras.
Skriv en klass HiLo som implementerar NumberListener Klassen ska han en medlemsvariabel namn som instansieras via konstruktorn. Hanteringen av HIGH_LIMIT ska bestå i att medlemsvariabeln namn, namnet på klassen och " hanterar HIGH_LIMIT" skrivs ut. Hanteringen av LOW_LIMIT ska bestå i att medlemsvariabeln namn, namnet på klassen och " hanterar LOW_LIMIT" skrivs ut.
Skriv en main-funktion som instansierar ett Number-objekt num, ett Low-, ett High- och ett HiLo-objekt. De tre senare objekten ska registreras som lyssnare hos det första. Lägg sedan programmet i en loop som läser tecken från tangentbordet. Om tecknet är 'u' ska num.increment() anropas, annars ska num.decrement() anropas. Vad bör hända och vad händer? Red ut.
Skapa en applikation som tar emot två filnamn på kommandoraden och kopierar innehållet i den ena filen till den andra i omvänd ordning bytemässigt. Applikationen anropas enligt:
Kom ihåg att hantera alla upptänkliga fel i applikationen, till exempel att frånfilen saknas eller läsfel. Tips: implementera en stack och pusha inlästa bytes på den. Poppa sedan av dem vid skrivning till omvända filen.java omvkopia från-fil-namn till-fil-namn
Skriv en applikation som hämtar en textfil från en webserver m.h.a. URL-hantering. Applikationen ska gå igenom varje inläst rad och skriva ut hur många HTML-taggar där fanns. Den ska också för varje rad skriva ut en ackumulerad siffra som talar om hur många taggar som hittats totalt hittills. Lägg läsning av URL i mainmetoden och låt den skriva data till en pipe. Lägg läsning av pipe och datahantering i en egen tråd som också får skriva till terminalen. En HTML-tagg inleds med tecknet <.
Utgå gärna från det animerade cirkeldiagrammet i Grafikdemo6.java från föreläsning 11.