Beispiel Angabe

Kürzel:asciishop-A02-PP
Name:AsciiShop, Runde#2
Kette:Asciishop PP
Kategorie:Drawing

Mitgelieferte Datei(en):
Abzugebende Datei(en): BarPlot.java
Optional abzugebende Datei(en):
Ausführbar: BarPlot

Die Klasse BarPlot ist zu erstellen und soll eine ausführbare Klasse sein und muss daher die public static void main(String[] args) Methode beinhalten. Ihr Programm wird automatisch auf Korrektheit überprüft. Die Überprüfung erfolgt durch die Ausführung der als ausführbar bezeichneten Klasse (BarPlot).

Kurzbeschreibung:

Das Programm BarPlot soll Balkenbeschriftungen und Werte paarweise einlesen und ein horizontales Balkendiagramm ausgeben.

Lernziele

Aufgabenstellung Klassen und Methoden Ein- und Ausgabedaten Bewertung und Kriterien
Hinweise FAQ Fehlerbehandlung Testen

 

Aufgabenstellung:

Das Programm BarPlot generiert anhand der Eingabe horizontale Balkendiagramme, die aus einer Beschriftung und einem Balken bestehen. Die Formatierung sieht für die Beschriftung 8 Zeichen vor, gefolgt von einem '|' und dem maximal 30 Zeichen langen Balken bestehend aus dem Zeichen '#'. Falls der Balken nicht die vollen 30 Zeichen ausschöpft, wird mit Leerzeichen aufgefüllt. An letzter Stelle wird wieder ein '|' angehängt, das Diagramm ist also immer 40 Zeichen breit.

Beim Einlesen der Werte muss zwischen Fließkommazahlen und Ganzzahlen unterschieden werden. Nützen Sie dazu die Methoden hasNextDouble() und hasNextInt() des Scanners. Ganzzahlen müssen zwischen inklusive 0 und 30 liegen und entsprechen 1:1 der Anzahl der angezeigten Balken. Fließkommazahlen liegen zwischen 0.0 und 1.0 und beschreiben die prozentuale Länge des Balkens.

Klassen und Methoden

Die folgende Aufzählung umfasst geforderte Klassen und Methoden. Sie können nach Bedarf Hilfsmethoden hinzufügen.

BarPlot
Diese Klasse ist ausführbar und beinhaltet daher die main-Methode. Sie verarbeitet die Eingaben, ruft alle Methoden auf und gibt das Ergebnis aus.
public static void main(String[] args)
liest die Daten und Befehle ein und gibt das Ergebnis aus. Allein diese Methode liest direkt von System.in ein und gibt direkt auf System.out aus.
static String repeat(char c, int n)
Liefert einen String der Länge n zurück der nur aus dem Zeichen c besteht (beispielsweise liefert repeat('+',4) den String "++++" zurück).
static String drawLabel(String label, int n)
Liefert einen String zurück der label beinhaltet aber genau n Zeichen lang ist. Wenn label zu lange ist wird es abgeschnitten, wenn label zu kurz ist, wird der Rückgabewert mit Leerzeichen aufgefüllt. Beispielsweise liefert drawLabel("abc",5) den String "abc " zurück.
static String drawBar(String label, int value)
Generiert eine Zeile des Balkendiagramms. value bezeichnet dabei die absolute Länge des Balkens.
static String drawBar(String label, double value)
Generiert eine Zeile des Balkendiagramms. value bezeichnet die prozentuelle Länge des Balkens. Wird ein Prozentwert als Balken dargestellt muss eine ganzzahlige Balkenlänge berechnet werden. Diese soll durch Runden zur nächstgelegenen Ganzzahl entstehen.

 

Allgemeine Hinweise:

 

Hinweise:

Beachten Sie die allgemeinen Hinweise zur Installation und zur Ein-/Ausgabe, sowie zur Abgabe und zur Beurteilung in den FAQ. Beispiele zum Umgang mit Ein-/Ausgabe sowie den Methoden der Klasse String finden Sie im Skriptum oder in den Folien der Vorlesung.

Faktorisierung

Achten Sie bei der Implementierung der geforderten Methoden darauf, dass dieselbe Folge von Anweisungen nicht mehrfach (z.B. in verschiedenen Methoden) auftritt (kein duplizierter Code). Beispielsweise kann die Methode repeat sowohl zum Erstellen der Balken als auch zum Füllen einer Zeichenkette mit Leerzeichen benutzt werden. Die dafür notwendige Schleife sollte nur in repeat geschrieben werden und nicht an weiteren Stellen im Programm vorkommen.

Eingabe

Für das Einlesen von Daten von der Standardeingabe verwenden Sie die Klasse Scanner. Beispiele für die Verwendung der Klasse Scanner finden Sie im Skriptum oder in den Folien der Vorlesung.

Ausgabe

Für die Ausgabe über die Standardausgabe verwenden Sie die Methoden System.out.print und System.out.println.

Nicht-Funktionale Anforderungen

Im Rahmen des Abschlussgesprächs wird die Abgabe nach Kriterien wie Dokumentation (sprich Kommentare), Übersichtlichkeit des Codes, Verständnis, etc. beurteilt.

Wenn Sie Fragen zur Implementierung oder auch zu Java haben, können Sie das Informatik-Forum nutzen. Im Rahmen der wöchentlichen Laborien stehen Tutoren für Fragen zur Verfügung.
Informatik-Forum Laborien

 

Eingabedaten:

Es werden Balkenbeschriftungen als Wort gefolgt von einer Zahl, die die Balkenlänge angibt, paarweise eingelesen. Die Zahl kann Ganzzahl oder Fließkommazahl sein. Wird eine Ganzzahl eingelesen, gibt diese die absolute Balkenlänge (0-30) an. Wird eine Fließkommazahl eingelesen, so gibt diese einen Prozentwert an. Die Fließkommazahl muss dabei zwischen 0.0 (0%) und 1.0 (100% = Balkenlänge 30) liegen.

Ausgabedaten:

Für jedes eingelesenes Datenpaar wird die Balkenbeschriftung und ein horizontaler Balken ausgegeben.

Fehlerbehandlung:

Wenn ein ungültiger Wert eingelesen wird, oder ein Teil der Eingabe fehlt (wenn beispielsweise eine Beschriftung ohne nachfolgende Zahl in der Eingabe vorliegt), soll "INPUT ERROR" ausgegeben und das Programm beendet werden.

Testen:


In
WS2009 15
SS2010 3
WS2010 21
SS2011 14
Out
WS2009  |###############               |
SS2010  |###                           |
WS2010  |#####################         |
SS2011  |##############                |
Beschreibung Korrekt


In
ColdMonths 0.8
WarmMonths 0.15
HotMonths 0.05
Out
ColdMont|########################      |
WarmMont|#####                         |
HotMonth|##                            |
Beschreibung Gleitkommazahlen und abgeschnittene Achsenbeschriftung


In
WS2009 15 SS2010 3 WS2010 0.7 SS2011 0.47
Out
WS2009  |###############               |
SS2010  |###                           |
WS2010  |#####################         |
SS2011  |##############                |
Beschreibung Eingabe mit Ganzzahlen und Fließkommazahlen.


In
5 5
55 55
23 23
Out
5       |#####                         |
INPUT ERROR
Beschreibung Ungültiger Wert in Zeile 2


Bemerkung: Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:
java BarPlot < asciishop-A02-PP.i1 > asciishop-A02-PP.out1

Das erzeugte File asciishop-A02-PP.out1 können Sie dann mit dem mitgelieferten Outputfile asciishop-A02-PP.o1 vergleichen.