// Lösningar till övningstentamen 1

    // Uppgift 1a
    Utskriften blir: 5

    // Uppgift 1b
    1 2 6
    4 5 6

    // Uppgift 1c
    rad 1: felaktig, man får inte skriva new List eftersom List är ett gränssnitt
    rad 2: felaktig, elementen i en lista måste vara referenser, men double är en enkel typ
    rad 3: korrekt
    rad 4: felaktig, det skall stå namnet på en typ mellan <>
    rad 5: felaktig, det måste vara samma typ på båda sidorna om likhetstecknet
    rad 6: korrekt


    // Uppgift 2    
    public class Tidklass {

     public static String tidsintervall(String t1, String t2) {
       int h1 = Integer.parseInt(t1.substring(0,2)),
           m1 = Integer.parseInt(t1.substring(3,5)),
           s1 = Integer.parseInt(t1.substring(6,8)),
           h2 = Integer.parseInt(t2.substring(0,2)),
           m2 = Integer.parseInt(t2.substring(3,5)),
           s2 = Integer.parseInt(t2.substring(6,8)),
           i1 = h1*3600 + m1*60 + s1,
           i2 = h2*3600 + m2*60 + s2,
           d = i2-i1;
       if (d < 0)
         d += 24*3600;
       int h = d / 3600,
           m = d % 3600 / 60,
           s = d % 60;   
       return String.format("%02d:%02d:%02d", h, m, s);
     }
   }


   // Uppgift 3

   import java.io.*;
   import javax.swing.*;
   import java.util.*;

   public class Resultat {

     public static void main(String[] arg) throws IOException {
        String namn = JOptionPane.showInputDialog("Infilens namn?");
        Scanner sc = new Scanner(new File(namn));
        namn = JOptionPane.showInputDialog("Utfilens namn?"); 
        List<String> m = new LinkedList<String>();
        while (sc.hasNext()) {
          String starttid = sc.next();
          String sluttid  = sc.next(); 
          String rad = sc.nextLine();
          String resultat = Tidklass.tidsintervall(starttid, sluttid);
          if (!sluttid.equals("00:00:00"))
            m.add(resultat + rad);
        }
        Collections.sort(m); 
        PrintWriter utfil = new PrintWriter(new BufferedWriter(new FileWriter(namn)));
        for (String s : m)
          utfil.println(s);
        utfil.close();
      }
   }


   // Uppgift 4
     
   class C {  
     public static double sin(double x) {    
       double term = x, 
              sum  = 0;
       int k = 1;
       while (Math.abs(term) >= 1.0e-5) {
         sum += term;
         k += 2;
         term = -term*x*x/(k-1)/k;
       }
       return sum;
     }
   }
    
    
   // Uppgift 5
     import java.awt.*;
     import java.awt.event.*;
     import javax.swing.*;
     
     class Ruta extends JButton {
     
       public final int rad, kol;
     
       public Ruta(int r, int k, int nr) {
         if (nr != 0)
           setText(nr + "");
         else
           setText(" "); 
         rad = r;
         kol = k;
       }
     }
          
     
     public class FemtonSpel extends JFrame implements ActionListener {
         Ruta blank;
     
         FemtonSpel() {
           setLayout(new GridLayout(4,4,3,3));
           Ruta p = null;
           for (int i=0; i < 4; i++) {
             for (int j=0; j < 4; j++) {
               p = new Ruta(i, j, 15-(4*i+j));
               add(p);             
               p.addActionListener(this);
             }
           }
           blank = p;
           pack();
           setVisible(true);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
         }
     
         public void actionPerformed(ActionEvent e) {
           Ruta p = (Ruta)e.getSource();
           if ((p.rad == blank.rad && Math.abs(p.kol-blank.kol) == 1) ||
               (p.kol == blank.kol && Math.abs(p.rad-blank.rad) == 1)) {
             blank.setText(p.getText());
             p.setText(" ");
             blank = p;
           }
           else
              Toolkit.getDefaultToolkit().beep();
         }
     
         public static void main(String[] s) {
           new FemtonSpel();
         }
     }


   // Uppgift 6
   public abstract class Varelse {
     protected int energi = 100;   // 0=död, 100=full styrka
     private String namn;
   
     public Varelse(String namn) {
       this.namn = namn;
     }
   
     public void sättEnergi(int h) {
       if (h >=0 && h <=100)
         energi = h;
     }
   
     public int avläsEnergi() {
       return energi;
     }
   
     public String avläsNamn() {
       return namn;
     }
   
     public abstract int skada();
   
     public static void main(String[] arg) {
       Gäng g = new Gäng(10);
       Orm o = new Orm("Väs");
       Troll t = new Troll("Nicke");
       Spindel s = new Spindel("Imse");
       g.läggTill(o, 0);
       g.läggTill(t, 2);
       g.läggTill(s, 4);
       System.out.println(g.gemensamSkada());
     }
   
   }
   
   class Orm extends Varelse {
     public Orm(String namn) {
       super(namn);
     }
   
     public int skada() {
       return  10*energi;
     }
   }
   
   class Troll extends Varelse {
     public Troll(String namn) {
       super(namn);
     }
   
     public int skada() {
       return  5*energi;
     }
   } 
   
   class Spindel extends Varelse {
     public Spindel(String namn) {
       super(namn);
     }
   
     public int skada() {
       if (energi > 0)
         return  100;
       else
         return 0;
     }
   } 
   
   class Gäng {
     private Varelse[] medlemmar;
   
     public Gäng(int storlek) {
       medlemmar = new Varelse[storlek];
     }
   
     public void läggTill(Varelse v, int index) {
       medlemmar[index] = v;
     }
   
     public int gemensamSkada() {
       int tot = 0;
       for (int i=0; i < medlemmar.length; i++)
         if (medlemmar[i] != null) 
           tot += medlemmar[i].skada();
       return tot;
     }
   }