Java programmieren: Konsolen-Programme



Ähnliche Dokumente
Programmierkurs Java

public class SternchenRechteckGefuellt {

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Übungen zu C++ Kapitel 1

Übungen Programmieren 1 Felix Rohrer. Übungen

Mediator 9 - Lernprogramm

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

1 Vom Problem zum Programm

Java: Vererbung. Teil 3: super()

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

AutoTexte und AutoKorrektur unter Outlook verwenden

Prüfung Computation, Programming

Leichte-Sprache-Bilder

Übungsblatt 3: Algorithmen in Java & Grammatiken

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

Bilder zum Upload verkleinern

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Was meinen die Leute eigentlich mit: Grexit?

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Professionelle Seminare im Bereich MS-Office

Computeria Solothurn

Fotostammtisch-Schaumburg

Erklärung zu den Internet-Seiten von

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Zur drittletzten Zeile scrollen

Anleitung über den Umgang mit Schildern

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Handbuch für Redakteure

Artikel Schnittstelle über CSV

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Windows 7 Winbuilder USB Stick

Programmierung in C. Grundlagen. Stefan Kallerhoff

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Bauteilattribute als Sachdaten anzeigen

Berechnungen in Access Teil I

Fernseher Bild Bildschirm Computergeräte. Festplatte CD DVD Eingabegerät. Computertasten Mauszeiger Cursor rechten Maustaste

Einführung in die Programmierung

Microsoft Visual Studio Community 2015

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Einfügen von Bildern innerhalb eines Beitrages

Leitfaden zum Sichern einer Festplatte als Image mit der System Rescue CD

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Online-Zugang zum EOM. Anleitung

Zur Einrichtung der orgamax Cloud auf Ihrem ipad beschreiben wir hier die Vorgehensweise.

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Anleitung: Passwort-Self-Service-Portal

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Windows XP Jugendschutz einrichten. Monika Pross Molberger PC-Kurse

EINFACHES HAUSHALT- KASSABUCH

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

PowerPoint: Text. Text

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Lehrer: Einschreibemethoden

DB2 Kurzeinführung (Windows)

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Tevalo Handbuch v 1.1 vom

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Xylem WebService Demo Kurzbedienungsanleitung

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Java Kurs für Anfänger Einheit 5 Methoden

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Medienkompass1, Lehrmittelverlag des Kantons Zürich, 1. Ausgabe 2008, Thema 13 Sicher ist sicher, S.58-61

2A Basistechniken: Weitere Aufgaben

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Erklärung zum Internet-Bestellschein

Überblick. Lineares Suchen

Stapelverarbeitung Teil 1

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Zimmertypen. Zimmertypen anlegen

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Gimp Kurzanleitung. Offizielle Gimp Seite:

ITT WEB-Service DEMO. Kurzbedienungsanleitung

Bedienung des Web-Portales der Sportbergbetriebe

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einführung in die Java- Programmierung

Die Post hat eine Umfrage gemacht

Wann benötigen Sie eine neue Lizenz-Datei mit der Endung.pkg?

Transkript:

Java programmieren: Es war einmal vor langer Zeit in einer weit entfernten Galaxis ok, das ist etwas übertrieben. In den Anfängen der Personal Computer in den 1980er sahen Computer noch etwa so aus: Diese ersten Personal Computer kannten nur monochrome (einfarbige) Bildschirme, die zudem nur Text ausgeben konnten. Computer mit grafischen Benutzeroberflächen kamen erst später auf: erfunden an Xerox Parc, popularisiert von Apple und schliesslich von Microsoft weit verbreitet. In den folgenden Java-Programmier-Aufgaben machen wir einen Ausflug in die Welt der sogenannten Konsolen, auch Kommandozeilen (engl. Shell) genannt, siehe auch http://de.wikipedia.org/wiki/kommandozeile. Konsole bedeutet, die Interaktion mit dem Computer geschieht ausschliesslich mit der Tastatur und dem Bildschirm, und die Anzeige ist beschränkt auf Text. In Windows zum Beispiel kann die Kommandozeile gestartet werden, in dem im Startmenü bei Ausführen der Befehl cmd eingeben wird. Man erhält dann eine einfache Kommandozeile: Auch wenn die meisten Anwender nie mit der Konsole arbeiten: Sie spielen auch heute noch eine zentrale Rolle, vor allem beim Betrieb von Servern. In einer typischen sogenannten Server-Farm hat es hunderte, tausende und sogar zehntausende von Computern, die aus der Ferne betreut werden. Das geschieht typischerweise über die Konsole, vor allem bei Servern, auf denen ein Unix-basiertes Betriebssystem läuft. Mächtig werden die Unix-Shells (Kommandozeilen bei Unix werden meist mit Shell bezeichnet) dadurch, dass es sog. Shell Script Programming Languages gibt. Mit einer Shell-Programmiersprache wie etwa Bash können auch Programme geschrieben werden. Der folgende Einzeiler zum Beispiel lädt 31 Dateien von einem Server runter: 1/7

for i in `seq -f "%02.f" 1 31`; do wget https://unser.server.com/logs/access.log.201012$i.gz --httpuser=benutzername --http-password=passwort --no-check-certificate; done Für Hintergrundsinformationen und eine Einführung zu Shell Skripting siehe auch http://de.wikipedia.org/wiki/unix-shell http://de.wikipedia.org/wiki/bourne-again_shell http://www.selflinux.org/selflinux/html/shellprogrammierung.html Einfache Java-Konsolen Programme: : Ausgabe Betrachten wir zunächst das berühmte Hallo Welt -Programm, das für eine Programmiersprache zeigen soll, wie einfach eine Textausgabe mit dieser Sprache funktioniert. Hier das Programm für Java, mit Konsolen-Ausgabe: public class HalloWelt { public static void main(string[] args) { System.out.println("Hallo, Welt!"); Wie immer muss der Klassenname HalloWelt dem Dateinamen entsprechen (HalloWelt.java). Das Hauptprogramm, der Einstiegspunkt in das Programm, ist die Methode main. Diese Methode muss exakt wie im Beispiel oben definiert werden. Da die Methode main static ist ohne darauf näher einzugehen müssen auch alle unsere eigenen Methoden im gleichen Programm als static definiert werden. Beispiele folgen unten. Die eigentliche Ausgabe erfolgt mit dem Aufruf der Methode System.out.println ("schreibe Text in Zeile"). Dieser Methode wird eine Zeichenkette ( Hallo, Welt! ) übergeben. Diese wird auf die Konsole geschrieben. Anschliessend wird der unsichtbare Cursor in die nächste Zeile verschoben. Unsichtbarer Cursor? Man kann sich die Ausgabe auf die Konsole wie folgt vorstellen. Die Konsole ist eine Tabelle von gleichgrossen Feldern, in die Zeichen geschrieben werden können. Die Tabelle selbst ist dabei unsichtbar. Zu Beginn ist die Tabelle leer, und der unsichtbare Cursor seht auf dem ersten Feld in Leserichtung, dargestellt durch einen vertikalen Strich. Nach der Ausgabe von Hallo, Welt mit dem Aufruf von System.out.println sieht die Konsole wie folgt aus: H a l l o, W e l t! 2/7

Soll der Cursor nach der Textausgabe nicht in die nächste Zeile rücken, kann die Methode Sys- tem.out.print ("schreibe ( Text ohne anschliessenden Zeilenumbruch") verwendet werden. Diese Methode schreibt den Text ebenfalls auf die Konsole, aber ohne den Cursor auf die nächste Zeile vorzurücken. Nach System.out.print("Hallo, Welt!") würde die Konsole daher wie folgt aussehen: H a l l o, W e l t! Eine Herausforderung von n ist die Darstellung von Grafiken nur mit Zeichen in dem fixen Raster der Konsole. Es gibt sogar Leute, die damit einen künstlerischen Anspruch einzulösen versuchen: Unter dem Begriff ASCII Art (ASCII ist die Auswahl an Zeichen die ursprünglich gemäss amerikanischem Standard zur Verfügung stand) versteht man Zeichnungen auf der Konsole, siehe auch http://de.wikipedia.org/wiki/ascii-art. Wir betrachten hier ein etwas einfacheres Beispiel. Ein Programm soll eine diagonale Linie ausgeben. Damit die Linie besser sichtbar wird, soll die Linie selbst mit Leerzeichen dargestellt werden und die rechteckige Umgebung mit Sternchen gefüllt werden: **** * *** ** ** *** * **** Das Programm dazu sieht wie folgt aus: final int eingabe = Integer.parseInt(konsolenEingabe.readLine()); for (int i = 0; i < eingabe; i++) { wiederholezeichen(i, '*'); System.out.print(' '); wiederholezeichen(eingabe - i - 1, '*'); System.out.println(); static void wiederholezeichen(final int anzahl, char c) { for (int i = 0; i < anzahl; i++) { System.out.print(c); Zunächst wird mit Integer.parseInt(konsolenEingabe.readLine()); eine Zahl von der Konsole eingelesen; die Zeile davor macht die Eingabe möglich, ist aber hässlich und wird von uns nicht näher betrachtet. Der Benutzer muss die Eingabe mit der Enter-Taste abschliessen. Gibt er keine Zahl ein, erhält er eine Java-Fehlermeldung angezeigt. 3/7

Die for-schleife im Hauptprogramm zeichnet die Diagonale von links oben nach rechts unten. Dazu wird die Methode wiederholezeichen verwendet, die ein Zeichen eine Anzahl mal ausgibt. Wichtige Unterscheidung: Eine Variable vom Typ String ist eine Zeichenkette wird wie im Beispiel "Hallo, Welt" in doppelten Anführungszeichen geschrieben. Man kann einen String lesen, ihn aber nicht verändern. Eine Variable vom Typ char ist ein einzelnes Zeichen und wird wie im obigen Beispiel '*' in einfachen Anführungszeichen geschrieben. Verständnisfragen Was passiert, wenn Sie eine leere Eingabe tätigen? Wenn Sie Text eingeben? Wo wird in dem Programm die Ausgabe auf einer neuen Zeile gestartet? Variieren Sie die Zeichen, die für die Ausgabe verwendet werden, sowohl das Leerzeichen als auch das Sternchen finden Sie eine bessere Darstellung für die Diagonale. Änderung Sie das Programm, so dass die Diagonale von links unten nach rechts oben geht. Was passiert, wenn Sie in wiederholezeichen zum Beispiel 3 * anzahl Zeichen ausgeben? Einfache Java-Konsolen Programme: : Textanalyse Häufig müssen Texte analysiert werden. Betrachten wir ein einfaches Programm, das in einer Eingabe die Anzahl Gross- und Kleinbuchstaben sowie die Anzahl Nicht-Buchstaben zählt: public class GrossbuchstabenKleinbuchstabenZaehlen { final String eingabe = konsoleneingabe.readline(); int anzahlgrossbuchstaben = 0; int anzahlkleinbuchstaben = 0; int anzahlnichtbuchstaben = 0; for (int i = 0; i < eingabe.length(); i++) { char c = eingabe.charat(i); if (Character.isUpperCase(c)) { anzahlgrossbuchstaben++; else if (Character.isLowerCase(c)) { anzahlkleinbuchstaben++; else { anzahlnichtbuchstaben++; System.out.println("Anzahl Grossbuchstaben: " + anzahlgrossbuchstaben); System.out.println("Anzahl Kleinbuchstaben: " + anzahlkleinbuchstaben); System.out.println("Anzahl Nicht-Buchstaben: " + anzahlnichtbuchstaben); 4/7

Mit String eingabe = konsoleneingabe.readline(); wird eine Zeichenkette eingelesen; mit der Taste Enter wird die Eingabe beendet. Das Zeichen für Enter wird dabei nicht in eingabe gespeichert. Die Methodenaufruf eingabe.length(); liefert die Länge der String-Variablen eingabe zurück. Die Anweisung char c = eingabe.charat(i); speichert das i-te Zeichen aus der String-Variable eingabe in der Variablen c. Mit charat kann ein String wie ein Array vom Typ char der Länge eingabe.length() betrachtet werden. Die Aufrufe der Hilfsmethoden Character.isUpperCase(c) und Character.isLowerCase(c) geben true zurück, wenn die Eingabe c ein Gross- bzw. Kleinbuchstabe ist. Verständnisfragen Was passiert, wenn Sie eine leere Eingabe tätigen? Wenn Sie Text eingeben? Begründen Sie mit einem Beispiel, wozu es das erste else im Programm braucht: Was würde ohne dieses else falsch gezählt? Erweitern Sie das Programm, so dass die Häufigkeit von Gross- und Klein und Nicht- Buchstaben in Prozent ausgegeben wird. Achten Sie darauf, dass Ihr Programm keinen Fehler produziert, falls der Benutzer eine leere Eingabe tätigt. Das folgende Programm ermittelt die durchschnittliche Länge der eingegebenen Wörter: public class StringEingabeDurchschnittlicheLaenge { int summelaengen = 0; int anzahleingaben = 0; String eingabe = konsoleneingabe.readline(); while (!"".equals(eingabe)) { anzahleingaben++; summelaengen = summelaengen + eingabe.length(); eingabe = konsoleneingabe.readline(); System.out.println("Anzahl Eingaben: " + anzahleingaben); int durchschnittlichelaenge = summelaengen / anzahleingaben; System.out.println("Durchschnittliche Länge der Eingaben: " + durchschnittlichelaenge); Für eine String-Variable gibt die Methode equals true zurück, falls die beiden Strings exakt gleich sind (inkl. Gross- und Kleinschreibung). "".equals(eingabe) ist dann true, wenn eine leere Eingabe erfolgte. 5/7

Die Anweisung für die Eingabe kommt zwei Mal vor: Einmal für das erste Mal, ausserhalb der while-schleife, und dann wieder als Abschluss der Anweisungen in der while-schleife. Verständnisfragen Was passiert, wenn Ihre erste Eingabe leer ist, und warum? Wie müssen Sie das Programm anpassen, damit es auch mit einer einzigen leeren Eingabe klarkommt? Könnten Sie die Bedingung in der while-schleife auch anders schreiben als mit der Prüfung auf Gleichheit? Ändern Sie das Programm so ab, dass es auch die minimale und maximale Eingabelänge ausgibt. Einfache Java-Konsolen Programme: : Texte verändern Betrachten wir ein Programm, das eine ganz primitive Art der Kompression vornimmt: Bei Wörtern werden immer höchstens die ersten vier Buchstaben ausgegeben: Rafael Nadal war im Viertelfinal des Australian Open auch wegen der Verletzung mit 4:6, 2:6, 3:6 gegen seinen Landsmann David Ferrer ausgeschieden. Rafa Nada war im Vier des Aust Open auch wege der Verl mit 4:6, 2:6, 3:6 gege sein Land Davi Ferr ausg. Die Ausgabe ist doch immer noch fast verständlich:-) Das Programm dazu: public class ErsteVierBuchstaben { final String eingabe = konsoleneingabe.readline(); int anzahlbuchstabenimwort = 0; for (int i = 0; i < eingabe.length(); i++) { if (Character.isLetter(eingabe.charAt(i))) { if (anzahlbuchstabenimwort < 4) { System.out.print(eingabe.charAt(i)); anzahlbuchstabenimwort++; else { System.out.print(eingabe.charAt(i)); anzahlbuchstabenimwort = 0; Die Methode Character.isLetter(c) gibt true zurück, wenn die Eingabe c ein Buchstabe ist, sonst false (wenn c zum Beispiel eine Zahl oder ein Sonderzeichen ist). 6/7

Verständnisfragen Warum braucht es an zwei Orten im Programm den Aufruf von System.out.print( )? Ist die Ausgabe des Programmes auch dann korrekt, wenn vor dem ersten Wort zum Beispiel Leerzeichen eingegeben werden? Begründen Sie Ihre Antwort. Ergänzen Sie das Programm so, dass auch bei Zahlen wie 123456 und bei kombinierten Eingaben wie passwort1234 höchstens die ersten vier Zeichen ausgegeben werden. Sie brauchen dazu die Methode Character.isDigit(c). Zusammenfassung für einfache Java-Konsolen Wichtige Unterscheidung: Eine Variable vom Typ String ist eine Zeichenkette wird wie im Beispiel "Hallo, Welt" in doppelten Anführungszeichen geschrieben. Man kann einen String lesen, ihn aber nicht verändern. Eine Variable vom Typ char ist ein einzelnes Zeichen und wird wie im obigen Beispiel '*' in einfachen Anführungszeichen geschrieben: String s = "Hallo, Welt!"; char c = 'r'; Zwei Strings aneinanderhängen mit + ergibt eine neue Variable vom Typ String: String name = konsoleneingabe.readline(); System.out.println("Hallo, " + name); String-Eingabe in Ganzzahlen umwandeln: final int eingabe = Integer.parseInt(konsolenEingabe.readLine()); Die Methodenaufruf eingabe.length(); liefert die Länge der String-Variablen eingabe zurück. Die Anweisung char c = eingabe.charat(i); speichert das i-te i Zeichen aus der r String-Variable eingabe in der Variablen c. Mit charat kann ein String wie ein Array vom Typ char der Länge eingabe.length() betrachtet werden. Die Aufrufe der Hilfsmethoden Character.isUpperCase(c) und Character.isLowerCase(c) geben true zurück, wenn die Eingabe c ein Gross- bzw. Kleinbuchstabe ist. Character.toLowerCase(c) bzw. Character.toUpperCase(c) wandelt Buchstaben in Klein- bzw. Grosss- buchstaben um. Die Methode Character.isLetter(c) gibt true zurück, wenn die Eingabe c ein Buchstabe ist, sonst false (wenn c zum Beispiel eine Zahl oder ein Sonderzeichen ist). Die Methode Character.isDigit(c) gibt true zurück, wenn die Eingabe c eine Ziffer ist, sonst false (wenn c zum Beispiel ein Buchstabe oder ein Sonderzeichen ist). Quellen http://openbook.galileocomputing.de/javainsel8/javainsel_04_001.htm 7/7