Göm menyn

TDDC77 Objektorienterad programmering

Extramaterial


Här hittar du frivilliga exemplen och övningar med olika svårighetsgrad (lätt, medel, och svårt), och som tar upp olika delar av kursen (e.g. Array, for-loop, etc).

Några övningar är gamla, andra är helt ny utvecklat, om du hittar något som är underligt, borde förklaras bättre, eller kanske har egna bra uppgifter eller exempel som borde få vara med här så är det bara att höra av sig till Ahmed per mail.

Exempel

Följande exempel är uppbyggd av två delar. Först en övergripande förklarande text. Därefter en fullständig lösning i javakod.
  • for-loopen (lätt) [array, for]
    class LoopExempel1{
    
      // En global variabel av typ String-array som heter namn.
      static String[] names = {"Kalle", "Malin", "Henke", "Sofia"};
    
      public static void main(String[] args){
        // För varje heltal i från 0 till längden på names:
        for (int i = 0; i < names.length; i++){
          // Skriv ut namnet på plats i
          System.out.println(names[i]);
        }
      }
    }
          

    Programmet skapar en Array med String som heter names och innehåller namnen Kalle (index 0), Malin (index 1), Henke (index 2) och Sofia (index 3).

    Main-metoden (den som körs när man startar programmet) innehåller en for-loop som skriver ut varje namn på en ny rad.

Uppgifter

Här följer ett antal övningsuppgifter. Om inget annat anges ska du skriva ett program som löser uppgiften. Uppgifterna är märkta med svårighetsgrad och område enligt den inledande texten.

  • Betyg (lätt) [in/utmatning, if, while]

    Skriv ett program som :

    1. Tar emot ett heltal från användraren
    2. Om heltalet är större än fem, skriver "för stort" och hoppar till programpunkt 1
    3. Om heltalet är mindre än fem, adderar ett till heltalet
    4. Skriver ut "du få&r betyg " och heltalet
    5. Avslutar

  • Hur ser flödschemat ut? (lätt)[while, if, flödschema]
    boolean bossIsHappy;
    int answer = 0;
    
    System.out.print("Vilken lön får jag?");
    answer = readInt ();
    
    while (answer < 200) {
      System.out.print("Mer!");
      answer = readInt ();
    }
    
    System.out.print ("OK, jag är nöjd!");
    
    bossIsHappy = Boss.areYouHappy();
    if(!bossIsHappy){
      giveBossApple ();
    }
    
    return;
    
  • Medelvärdet (lätt)[loopar, arrayer]

    1. Skriv ett program som tar emot ett godtyckligt heltal (mellan 0 och maxvärdet för int) number från användaren,
    2. läser in number heltal
    3. beräknar medelvärdet; summan av talen antas rymmas i en long
    4. Skriv ut resultated som bör vara av flyttalstyp
    5. Skriv samma program men med de två andra loopar istället.

  • Jag kan loopa frammåt (lätt) [for, while, do-while]

    a) Skriv en loop av varje sort som skriver ut alla tal mellan -4 och 17 (inklusive -4 och 17). Varje tal skall vara följt av mellanslag, men inte nyrad.

    b) Om talet är inte jämt delbart med 4 så skall talet följas av mellanslag, annars nyrad.

    Exempel på interaktion i b)

            jernlas@my ~/tmp $ java Loopar
            -4
            -3 -2 -1 0
            1 2 3 4
            5 6 7 8
            9 10 11 12
            13 14 15 16
            17 -4
            -3 -2 -1 0
            1 2 3 4
            5 6 7 8
            9 10 11 12
            13 14 15 16
            17 -4
            -3 -2 -1 0
            1 2 3 4
            5 6 7 8
            9 10 11 12
            13 14 15 16
            17
          

  • Jag kan loopa bakåt (lätt) [for, while, do-while]

    Skriv en loop av varje sort som skriver ut alla tal mellan -4 och 17 (inklusive -4 och 17) baklänges (17 16 15 ... -4). Varje tal skall vara följt av mellanslag, men inte nyrad.

  • Funktioner och anrop (lätt) [funktion, inläsning, do-while]

    Skriv en funktion readInt() som läser ett heltal från användaren och returnerar det. Skriv en funktion writeInt(int number) som skriver ut ett heltal. I mainfunktionen, skriv en do-while-loop som använder funktionerna du skapat för att läsa in och skriva ut heltal så länge användaren inte matar in talet 0.

    Interaktionen ser ut ungefär såhär:

    jernlas@my ~/tmp $ java Numbers
    12
    12
    34
    34
    -45
    -45
    0
    0
          

  • Röverspråket (lätt)[metoder]

    1. Skriv en metod som returnerar true om en bokstav är en vokal (i.e. bokstav i {a, e, i, o, u, y, ä, ö, å}) och false annars
    2. Använd metoden i ett program som tar emot ett ord frå användaren och göra om den till röverspråk (i.e., bytta varje icke vokal bokstav i ordet mot (bokstav + "o" + bokstav))

  • Array of dreams (lätt) [loopar, arrayer, index]

    a) Skapa en array a som innehåller 10 int och en array b som innehåller 10*10 long

    b) På position 1 (dvs index 0) i a, lagra värdet 15. Skriv en loop som går igenom varje position 1 < pos ≤ 10 (dvs index 1 till 9 inklusive) och där lagrar värdet på positionen innan + 2*pos.

    c) Fyll b med multiplikationstabellen.

    d) Skriv ut båda arrayerna på ett snyggt sätt.

    Exempel på interaktion i d)

    jernlas@nano:~/tmp$ java Arrayer
    a:
    10 12 16 22 30 40 52 66 82 100
    
    b:
    1 2 3 4 5 6 7 8 9 10
    2 4 6 8 10 12 14 16 18 20
    3 6 9 12 15 18 21 24 27 30
    4 8 12 16 20 24 28 32 36 40
    5 10 15 20 25 30 35 40 45 50
    6 12 18 24 30 36 42 48 54 60
    7 14 21 28 35 42 49 56 63 70
    8 16 24 32 40 48 56 64 72 80
    9 18 27 36 45 54 63 72 81 90
    10 20 30 40 50 60 70 80 90 100
          

  • The invisible man (mellan) [variabel, skuggning, funktioner]

    Givet programmet:

    class Invisible{
    
      static int a = 0;
    
      public static void main(String[] args){
    
        System.out.println(a);
            
        int a = 1;
    
        System.out.println(a);
        System.out.println(enFunktion());
      }
    
      public static int enFunktion(){
        return a;
      }
    
    }
          

    a) På vilken rad definieras en global variabel, och vad heter variabeln?

    b) Det finns en annan variabel med samma namn. Var deklareras den och vilka delar av programmet kan den nås ifrån?

    c) Gå igenom programmet rad för rad, försök förutsäga vad som händer på varje rad och varför. Vilka värden bör skrivas ut? Jämför med verkligheten genom att köra programmet, om du gissade fel, försök revidera dina teorier.

    d) Vilka funktionsdeklarationer finns i programmet? Vilka funktionsanrop?

  • Välja index (lätt)[felhantering]

    Skriv om följande programmet och använd try/catch för att hantera fallet där användaren ge en index som örsakar en "ArrayIndexOutOfBoundsException" undantag.

    int[] list = {45, 34, 67, 98, ...};
    while(true){
      print("Ange ett index: ");
      int index = Integer.parseInt(in.nextLine());
      print("Resultat: " + list[index]);
    }
    

  • Vad skrivs ut? (lätt)[aliases, reference typer]

    Skriv och kör ett program med de här raderna. Kan du förklara varför programmet skriver inte ut "one two three" ?

    String[] v = {"one", "two", "three"};
    String[] w = v;
    	
    w[0] = "zero";
    		
    for(int i=0; i < v.length; i++){
      System.out.print(v[i] + " ");
    }
    System.out.println();
    

  • Kö(mellan)[Abstrakta datatyper]

    Använd en array för att bygga en "kö" av strängar
    • Metoden void enqueue(String s) lägger till s sist i kön
    • Metoden boolean isEmpty() returnerar sant om kön är tom
    • Metoden String dequeue() tar bort och returnerar den första strängen i kön
    • Antag att en array med MAX positioner alltid är tillräckligt stor: Aldrig fler än MAX stycken anrop till enqueue
  • Stack (mellan)[abstrakta datatyper, in/utmatning]

    Använd en array för att bygga en "stack". Skriv ett program som kontinuerligt ge användaren fyra val, nämligen "0:push, 1:pop, 2:check emptiness, 3:exit", och som använder en "switch" sats för att:

    • fråga användaren om en String för att pusha om användaren väljar "0"
    • poppa ett värde och skriva ut den om användaren väljar "1"
    • kolla om stacken är tom och skriva ut resultatet om användaren väljar "2"
    • Avsluta programmet om användaren väljar "3"
  • #include virtual="$PAGE_FOOTER"