// 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 m = new LinkedList(); 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; } }