02.08.2013 Views

Laboration 11 - itslearning

Laboration 11 - itslearning

Laboration 11 - itslearning

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

<strong>Laboration</strong> <strong>11</strong><br />

Avsikten med denna laboration är att du använda paket och att du ska packa några klassfiler i<br />

en jar-fil och slutligen använda innehållet i en jar-fil från en klass i NetBeans. Jag utgår från<br />

att du använder NetBeans i laborationen.<br />

Grundläggande uppgifter<br />

Uppgift <strong>11</strong>a<br />

Uppgift 1 går ut på att skapa ett NetBeans-projekt för hela kursen. Detta förutsatt att du inte<br />

redan har gjort detta.<br />

Slutresultatet ska vara ett projekt med lämpligt namn, t.ex. DA129A. I projektets src-katalog<br />

ska ett antal kataloger finnas, nämligen f4, f5, …, f10 och laboration4, laboration5, …,<br />

laboration10. Och i varje katalog ska de java-filer som hör till respektive föreläsning /<br />

laboration finnas.<br />

Genomförande<br />

Starta NetBeans. Skapa ett projekt med lämpligt namn, t.ex. DA129A.<br />

Leta upp src-katalogen i som tillhör projektet. Skapa katalogerna f4 – f10. Kopiera<br />

källkodsfilerna från kurssidan till respektive katalog. Kompilera och testkör klasserna.<br />

Skapa sedan katalogerna laboration4 – laboration10 i src-katalogen. Nu ska du placera<br />

filer från kurssidan under respektive katalog (det finns ofta någon fil som tillhör<br />

laborationen). Dessa filer har korrekt package-kommand.<br />

dina egna lösningar på laborationerna under respektive katalog. Det är mycket möjligt att du<br />

måste lägga till package-kommando / ändra i package-kommandot<br />

package laboration4; // ska vara aktuell laboration<br />

Kompilera och testkör klasserna.<br />

Nu har du ett projekt som kan växa med resten av kursen. Du kan även lägga in<br />

programmeringsuppgifterna i projektet under paketnamnen p1 – p6.<br />

DA129A, Programmering 1 1


Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

Uppgift <strong>11</strong>b<br />

Skapa paketet laboration<strong>11</strong>. Kopiera Kalkyl3.java från kurssidan (f<strong>11</strong>) till katalogen<br />

laboration<strong>11</strong>. Ändra package-kommandot till<br />

package laboration<strong>11</strong>;<br />

Sedan ska du ändra ett par instruktioner i mainLoop (fet-markerade rader):<br />

public void mainLoop() {<br />

int op1, op2, val;<br />

Kalkylera kalk = new Kalkylera();<br />

String menyStr = "KALKYLATOR\n\n1. Addera\n2. Subtrahera\n\n0. Avsluta\n\n";<br />

}<br />

val = meny( menyStr, 0, 2 );<br />

while( val != 0 ){<br />

op1 = Integer.parseInt( JOptionPane.showInputDialog( "Ange heltal 1" ) );<br />

op2 = Integer.parseInt( JOptionPane.showInputDialog( "Ange heltal 2" ) );<br />

if( val == 1 ) {<br />

kalk.addera( op1, op2 );<br />

} else if( val == 2 ) {<br />

kalk.subtrahera( op1, op2 );<br />

}<br />

val = meny( menyStr, 0, 2 );<br />

}<br />

För att programmet ska fungera måste du skriva klassen Kalkylera. Följande gäller för<br />

Kalkylera-klassen:<br />

• Klassen ska vara i paketet laboration<strong>11</strong>.<br />

• Paketet javax.swing måste importeras.<br />

• Klassen ska innehålla metoderna addera( int, int ) och subtrahera( int, int ).<br />

Metoderna ska flyttas från Kalkyl3 till Kalkylera.<br />

Nu ska det gå bra att exekvera Kalkyl3.<br />

Fördjupande uppgifter<br />

Uppgift <strong>11</strong>c<br />

Lägg till metoderna multiplicera( int, int ) och dividera( int, int ) i klassen Kalkylera. Ändra<br />

sedan i Kalkyl3 så att användaren även ska kunna välja att multiplicera och dividera.<br />

Om användaren försöker dividera med 0 så ska<br />

felmeddelandet till höger visas.<br />

2


Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

Uppgift <strong>11</strong>d<br />

Kopiera filerna Kalkyl5.java och Operander.java från kurssidan (f<strong>11</strong>) till paketet<br />

laboration<strong>11</strong>. Ändra package-kommandot i vardera filen.<br />

Sedan ska du göra följande ändringar i mainLoop:<br />

Raden operander = getOperander();<br />

ska ersättas med operander = new Operander();<br />

Ändringen innebär att du ska lägga till en konstruktor i klassen Operander. Konstruktorn ska<br />

be användaren om två inmatningar. Inmatningarna ska lagras i instansvariablerana op1 och<br />

op2. Dessutom måste paketet javax.swing importeras i filen Operander.java.<br />

Metoden getOperander() ska tas bort från Kalkyl5. Några rader kan du kopiera till den nya<br />

konstruktorn i Operander.<br />

Körresultatet ska vara samma som före ändringarna.<br />

Extrauppgifter<br />

Uppgift <strong>11</strong>e<br />

Denna uppgift går ut på två saker:<br />

1. skapa en jar-fil<br />

2. använda en klass som finns i en jar-fil. Det kommer att vara jar-filen du just skapat<br />

men skulle kunna vara en klass i vilken jar-fil som helst.<br />

I dokumentet JSE.pdf på kurssidan beskrivs vad som behövs för att bl.a. köra jar.exe. Detta<br />

är:<br />

• Ett JDK ska vara installerat på datorn. Detta måste vara fallet eftersom du kompilerar<br />

och exekverar java-program på datorn.<br />

• jar.exe måste hittas från kommandofönstret. Öppna ett kommandofönster, skriv<br />

jar<br />

och tryck på RETURN. Om jar hittas får du en del info om jar. Om jar inte hittas<br />

måste du ändra i PATH-variabeln (se JSE.pdf).<br />

Skapa ett projekt i NetBeans. Skriv en enkel klass, t.ex., HelloWorld i paketet helloPackage.<br />

Kompilera klassen.<br />

package helloPackage;<br />

public class HelloWorld {<br />

private String hello;<br />

}<br />

public HelloWorld() {<br />

this.hello = "Hello, world";<br />

}<br />

public HelloWorld( String anotherHello ) {<br />

this.hello = anotherHello;<br />

}<br />

public void sayHello() {<br />

javax.swing.JOptionPane.showMessageDialog( null, hello );<br />

}<br />

3


Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

Kopiera helloPackage-katalogen (finns i NetBeans-projektet / build / classes-katalogen),<br />

vilken innehåller HelloWorld.class, till en tom katalog, t.ex. C:\jartest. Nedan antar jag<br />

C:\jartest.<br />

Nu ska du öppna kommandofönstret (Kommandotolken i Windows), och se till att C:\jartest<br />

är aktuell katalog. Det är dags att exekvera programmet jar.exe. Skriv<br />

jar cf EttArkiv.jar *.*<br />

Om allt gått som tänkt är filen EttArkiv.jar skapad. Nu är det dags att använda HelloWorldklassen<br />

från NetBeans.<br />

Öppna projektet med laborationer Det är viktigt att du inte använder samma projekt som<br />

helloPackage är i. Nu ska du se till att EttArkiv.jar hittas från projektet.<br />

Högerklicka projektet (i projektfönstret) och väl Properties – Libraries – Add JAR/Folder.<br />

Bläddra fram till EttArkiv.jar och klicka sedan på Öppna – OK.<br />

Nu ska du skriva klassen JarTest:<br />

package laboration<strong>11</strong>;<br />

import helloPackage.*;<br />

public class JarTest {<br />

public static void main( String[] args ) {<br />

HelloWorld hw = new HelloWorld( "Hej, världen");<br />

hw.sayHello();<br />

}<br />

}<br />

Exekvera JarTest-programmet. Nu ska nedanstående dialog visa sig.<br />

4


Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

Förslag till lösningar<br />

Uppgift <strong>11</strong>b<br />

package laboration<strong>11</strong>;<br />

import javax.swing.*;<br />

public class Kalkylera {<br />

public void addera( int tal1, int tal2 ) {<br />

int kalkyl;<br />

String resultat;<br />

kalkyl = tal1 + tal2;<br />

resultat = tal1 + " + " + tal2 + " = " + kalkyl;<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

}<br />

public void subtrahera( int tal1, int tal2 ) {<br />

int kalkyl;<br />

String resultat;<br />

kalkyl = tal1 - tal2;<br />

resultat = tal1 + " - " + tal2 + " = " + kalkyl;<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

Uppgift <strong>11</strong>c<br />

package laboration<strong>11</strong>;<br />

import javax.swing.*;<br />

public class Kalkylera {<br />

public void addera( int tal1, int tal2 ) {<br />

int kalkyl;<br />

String resultat;<br />

kalkyl = tal1 + tal2;<br />

resultat = tal1 + " + " + tal2 + " = " + kalkyl;<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

}<br />

public void subtrahera( int tal1, int tal2 ) {<br />

int kalkyl;<br />

String resultat;<br />

kalkyl = tal1 - tal2;<br />

resultat = tal1 + " - " + tal2 + " = " + kalkyl;<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

public void multiplicera( int tal1, int tal2 ) {<br />

String resultat;<br />

resultat = tal1 + " * " + tal2 + " = " + (tal1 * tal2);<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

public void dividera( int tal1, int tal2 ) {<br />

String resultat;<br />

if( tal2 == 0 ) {<br />

resultat = "Ej tillåtet att dividera med 0";<br />

} else {<br />

resultat = tal1 + " / " + tal2 + " = " + (tal1 / tal2);<br />

}<br />

JOptionPane.showMessageDialog( null, resultat );<br />

}<br />

5


Malmö högskola 2007/2008<br />

Teknik och samhälle<br />

Uppgift <strong>11</strong>d<br />

package laboration<strong>11</strong>;<br />

import javax.swing.*;<br />

public class Operander {<br />

private int op1;<br />

private int op2;<br />

public Operander() {<br />

op1 = Integer.parseInt( JOptionPane.showInputDialog( "Ange heltal<br />

1" ) );<br />

op2 = Integer.parseInt( JOptionPane.showInputDialog( "Ange heltal<br />

2" ) );<br />

}<br />

}<br />

public Operander( int inOp1, int inOp2 ) {<br />

this.op1 = inOp1;<br />

this.op2 = inOp2;<br />

}<br />

public int getOp1() {<br />

return op1;<br />

}<br />

public int getOp2() {<br />

return op2;<br />

}<br />

6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!