TDDC30 Programmering i Java, datastrukturer och algoritmer
Laboration 0 - Introduktion till Java
Inledning
Börja med att läsa igenom hela laborationshandledningen så att du får en översikt över laborationens struktur och omfång och vad som ska göras och hur det ska redovisas.
Laborationen går ut på att lära sig grundläggande syntax i Java samt att bekanta sig med utvecklingsverktyget Eclipse. Laboranten har fördel av att sedan tidigare vara bekant med ett imperativt språk (som t ex Ada). Laborationen behandlar egentligen inte om objektorientering, utan är tänkt som ett insteg till detta nya språk.
Laborationshandledningens struktur
Denna laboration består av två delar, som båda kan utföras efter första föreläsningarna. Delarna är uppbygda av en uppgiftsdel och en handledningsdel. Det är viktigt att handledingen följs för att laborationen ska gå så smidigt som möjligt.Examination och inlämning
Resultatet examineras genom en demonstration på plats under laborationstid. Du behöver inte skicka in din kod för denna labb. Du ska däremot skicka en in en sida till din laborationsassistent där du anger hur mycket tid du har använt för uppgiften (för din grupp) och några kortfattade reflektioner kring uppgiften. Desa kan t.ex. vara synpunkter på uppgiften och feedback till lärarna, vad som känns oklart, begrepp som är svåra, osv. Denna sida bedöms ej, utan blir markerad som godkänd så snart den tas emot.Kommentera din kod väl så att din assistent skulle kunna förstå vad varje funktion gör även om han inte hade läst laborationshandledningen. Kommentera även inuti funktionerna vad som händer där det inte är uppenbart.
Be din laborationsassistent att komma och gå igenom labben med er när ni är klara. Ni får då svara på några av frågorna under de olika stegen. Observera att ni ska kunna redogöra för all kod och alla frågor individuellt. Det är inte godtagbart att en person i gruppen har gjort det mesta av jobbet.
Del 1. Java-programmering i emacs
Uppgift
Ett svenskt personnummer är uppbyggt på ett speciellt sett. En finurlig grej är att det finns ett snabbt (nåja) sätt att kontrollera om personnumret är ett korrekt sådant, och inte bara i all hast påhittat. Din uppgift blir att i Java skriva en funktion som kontrollerar ett personnummer enligt följande algoritm:- Multiplicera varje siffra i det tiosiffriga personnumret med varannan gång 1 och 2, börja från vänster, med 2. Om produkten skulle bli tvåsiffrig summeras de två siffrorna ihop.
- Addera samtliga produkter till en stor summa.
- Om denna summa är jämt delbar med tio är personnumret giltigt. Returnera true. Annars returnera false.
Exempel: 910325-9876
9 1 0 3 2 5 9 8 7 6 * 2 1 2 1 2 1 2 1 2 1 ----------------------------- 18 1 0 3 4 5 18 8 14 6 (1 + 8) + 1 + 0 + 3 + 4 + 5 + (1 + 8) + 8 + (1 + 4) + 6 = 50 50 / 10 = 5 => giltigt nummerDet är inte obligatoriskt att programmet hämtar indata från terminalen. Dock ska det på något sätt gå att testa att funktionen fungerar som den ska.
Handledning
Öppna en terminal och skapa mappstrukturen tddc30/lab0/utilities i din hemkatalog(se Lathunden under "Kursmaterial" om ni har glömt bort kommandona som behövs).lab0 blir projektnamnet och utilities blir namnet på paketet ditt program finns i. Ställ dig sedan i mappen lab0 och skapa/öppna din källfil med kommandot emacs utilities/ValidityCheck.java & (observera STOR bokstav).
Skriv in följande kod i filen
package utilities;
public class ValidityCheck{
public static boolean hasValidChecksum(String number){
//add code here
return false;
}
public static void main(String[] args){
String personNumber = "9103259876";
if(hasValidChecksum(personNumber)){
System.out.println("Giltigt nummer.");
}
else{
System.out.println("Ej ett giltigt nummer.");
}
}
}
och spara. Programmet går redan nu att kompilera (även om det inte fungerar som det ska ännu).
Gå tillbaka till terminalen, kontrollera att du står i mappen lab0. Kompilera ditt program med följande kommando.
javac utilities/ValidityCheck.javaOm allt gick bra har en ny fil skapats; ValidityCheck.class i mappen utilities. Javaprogram kan till skillnad från program skrivna i t ex Ada inte köras direkt av operativsystemet utan körs av JVM (Java Virtual Machine). Kör därför ditt program med kommandot
java utilities.ValidityCheck(notera java för att köra, javac för att kompilera)
Fortsätt nu med att implementera lösningen till din uppgift.
Tips:
- number.charAt(i) returnerar tecknet ur strängen number på positionen i
- Character.digit(ch, 10) gör om tecknet i ch till en integer (med den vanliga basen tio)
- Scanner scanner = new Scanner(System.in); scanner.nextLine() skapar en scanner kopplad till inmatningsbufferten som hämtar en rad från terminalen. Frivilligt att använda i denna labb.
- % (procenttecken-operator) tar fram resten vid en heltalsdivision (när kan du vilja göra det?)
- Fler funktioner? Bläddra lite i Javas API-dokumentation!
Frågor att fundera på
- Säkerligen har du brottats med ett antal kompileringsfel innan du kommit så här långt. Stanna till en kort stund och fundera på hur dina fel först upptäcktes. Var det du eller kompilatorn?
- Vilken del av problemet angrep du först? Var det med facit i hand rätt angreppssätt?
- Finns det någonstans att läsa om alla dessa bekväma metoder som finns för t.ex. String?
Redovisning
Inget att redovisa på denna del. Ta med din färdiga kod till del 2.
Del 2. Java-programmering i eclipse
Nu har du provat på att skriva ett litet Java-program med emacs och terminalen. En del småfel hittades förmodligen vid kompilering och mycket hopp fram och tillbaka mellan emacs och terminalen krävdes (eller?). Kanske behövdes även ett antal hopp till en manual för att ta reda på vilka metoder (medlemsfunktioner) en klass som t ex String har. Att programmera på detta vis är tidskrävande, så nu är det dags att ta ett kvantsprång!
Nu är det dags att börja programmera i ett modernt utvecklingsverktyg som används i industrin idag*. I den här kursen använder vi eclipse, ett öppet och gratis verktyg för programvaru-utveckling.
Uppgift
Importera källkoden från del 1 till ett nytt projekt i Eclipse med hjälp av guiden som finns under "Kursmaterial". Komplettera sedan ditt program med en funktion som kontrollerar att strängen med personnummer har korrekt längd. Funktionen ska som indata ta en sträng med siffor samt en integer som indikerar vad som är korrekt längd.
Handledning
Emacs skapar en del extrafiler som inte längre behövs nu när vi går vidare. Stäng emacs och ta bort filen ValidityCheck.java~ (observera ~ i slutet).
rm ~/tddc30/lab0/utilities/ValidityCheck.java~
Följ sedan guiden för att komma igång med Eclipse(se guiden under "Kursmaterial"), och uppdatera det som behövs i koden innuti Eclipse.
Frågor att fundera på
- Hur pass annorlunda hade programmet blivit om du skrivit i ett imperativt språk, t ex Ada?
- Många kreditkortsföretag använder faktiskt samma algoritm för att bestämma den sista siffran på kortnumret. Detta för att det ska gå att göra en snabbkontroll för säljaren även när den inte är ansluten till banken. Samma gäller för OCR-numret på fakturor. Vilka ändringar i ditt program skulle behövas för att istället kontrollera ett kreditkortsnummer?
- Vad är fördelar och nackdelar med Eclipse gentemot emacs?
Redovisning
Visa upp ditt projekt i eclipse för labassistenten på laborationstid. Du behöver inte skicka in källkoden till denna laboration, utan endast det reflekterande dokument som nämns i början av denna handledning.
Skapad av Johan Janzén, uppdaterad av Jonas Lindgren.
Sidansvarig: Jonas Lindgren
Senast uppdaterad: 2013-01-14
