-*- coding: utf-8 -*- L?sningsforslag til ukeoppgaver til ?velser 1.-5.9.2014 Det finnes selvf?lgelig mange gode l?sninger; her er mine forslag. Om du tror du har et bedre forslag, h?rer jeg gjerne om det. (Til spesielt interesserte: Forslagene mine er ikke helt perfekte; hva kan gi sm?feil i utskriften?) Oppgave 3a import java.io.*; class Classes2 { public static void main(String arg[]) { for (String fName: arg) { readJavaFile(fName); } } static void readJavaFile(String fName) { try { LineNumberReader f = new LineNumberReader(new FileReader(fName)); while (true) { String line = f.readLine(); if (line == null) break; String className = findClassName(line); if (className == null) continue; System.out.printf("%-20s%s:%d\n", className, fName, f.getLineNumber()); } } catch (Exception e) { System.err.println("Read error for "+fName+"!"); } } static String findClassName(String t) { // Find "class name" and return name. String w[] = t.split(" "); for (int i = 0; i 0 && w[i-1].equals("abstract")) n = "["+n+"]"; return n; } } return null; } } Oppgave 3c import java.io.*; import java.util.*; class ClassName { String name, fileName; int lineNum; boolean isAbstract; String superClass = null; List subClasses = new ArrayList(); ClassName(String n, boolean a, String s) { name = n; isAbstract = a; superClass = s; } void print(String indent) { System.out.printf("%-26s%s:%d\n", indent+(isAbstract ? "["+name+"]" : name), fileName, lineNum); for (ClassName sub: subClasses) sub.print(indent+" "); } } class Classes { static Map classes = new TreeMap(); public static void main(String arg[]) { for (String fName: arg) readJavaFile(fName); printClassNames(); } static void readJavaFile(String fName) { try { LineNumberReader f = new LineNumberReader(new FileReader(fName)); while (true) { String line = f.readLine(); if (line == null) break; ClassName cn = findClassName(line); if (cn != null) { cn.fileName = fName; cn.lineNum = f.getLineNumber(); classes.put(cn.name,cn); } } } catch (Exception e) { System.err.println("Read error for "+fName+"!"); } } static void printClassNames() { // Find all sub-classes: for (ClassName nam: classes.values()) { if (nam.superClass != null) classes.get(nam.superClass).subClasses.add(nam); } // Print all class names: for (ClassName nam: classes.values()) if (nam.superClass == null) nam.print(""); } static ClassName findClassName(String t) { // Find "class name". String w[] = t.split(" "); for (int i = 0; i 0 && w[i-1].equals("abstract")) abstr = true; // Is it a super-class? if (i