Laboration 11 - itslearning
Laboration 11 - itslearning
Laboration 11 - itslearning
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