Freitag, 19. Dezember 2008
Programmierrichtlinen allgemein
Diese Programmierrichtlinien sind für den Programmierunterricht an der HTL Wiener Neustadt, Abteilung EDVO gedacht, sind aber auch für andere ganz praktisch (nach diversen Anpassungen).
Sammlung von Programmierrichtlinen, die für alle Programmiersprachen gelten.
- Verwenden Sie sprechende Namen (für Funktionen, Variable, Methoden usw.)
- Jede Variablendeklaration muss in einer eigenen Zeile stehen.
- Keine Umlaute in Namen (auch wenn sei von der Programmiersprache erlaubt werden).
- Keine Tabulatoren verwenden. Der Editor (vim, eclipse usw.) muss so eingestellt werden, sodass nur Leerzeichen eingefügt werden.
- Einrückungen dürfen nur mit Leerzeichen erfolgen. Eine Ebene muss mindestens zwei Leerzeichen eingerückt werden. Mehr als vier Leerzeichen sind nicht sinnvoll.
- Die Länge von Zeilen soll nicht größer als 80 Zeichen sein (eventuell 90 Zeichen). Zeilen, die deshalb umgebrochen werden müssen, sind nach dem Zeilenumruch (eventuell mit Zeilenfortsetzungszeichen zu markieren) zusätzlich einzurücken.
- Dateinamen, Verzeichnisnamen dürfen keine Umlaute, Sonderzeichen und Leerzeichen enthalten.
- Jede Programmdatei muss einen Kommentarkopf mit folgenden Inhalten haben:
Ihrem Namen
Ihrer Klasse
Ihrer Katalognummer
Ihrer Evidenznummer (und/oder E-Mail-Adresse)
dem Dateinamen
Kurzbeschreibung des Programms oder der Klasse (Zweck)
- Funktionen, Subroutinen, Methoden müssen mindestens durch eine Leerzeile getrennt werden.
- Klassennamen müssen mit einem Großbuchstaben beginnen. Klassennamen sind normalerweise Substantive in der Einzahl.
- Methodennamen müssen mit einem Kleinbuchstaben beginnen. Methoden beschreiben eine Tätigkeit!
- Konstante definieren. Es dürfen keine Zahlen unmotiviert
im Code verwendet werden.
- Fixe Dateipfade müssen als Konstante definiert werden. Noch besser wäre die Verwendung von Konfigurationsdateien.
- Bei Vergleichen sollte die Konstante immer links stehen, damit nicht versehentlich eine Zuweisung entsteht.
- Globale Variable sollten vermieden werden.
- Alle Methoden (Funktionen), die nur lokal in einer Klasse oder einem Modul verwendet werden, müssen privat sein (je nach Programmiersprache z.B. private
oder static
).
- Der Zweck von Parametern/Variablen/Methoden muss durch den Namen erkennbar sein. Alternativ kann auch (zusätzlicher) Kommentar verwendet werden.
- Sichern Sie den Code mit assertions (Zusicherungen assert()
) ab.
Ergänzungen zu dieser unvollständigen Liste, werden folgen.
Python
Grundsätzlich gelten obige Richtlinien. Es folgt ein Beispielprogrammkopf zur Demonstration:
#!/usr/bin/python
# -"- coding: UTF8 -*-
# hauf.py
# Worthäufigkeiten ermitteln, indem ein Dictionary mit Worten erzeugt wird.
# Danach wird das Dictionary in eine Liste umgewandelt (mit Elementen der
# Art [häufigkeit,wort]), um ein Sortieren nach Häufigkeit zu ermöglichen.
# Eingelesen wird alles und mittels Regulärem Ausdruck in eine Wortliste
# zerlegt.
#
# 2006-10-12, Maier Lukas, 2BD, 20, d09999
Der Header enthält den Dateinamen hauf.py
, den Namen Maier Lukas
, die Klasse 2BD
, die Katalognummer 20
und die Evidenznummer d09999
. Darüberhinaus wird der Zweck des Programms kurz umrissen.
Jede Methode bzw. Funktion soll einen DocString
enthalten (zwischen
), in dem der Zweck der Methode und die Parameter beschrieben werden:"
def einlesen(fp):
"""
Einlesen der Wörter aus der Datei fp, liefert eine Liste von Worten
"""
text = fp.read() # lies alles ein
# ... Rest fehlt
Java
- Paketnamen sind klein zu schreiben
- Klassennamen beginnen mit einem Großbuchstaben und werden in KamelSchreibWeise geschrieben
- Methoden beginnen mit einem Kleinbuchstaben und werden in kamelSchreibweise geschrieben
- Verwenden Sie Javadoc-Strings in Ihren Komentaren.
- Jede Datei Soll wieder einen Header haben, z.B.:
/**
* automat: bo.Tabelle.java Automaten zeichnen.
*
* @author Maier Lukas, 2BD, 20, d09999
*/
package bo;
//...
Hier ist zusätzlich der Paketname im Kommentar angegeben (bo
).
- Jede Klasse muss ebenfalls einen Header haben, der den Zweck beschreibt, z.B.:
/**
* Übergangstabelle eines Automaten. Zeilen sind Knoten (Zustände), Spalten sind
* Mengen von Eingabesymbolen.
*
* @author Maier Lukas, 2BD, 20, d09999
*/
public class Tabelle {
private HashMap knoten = new HashMap();
- Ist nur eine Klasse in einer Datei, so können die beiden Header zusammengefasst werden.
- Methoden sollten mindestens @param
und @return
Docstrings enthalten:
/**
* Leerstring.
*
* @param anz
* Anzahl Blanks
* @return String mit anz Leerzeichen
*/
private String leer(int anz) {
String ret = "";
//...
Am besten machen Sie sich schon passende Vorlagen in eclipse
(Menü Window->Preferences
):
C#
Hier gilt im Wesentlichen das selbe wie für Java, nur dass die Docstrings ein anderes Format haben (XML), ein Beispiel:
/// <summary>
/// Diese Funktion gibt den größeren Betrag zurück
/// </summary>
/// <param name="a">Der erste Übergabeparameter
/// <param name="b">Der zweite Übergabeparameter
/// <returns>Die Zahl mit dem größeren Betrag </returns>
/// <remarks>Diese Funktion gibt den größeren Betrag der beiden Übergegeben
/// <see cref="Int32"/> zurück.
/// Sind die Beträge gleich groß ist dies ein Fehler</remarks>
/// <exception cref="ArgumentException">Der Betrag der beiden Zahlen ist gleich
/// groß</exception>
public int GetGreaterAbs(int a, int b)
{
return Math.Max(Math.Abs(a), Math.Abs(b));
}
C, C++
Beide Sprachen sind wie Java zu dokumentieren. Hier gibt es externe Programme zur Auswertung der DocStrings.
andere Sprachen
Die Regeln müssen entsprechend adaptiert werden. Etliche Sprachen haben ein ähnliches Format für DocStrings wie Java. Bitte verwenden Sie diese Tags.
Labels: allgemeines, C, C#, C++, Java, Python
Donnerstag, 18. Dezember 2008
Optionen von javac
Falls man Dateien von Computern ohne Unicode oder umgekehrt übersetzen will, so kann man die Kodierung per Option angeben:
javac javac -encoding ISO8859-1 Hello.java
Statt ISO8859-1
kann man auch EUCJIS
, SJIS
oder UTF8
(Unicode) verwenden. Wird diese Option nicht angegeben, so wird die Systemeinstellung verwendet (i.A. passt diese, wenn man die Datei auf dem selben System erstellt hat).
Um mit dem JDK1.5 auch für andere Java-Versionen Code zu erzeugen, kann man dies mit der Option -target version
angeben. version
kann sein 1.1
, 1.2
, 1.3
, 1.4
, 1.5
oder 5
(Synonym für 1.5
).
javac -target 1.4 Hello.java
übersetzt für die Version 1.4
.
Eine wichtige Option ist -Xlint
, welche mehr Warnungen erzeugt (vergleichbar mit der -Wall
-Option beim gcc
).
Labels: Java
printf in Java
Seit der Version 1.5 gibt es in Java eine bequeme Möglichkeit die Ausgabe zu formatieren.
Jeder PrintStream
besitzt die Methode printf(String format, Object… args)
. Die Standardausgabe System.out
oder die Standardfehlerausgabe System.err
sind solche PrintStream
s.
Folgendes Codefragment zeigt die prinzipielle Verwendung
/** formatierte Ausgabe */
String s = "Zahl";
int zahl = 23;
double d = 3.1415927;
System.out.printf("%s = %d\n", s, zahl);
// ^ ^ ^ ^
// | | | |
// | +----------+
// | |
// +----------+
System.out.printf("alles: [%f]\n", d);
System.out.printf("3 Nachkommastellen: [%.3f]\n", d);
System.out.printf("10 gesamt, 2 NK: [%10.2f]\n", d);
System.out.printf("10 gesamt, 2 NK: [%10.2f]\n", -d);
System.out.printf("10 gesamt, 2 NK: [%10f]\n", -d);
System.out.printf("%%-Zeichen %.2f%%\n", -d);
System.out.printf("String in 10 Zeichen: [%10s]\n", s);
System.out.printf("String in 10 Zeichen: [%-10s]\n", s);
Die Ausgabe ist dann
Zahl = 23
alles: [3,141593]
3 Nachkommastellen: [3,142]
10 gesamt, 2 NK: [ 3,14]
10 gesamt, 2 NK: [ -3,14]
10 gesamt, 2 NK: [ -3,141593]
%-Zeichen -3,14%
String in 10 Zeichen: [ Zahl]
String in 10 Zeichen: [Zahl ]
Die Seite zum direkten Verwenden in eclipse: printf.jpage
Die Klasse String
hat eine Methode format()
, die genauso wie das oben beschriebene printf()
funktioniert, nur liefert format()
eben einen passend formatierten String
zurück.
Ein Beispiel:
// Formatieren der Zahl z so, dass sie rechtsbündig innerhalb von 8 Zeichen mit
// 2 Nachkommastellen angezeigt wird. Der Formatstring für printf() wird mittels
// String.format() erzeugt.
int gesamtBreite = 8;
int anzNachkomma = 2;
double z = 2.12345676;
String fmt = String.format("%%%d.%df\n", gesamtBreite, anzNachkomma);
System.out.printf(fmt, z);
// Variante 2, wie oben aber linksbündig
int gesamtBreite = -8;
int anzNachkomma = 2;
double z = 2.12345676;
String fmtZ = String.format("%" + gesamtBreite + "." + anzNachkomma + "f\n",z);
System.out.print(fmtZ);
Labels: Java
Internationalisierung in Java
In dem Beispiel internationalisierung.zip wird demonstriert, wie man die Ein-/Ausgabe sowie eigene Texte internationalisiert.
private String resource = "international.texte"; // Package + Prefix
private ResourceBundle bundle;
private Locale locale = Locale.getDefault();
public International() {
this.bundle = ResourceBundle.getBundle(this.resource);
System.out.println(this.locale.getDisplayName());
}
public International(Locale locale) {
this.bundle = ResourceBundle.getBundle(this.resource, locale);
this.locale = locale;
System.out.println(this.locale.getDisplayName());
}
public void sayHello() {
System.out.println(this.bundle.getString("hallo"));
}
Dieses Code-Fragment zeigt einen Ausschnitt aus der Beipielklasse International
. Beim Defaultkonstruktor wird als Sprache die Systemeinstellung verwendet, der zweite Konstruktor wird mit einer Locale
aufgerufen:
International i = new International(new Locale("de", "AT"));
i.sayHello();
ResourceBundle.getBundle(this.resource, locale)
versucht eine Datei international.texte_locale.properties
zu lesen (international
ist hier das Package). locale
setzt sich in obigem Beispiel aus de_AT
zusammen.sayHello()
gibt dann die Übersetzung zum String
aus, falls diese Property existiert.hallo
Eine solche Property-Datei enthält Zeilen der Art
msg = Übersetzung
Z.B. international.texte_de_AT.properties
enthält:
# österreichische Texte
hallo = Servus
fehler = Des is foisch
zahl = Zoi
parse = des kaunst net umwaundln
io = des geht net eine oder aussi
null = Nix geht mehr (null pointer exception)
Die Methoden readNumber()
bzw. printNumber()
zeigen, wie man Zahlen lokalisiert einliest bzw. ausgibt.
Im Scrapbook befindet sich noch ein Code-Fragment, das einfach die Namen der Lokalisierungen in der entsprechenden Sprache ausgibt. Weiters wird ein Unicode-String mit runänischen Zeichen ausgegeben.
Siehe auch Internationalisierung (Softwareentwicklung)
Labels: Java
Einfache Filterprogramme mit Java
Aufgabenstellung:
Nehmen Sie an, Sie wollen (Java-)Listings auf Ihrer Homepage darstellen. Die Listings sollen Zeilennummern haben. Außerdem müssen die Zeichen <
, >
, &
, sowie die Umlaute durch ihre HTML-Codierung ersetzt werden.
<
muss durch<
ersetzt werden,>
durch>
,&
durch&
,Ä
durchÄ
,ä
durchä
,Ö
durchÖ
,ö
durchö
,Ü
durchÜ
,ü
durchü
,ß
durchß
Schreiben Sie gemäß der Maxime von Unix 2 Filter, die in Kombination diese Aufabe erledigen:
Nr.java
, welches vor jeder Zeile eine Zeilennummer ausgibt. Verwenden Sie zur Formatierung der Zeilennummern
, um die Zeilennummern 4-stellig auszugeben.%4d:
A2html.java
, welches die oben genannten Ersetzungen für HTML durchführt. Das Programm soll zu Beginn<pre>
und am Ende</pre>
ausgeben, damit man das Ergebnis nur mehr in eine HTML-Seite einfügen muss.- Schreiben Sie Shell-Scripts, um die Java-Programme einfach aufzurufen:
Nr
undA2html
Wenn Sie die beiden übersetzten Programme dann kombinieren, erhalten Sie ein HTML-Listing:
hp@linux1: ~/ > cat A2html.java | Nr | A2html
<b>Listing</b>
<pre>
TODO...
</pre>
Sie können dann mit der Ausgabeumlenkung auch eine Datei erzeugen:
hp@linux1: ~/ > cat A2html.java | Nr | A2html > A2html.java.html
Die Datei A2html.java.html
enthält dann das numerierte Listing:
1: /** TODO
2: * ...
3: */
...
Java Dokumentation für eclipse einrichten
Standardmäßig bekommt man bei Hilfeaufruf (shift-F2
) die Dokumentation direkt von Sun in einem Browserfenster angeboten. Dazu muss das Internet freigesschaltet sein.
Man kann den Pfad für die Doku einstellen. Zum Beispiel befindet sich unter edvodoc/java/docs_15/api/ auch die Java Dokumentation. Der Server edvodoc ist auch im Testbetrieb bzw. bei gesperrtem Internet erreichbar (interner Server!). Die Dokumentation kann natürlich auch in einem lokalen Verzeichnis sein.
Die Einstellung ist im folgenden Bild zu sehen (
, dann die entsprechende VM auswählen, Window"->"Preferences"->"Installed JREs
, dann Edit
.../jre/lib/rt.jar
auswählen und
drücken. Dort muss man dann in geeigneter Weise den Pfad auf edvodoc setzen.Javadoc Location
String mit Umlauten in Bytes umwandeln
UTF-8 ist eine Kodierung für UNICODE. Damit sind alle Zeichen darstellbar. UTF-8 benötigt nicht für alle Zeichen die gleiche Anzahl Bytes, so werden die Zeichen des ASCII-Codes mit einem Byte dargestellt. Viele Zeichen (z.B. Umlaute und 'ß') benötigen 2 Bytes, noch viel mehr (z.B. Chinesische Zeichen) benötigen 3 Bytes.
Die Umwandlung in Bytes ergibt daher Probleme. Probieren Sie folgenden Code im Scrapbook:
// UTF-8 Problem mit Umlauten
// ohne encoding umwandeln
byte[] bytes = "AÄÖÜäöüßA".getBytes();
System.out.printf("%d bytes (Länge 9)\n", bytes.length);
for (byte b : bytes) {
System.out.printf("%02x ", b);
}
System.out.println(new String(bytes));
Für deutschen Zeichensatz genügt ein Encoding, welches über eine Tabelle jedem Zeichen aus unserem Zeichensatz nur ein Byte zuordnet. Wir können z.B. ISO-8859-1
verwenden:
// mit encoding umwandeln
byte[] bytes = "AÄÖÜäöüßA".getBytes("ISO-8859-1");
System.out.printf("%d bytes (Länge 9)\n", bytes.length);
for (byte b : bytes) {
System.out.printf("%02x ", b);
}
System.out.println(new String(bytes, "ISO-8859-1"));
Scrap Book zum runterladen (Achtung UTF-8)
Weitere Informationen
unterstützte encodings in Java
Unicode for Programmers
Java Tutorials - Converting Non-Unicode Text
Labels: Java
Sonntag, 14. Dezember 2008
Programmierblog auf blogspot
Deshalb werde ich die alten Artikel nach und nach hier her transferieren und entsprechend rückdatieren.
Nachteilig wird sein, dass ich die Artikel nicht mehr (so einfach) in ein Versionsverwaltungssystem aufnehmen kann.
Donnerstag, 11. Dezember 2008
PR2 - Sitzplan erstellen
Jedes Jahr wird für jede Klasse ein Sitzplan benötigt. Meistens beauftragen wir Lehrer einen Schüler oder eine Schülerin, einen Sitzplan zu erstellen. Meistens ist der Sitzplan dann verkehrt herum, aus der Sicht der Schüler. Die kennen sich aber schon! Für Lehrer ist der Plan praktisch wertlos.
Diese Problematik hat zu dem folgenden Beispiel geführt. Der Sitzplan ist also verkehrt herum. Wenn man nun alle Schüler einfach in umgekehrter Reihenfolge auf die Plätze verteilt
(am Plan), dann bekommt man einen richtigen Sitzplan.
Aufgabe: Die Schüler sind von vorne links (Schülersicht) beginnend, entlang der Sitzreihen, bis zur letzten Reihe rechts hinten einzugeben. Immer ein Name und in der nächsten Eingabe der Vorname. Bleiben Plätze frei, so sind dort 2 Leerzeilen einzugeben.
In einer Reihe befinden sich 8 Sitzplätze. Es gibt Plätze für maximal 40.
Das Programm soll dann einen Sitzplan ausgeben, wobei immer der Name über dem Familiennamen steht. Zwischen den Schülern soll ein | (senkrechter Strich) stehen. Namen, die zu lange sind, müssen abgeschnitten werden (bei einer Breite vom 80 Zeichen, darf demnach ein Name nur 9 Zeichen haben).
Ein Beispiel:
Lehrer
Steindl
Lukas
Fischer
Ulrich
Wlaschitz
Emanuel
Pointner
Markus
Weissenböck
Gerhard
Resch
Andreas
Ulbrich
Bernhard
Wenninger
Bastian
Berger
Martin
Opelka
Wilhelm
Fritz
Sebastian
Reisinger
Stefan
Treiber
Katja
Habeler
Nicole
Schweiger
Christian
Fasching
Thomas
Ayvere
Erdenic
Berger
Thomas
Mühlhofer
Peter
Kowar
Thomas
Meyer
Clemens
Dragschitz
Gerhard
Gamperl
Mathias
Lupert
Marlene
Popp
Karin
Rosenpichler
Daniela
Obige Liste als Eingabe ergibt dann folgende Ausgabe:
|Rosenpich|Popp |Lupert | |Gamperl |Dragschit|Meyer |
|Daniela |Karin |Marlene | |Mathias |Gerhard |Clemens |
Kowar |Mühlhofer|Berger |Ayvere |Fasching |Schweiger|Habeler |Treiber |
Thomas |Peter |Thomas |Erdenic |Thomas |Christian|Nicole |Katja |
Reisinger|Fritz |Opelka |Berger |Wenninger|Ulbrich |Resch |Weissenbö|
Stefan |Sebastian|Wilhelm |Martin |Bastian |Bernhard |Andreas |Gerhard |
Pointner |Wlaschitz|Fischer |Steindl | | |Lehrer |
Markus |Emanuel |Ulrich |Lukas | | | |
PR2 - Bilde Summe von Zahlen, die in der selben Spalte stehen (schwierig)
Erstellen Sie ein Programm summe
, welches alle Zahlen, die in der selben Spalte enden addiert und die Summe berechnet und ausgibt.
Die Ausgabe soll auf stdout
erfolgen, außer es wird die Option -o Ausgabedatei
angegeben. Dann soll das Ergebnis in diese Datei geschrieben werden, wobei in diesem Fall nicht nur die Summe in die Datei geschrieben werden soll, sondern alle eingabedaten und die Summe in der richtigen Spalte als letzte Zeile (pro Eingabedatei).
Eine Zahl ist in der richtigen Spalte, wenn die letzte Ziffer an der selben Stelle ist wie die letzte Ziffer der Zahl in der Zeile davor.
Gibt es mehrere Zahlen in einer Zeile, so soll die letzte Zahl berücksichtigt werden.
Das Programm soll bei Angabe von -h
eine kurze Hilfe ausgeben.
Beispiel-Eingabe:
Buch 1 Stk a 19.90 19.90 Euro
CD 2 Stk a 15.50 31.00 Euro
DVD 1 Stk a 16.90 16.90 Euro
Versand 8.00 Euro
Wir danken für Ihre Bestellung!
Ausgabe:
Wurde -o summe.txt
angegeben, so sollte summe.txt
folgenden Inhalt haben:
Buch 1 Stk a 19.90 19.90 Euro
CD 2 Stk a 15.50 31.00 Euro
DVD 1 Stk a 16.90 16.90 Euro
Versand 8.00 Euro
Wir danken für Ihre Bestellung!
75.80
Ohne Ausgabedatei wird einfach die Summe 75.80
angezeigt.
Hinweise:
- Vorzeichen und Exponenten brauchen nicht berücksichtigt werden.
- Die Suche nach der Zahl sollte am Zeilenende beginnen (wobei die Spalte natürlich vom Zeilenanfang zählt).
- Die Zahl endet am ersten Zeichen, das nicht zur Zahl gehört (bzw. am Zeilenanfang). Zur Zahl gehören nur Ziffern und maximal ein Komma (Punkt).
- Fixieren Sie bei der Ausgabe die Anzahl der Nachkommastellen auf 2.
PR2 - "Ausschneiden" einer Spalte
Schreiben Sie ein Java-Programm cut
, welches eine Spalte in der Eingabe ausschneidet
, d.h. nur diese Spalte ausgibt. Spalten sind durch Leerzeichen getrennte Strings. Eine Spalte kann auch leer sein (2 Leerzeichen unmittelbar hintereinander). Kommt in einer Zeile keine gesuchte Spalte vor, so ist eine Leerzeile auszugeben.
Aufruf:
java Cut [-h|-o out] spalte [datei...]
-h ... Hilfe
-o out ... Ausgabe in Datei out
spalte ... Nummer der Spalte (beginnend mit 1)
datei… ... optional mehrere Dateien, keine Datei –> stdin
Beispiel
Eingabe (z.B. test.txt
):
eins zwei drei vier fünf
eins zwei drei
eins zwei
eins
eins zwei drei vier fünf
eins zwei drei vier fünf
zwei drei
drei
Aufruf: java Cut 3 test.txt
drei
drei
drei
drei
drei
drei
Aufruf: java Cut 1 test.txt
eins
eins
eins
eins
eins
eins
PR2 - Beispiele zeichenweise Bearbeitung
Anzahl der Strings in der Eingabe ermitteln
Schreiben Sie ein Programm, welches die Anzahl der Strings in der Eingabe ermittelt. Strings sind beliebige Zeichenketten zwischen Hochkomma (z.B.
). Verwenden Sie wieder Schalter zum Erkennen von Strings.ein string
Anzahl der Zahlen ermitteln
Schreiben Sie ein Programm, welches die Anzahl der Zahlen in der Eingabe ermittelt (ganze Zahlen, müssen durch Leerzeichen, Tabulatoren oder Zeilenumbrüchen von anderen Eingaben getrennt sein).
Ziffern zählen
Schreiben Sie ein Java-Programm, welches die Anzahl der Ziffern in der Standadreingabe ermittelt und ausgibt.
Vokale zählen
Schreiben Sie ein Java-Programm, welches die Anzahl der Vokale in der Standadreingabe ermittelt und ausgibt.
Zeichen, Worte und Zeilen zählen
Schreiben Sie ein Java-Programm, welches die Anzahl der Zeichen, Worte und Zeilen in der Standadreingabe ermittelt und ausgibt.
PR2 - Worte zählen
Schreiben Sie ein Java-Programmm (Projekt wz
), welches aus stdin
zeichenweise Worte einliest und zählt, wieviele Worte, Zeilen und Zeichen in der Eingabe waren. Unterscheiden Sie Anzahl der Zeichen Brutto (mit Trennzeichen) und Netto (ohne Trennzeichen). Worte definieren wir einfach als Folgen von Zeichen, die mit Whitespace (Leerzeichen ' '
, Tabulatoren '\t'
und Zeilenumbrüche '\n'
) begrenzt sind (Ausnahme 1. Zeile, Ende der Eingabe).
Beispieleingabe:
Das ist ein Text und eine Zahl
12324 auch Sonderzeichen
&&%$§" gelten als Worte
Ausgabe:
83 Zeichen brutto, 67 Zeichen netto, 14 Worte, 5 Zeilen
PR2 - Count
Aufgabe
Schreiben Sie ein Java-Programm, das aus der Eingabe (Dateien oder stdin
) die Zeichen aus einer Menge von Zeichen zählt. Die Menge der Zeichen wird als Kommandozeilenargument angegeben. Weitere Argumente sind die Dateien, die gelesen werden. Ist nur ein Parameter angegeben, so soll aus stdin gelesen werden. Kein Parameter ergibt eine Fehlermeldung. Groß-/Kleinschreibung ist nicht zu berücksichtigen.
Aufrufbeispiele (die Startklasse ist in diesem Beispiel Count
):
~/workspace/count/bin > java Count aeiou file1.txt file2.txt
a -> 23
e -> 30
i -> 14
o -> 12
u -> 17
~/workspace/count/bin > java Count
Fehler: mindestens die Menge der Zeichen angeben!
~/workspace/count/bin > java Count -h
Bestimmen der Häufigkeiten einer Menge von Zeichen.
Aufruf: java Count [-h] zeichenmenge [dateien...]
~/workspace/count/bin > java Count abc
das ist der Text. Beispiel
zweite Zeile.
^D
a -> 1
b -> 1
c -> 0
~/workspace/count/bin >
Nennen Sie das Projekt count-name-klasse
, wobei name
Ihr Familienname und klasse
Ihre Klasse ist (z.B. count-haberstroh-2a
)
Abonnieren Posts [Atom]