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 = siste = new Node(initData[0]);
for (int i = 0; i < initData.length; i++)
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() {
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;
}
}
void skrivOversikt() {
int antForekomster[] = new int[flestAntall+1];
Node p = forste;
while (p != null) {
antForekomster[p.antall]++;
p = p.neste;
}
for (int i = flestAntall; i > 0; i--) {
if (antForekomster[i] > 0)
System.out.printf("%3d like navn: %d forekomster\n",
i, antForekomster[i]);
}
}
}
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();
tekster.skrivOversikt();
}
}