// Lösningar till övningstentamen 2 // Uppgift 1 a) Före rad 10: Metoden lagra() definieras inte i klassen Greve Man måste ha med en definition av denna metod. b) Rad 20: Defaultkonstruktor saknas i klassen Fisk. Den anropas automatiskt från konstruktorn i subklassen Torsk. Den bästa lösningen är att i klassen Torsk ersätta rad 20 med ett anrop av konstruktorn i klassen Fisk: super(n); // Uppgift 2 public static String toPig(String word) { if (word == null || word.length() == 0) // ingick inte i uppgiften return word; String w = word.toLowerCase(); for (int i=0; i 'z') throw new IllegalArgumentException("Not a letter: " + w.charAt(i)); final String vokaler = "aeiou"; final String prefix = "hlprt"; if (vokaler.indexOf(w.charAt(0)) != -1) // börjar med vokal return w + "yay"; else // börjar med konsonant if (w.length() >= 2 && prefix.indexOf(w.charAt(1)) != -1) // prefix return w.substring(2) + w.substring(0,2) + "ay"; else return w.substring(1) + w.substring(0,1) + "ay"; } // Uppgift 3 // a public static boolean ärSekvens(int[] v, int först, int sist) { if (v == null || v.length != sist-först+1) return false; int[] v2 = (int[]) v.clone(); Arrays.sort(v2); for (int i : v2) if (i != först++) return false; return true; } // b public static boolean ärLöst(int[][] a) { if (a == null || a.length != 9) return false; // Undersök raderna for (int i=0; i < 9; i++) { if (!ärSekvens(a[i], 1, 9)) return false; } // Undersök kolumnerna int[] b = new int[9]; for (int j=0; j < 9; j++) { for (int i=0; i < 9; i++) b[i] = a[i][j]; if (!ärSekvens(b, 1, 9)) return false; } // Undersök regionerna for (int m=0; m < 3; m++) for (int n=0; n < 3; n++) { // Undersök region m,n int k = 0; for (int i=m*3; i < (m+1)*3; i++) for (int j=n*3; j < (n+1)*3; j++) b[k++] = a[i][j]; if (!ärSekvens(b, 1, 9)) return false; } return true; } // Uppgift 4 // Deluppgift a Utöka första raden: public class Flight implements Comparable { och lägg till följande metod: public int compareTo(Flight f) { String s1 = String.format("%02d%02d%s", hour, min, destination); String s2 = String.format("%02d%02d%s", f.hour, f.min, f.destination); Collator c = Collator.getInstance(); c.setStrength(Collator.PRIMARY); return c.compare(s1, s2); } Följande paket måste också importeras (men krävs ej för poäng) import java.util.*; import java.text.*; // Deluppgift b import java.util.*; import java.text.*; public class FlightComparer implements Comparator { public int compare(Flight f1, Flight f2) { Collator c = Collator.getInstance(); c.setStrength(Collator.PRIMARY); return c.compare(f1.getDestination() + f1.getHour() + f1.getMin(), f2.getDestination() + f2.getHour() + f2.getMin()); } } // Uppgift 5 import java.awt.*; import javax.swing.*; public class Tegel extends JPanel { private int b, h; public Tegel(int bredd, int höjd) { b = bredd; h = höjd; setBackground(Color.yellow); } public void paintComponent(Graphics g) { super.paintComponent(g); int rad = 0; for (int y=0; y < getHeight()+h; y += h, rad++) for (int x=0; x < getWidth()+b; x += b) g.drawRect(x+(rad%2*b/2), y, b, h); } } // Uppgift 6 import java.io.*; public class HistogramProg extends JFrame implements ActionListener { JMenuItem[] mi = {new JMenuItem("Show"), new JMenuItem("Hide"), new JMenuItem("Exit")}; Histogram h = new Histogram(); public HistogramProg() { JMenuBar mb = new JMenuBar(); setJMenuBar(mb); JMenu amen = new JMenu("Action"); mb.add(amen); for (JMenuItem it : mi) { amen.add(it); it.addActionListener(this); } add(h); setSize(500, 300); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } private void clear() { setTitle(null); remove(h); h = new Histogram(); add(h); repaint(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == mi[0]) { // Show clear(); String s = JOptionPane.showInputDialog("File name? "); if (s == null) // Stängningsrutan return; Scanner sc = null; try { sc = new Scanner(new File(s)); } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(null, "File not found"); return; } setTitle(s); while (sc.hasNextDouble()) h.addValue(sc.nextDouble()); } else if (e.getSource() == mi[1]) // Hide clear(); else if (e.getSource() == mi[2]) // Exit System.exit(0); }