import java.io.*; import java.util.Scanner; class Frekvens { class Node { Node neste = null; String navn; int antall = 1; Node(String n) { navn = n; } } Node forste = null; String flest; int flestAntall; Frekvens(String[] initData) { Node siste = null; forste = null; for (int i = 0; i < initData.length; i++) { if (forste == null) { forste = siste = new Node(initData[i]); } else { siste.neste = siste = new Node(initData[i]); } } } String hentFlest() { return flest; } int hentAntall() { return flestAntall; } void komprimer() { Node p1 = forste, p2 = forste.neste; while (p2 != null) { if (p1.navn.equals(p2.navn)) { p1.antall++; p1.neste = p2.neste; } else { p1 = p2; } p2 = p2.neste; } } void visTekster() { // Det spoerres ikke etter denne metoden, // men den er nyttig under feilsoeking. Node p = forste; while (p != null) { System.out.print(p.navn + "(" + p.antall + ") "); p = p.neste; } System.out.println(); } void finnFlest() { flest = null; flestAntall = 0; Node p = forste; while (p != null) { if (p.antall > flestAntall) { flest = p.navn; flestAntall = p.antall; } p = p.neste; } } } class BrukFrekvens { public static void main(String[] arg) { String[] lager = new String[1000]; int antILager = 0; if (arg.length != 1) { System.out.println("Usage: java BrukFrekvens datafil"); System.exit(1); } try { Scanner s = new Scanner(new File(arg[0])); while (s.hasNextLine()) { lager[antILager++] = s.nextLine(); } } catch (FileNotFoundException e) { System.out.println("Kan ikke lese " + arg[0] + "!"); System.exit(2); } String[] lager2 = new String[antILager]; for (int i = 0; i < antILager; i++) lager2[i] = lager[i]; Frekvens tekster = new Frekvens(lager2); tekster.visTekster(); tekster.komprimer(); tekster.visTekster(); tekster.finnFlest(); System.out.println("Det vanligste navnet er " + tekster.hentFlest() + " (" + tekster.hentAntall() + " forekomster)."); } }