import java.io.*; import java.util.Scanner; import javafx.application.Application; import javafx.application.Platform; import javafx.stage.Stage; import javafx.stage.FileChooser; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.scene.text.*; import javafx.event.*;; 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; } } } public class BrukFrekvens extends Application { Stage mittTeater; Text resultat, resAntall; @Override public void start(Stage teater) { mittTeater = teater; Button velgFil = new Button("Velg fil"); velgFil.setLayoutX(10); velgFil.setLayoutY(15); velgFil.setOnAction(new FilBehandler()); resultat = new Text("Vanligst: "); resultat.setX(10); resultat.setY(65); resAntall = new Text("Antall: "); resAntall.setX(10); resAntall.setY(85); Button stopp = new Button("Stopp"); stopp.setLayoutX(10); stopp.setLayoutY(110); stopp.setOnAction(new StoppBehandler()); Pane kulisser = new Pane(); kulisser.setPrefSize(120,150); kulisser.getChildren().add(velgFil); kulisser.getChildren().add(resultat); kulisser.getChildren().add(resAntall); kulisser.getChildren().add(stopp); Scene scene = new Scene(kulisser); teater.setTitle("Frekvens"); teater.setScene(scene); teater.show(); } class FilBehandler implements EventHandler { @Override public void handle(ActionEvent e) { File f = new FileChooser().showOpenDialog(mittTeater); String[] lager = new String[1000]; int antILager = 0; try { Scanner s = new Scanner(f); while (s.hasNextLine()) { lager[antILager++] = s.nextLine(); } } catch (FileNotFoundException ex) {} String[] lager2 = new String[antILager]; for (int i = 0; i < antILager; i++) lager2[i] = lager[i]; Frekvens tekster = new Frekvens(lager2); tekster.komprimer(); tekster.finnFlest(); resultat.setText("Vanligst: " + tekster.hentFlest()); resAntall.setText("Antall: " + tekster.hentAntall()); } } class StoppBehandler implements EventHandler { @Override public void handle(ActionEvent e) { Platform.exit(); } } }