2. Einfache Java-Programme Grundlagen der Programmierung 1 (Java)



Ähnliche Dokumente
Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

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

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Java Einführung Operatoren Kapitel 2 und 3

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Ein erstes Java-Programm

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die C++ Programmierung für Ingenieure

Diana Lange. Generative Gestaltung Operatoren

Primitive Datentypen

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

II.1.1. Erste Schritte - 1 -

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Einführung in die Java- Programmierung

Computeranwendung und Programmierung (CuP)

Prinzipielle Ausführungsvarianten I

Übungsblatt 3: Algorithmen in Java & Grammatiken

Vorkurs Informatik WiSe 16/17

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

3 Objektorientierte Konzepte in Java

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

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

Vorkurs Informatik WiSe 17/18

Javakurs für Anfänger

Programmierkurs Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

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

IT-Basics 2. DI Gerhard Fließ

Javakurs 2013 Objektorientierung

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Vorkurs C++ Programmierung

Distributed Computing Group

Modul 122 VBA Scribt.docx

Objektorientierte Programmierung

2. Programmierung in C

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Programmieren Tutorium

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

5. Tutorium zu Programmieren

Programmieren in Java

5.4 Klassen und Objekte

7. Pakete Grundlagen der Programmierung 1 (Java)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Deklarationen in C. Prof. Dr. Margarita Esponda

Einführung in die Programmierung

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Client-Server-Beziehungen

Einführung in die Java- Programmierung

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

1. Der Einstieg in Java. Was heißt Programmieren?

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

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

Java Kurs für Anfänger Einheit 2 Datentypen und Operationen

4. Datentypen. Einleitung Eingebaute Datentypen. Konversion / Type-Cast. Operatoren. Übersicht Die Datentypen char, float und double Standardwerte

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einführung in die Programmierung

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Übungen zu C++ Kapitel 1

VBA-Programmierung: Zusammenfassung

SEP 114. Design by Contract

Java Einführung Programmcode

Übungen Programmieren 1 Felix Rohrer. Übungen

Dr. Monika Meiler. Inhalt

Die Programmiersprache C

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmierung in C. Grundlagen. Stefan Kallerhoff

Vorkurs Informatik WiSe 15/16

Tutorium Rechnerorganisation

Klausur zur Einführung in die objektorientierte Programmierung mit Java

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Tagesprogramm

Die Programmiersprache C99: Zusammenfassung

Prinzipien der Softwareentwicklung S. Strahringer

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Grundlagen. Kapitel 1

2 Einfache Rechnungen

Grundsymbole. Kapitel 2: Einfache Programme. Liste aller Java-Schlüsselwörter. Schlüsselwörter und Struktursymbole. Lexikalische Einheiten

Testen mit JUnit. Motivation

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Numerische Datentypen. Simon Weidmann

Transkript:

2. Einfache Java-Programme Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 4. Oktober 2005

Agenda Agenda Grundstruktur Datentypen Methoden Ausdrücke & Zuweisungen Ein- / Ausgabe 4.10.2005, Seite 2

Grundstruktur Grundsymbole Namen bezeichnen Variablen, Typen,... in einem Programm - bestehen aus Buchstaben, Ziffern und "_" - beginnen mit Buchstaben - beliebig lang - Groß-/Kleinschreibung signifikant! Schlüsselwörter - heben Programmteile hervor - dürfen nicht als Namen verwendet werden Satzzeichen - Interpunktionszeichen, engl. seperators Operatoren x x17 myvar my_var MyClass dosomething getaddress CONSTANT if for private while repeat public ;,. () {} [] - bilden Ausdrücke = > <! ~? : & + - * / ^ % Trennung lexikalischer Einheiten Leerzeichen, Tabulator, Zeilenvorschub, Satzzeichen, Operatoren, Kommentare 4.10.2005, Seite 3

Grundstruktur Lexikalische Konventionen Variablennamen Kleinbuchstaben variable Methodennamen Kleinbuchstaben methode() Klassennamen Großbuchstaben Person symbolische Konstanten MAXIMUM alle Buchstaben groß Bei zusammengesetzten Namen werden ab dem 2. Wort jeweils der 1. Buchstabe des Wortes groß geschrieben, z.b. die Variable firstname, die Methode getfirstname() Stets sprechende Namen wählen! 4.10.2005, Seite 4

Grundstruktur Grundstruktur von Java-Programmen class ProgramName { } public static void main (String[] arg) {... // Deklarationen... // Anweisungen } // weitere Methoden Beispiel class Sample { public static void main (String[] args) { } } Text muß in einer Datei namens ProgramName.java stehen - Jede Deklaration und jede Anweisung muss mit Semikolon enden - Zusammengehörige Gruppen von Anweisungen einrücken Klassenname Main-Methode: -public: kann von außen gerufen werden - static: ist Klassenmethode - void: gibt keinen Wert zurück - String[] args: Array args aus Zeichenketten als Parameter Text steht in Datei Sample.java 4.10.2005, Seite 5

Grundstruktur Kommentare: Erläuterungen des Programms Zeilenendekommentare - beginnen mit // - gehen bis zum Zeilenende Klammerkommentare - durch /*... */ begrenzt - können über mehrere Zeilen gehen - dürfen nicht geschachtelt werden - oft zum "Auskommentieren" von Programmteilen int sum; // total sales /* Das ist ein längerer Kommentar, der über mehrere Zeilen geht */ Sinnvoll kommentieren! - alles kommentieren, was Erklärung bedarf - statt unklares Programm mit Kommentar, besser klares Programm ohne Kommentar - nicht kommentieren, was ohnehin schon im Programm steht; zum Beispiel nicht: int sum; // Summe - Möglichst englische Bezeichner und Kommentare; nicht deutsch und englisch mischen! 4.10.2005, Seite 6

Grundstruktur Übersetzen und Ausführen mit JDK JDK installieren download http://java.sun.com/j2se/1.5.0/download.jsp Übersetzen C:\> cd MySamples wechselt ins Verzeichnis mit der Quelldatei C:\MySamples> javac Sample.java erzeugt Datei Sample.class Ausführen C:\MySamples> java Sample ruft main-methode der Klasse Sample auf Frage: Wer ruft die Main-Methode auf? 4.10.2005, Seite 7

Agenda Agenda Grundstruktur Datentypen Methoden Ausdrücke & Zuweisungen Ein- / Ausgabe 4.10.2005, Seite 8

Datentypen Datentypen Datentyp = Wertebereich + Operationen Äpfel können nicht mit Birnen verglichen werden Zentrales Konzept der Informatik Bekannt aus der Mathematik: Gruppen, Körper, Ringe, Algebren Auch Datenstruktur, abstrakter Datentyp genannt In Programmiersprache zusätzlich: Darstellung im Speicher 4.10.2005, Seite 9

Datentypen Klassifikation der Datentypen in Java Datentyp Einfacher (elementarer, primitiver) Typ Referenztyp Wahrheitswerte -boolean Zeichen-Typ -char numerischer Typ Klassen- Typ Array- Typ Schnittstellen- Typ Integer-Typ -byte -short -int -long Gleitpunkt-Typ -float -double 4.10.2005, Seite 10

Datentypen Der Datentyp boolean Wertebereich Operationen Konjunktion (&& bzw. &) UND: true && false false true false Disjunktion ( bzw. ) ODER: true false true Negation (!) NICHT:!true false Exklusives Oder (^): true ^ true false 4.10.2005, Seite 11

Datentypen Boolean Wahrheitstafeln x1 x2 AND && OR XOR ^ true true true true false true false false true true false true false true true false false false false false x1 NOT! true false false true Beispiele: boolean isemployed, isaminor, isayoungworker, isavoter; isayoungworker = isemployed & isaminor; isavoter =! isaminor; isataxpayer = isavoter isemployed; boolean freebus = (ispensioner isaminor) &!isemployed; 4.10.2005, Seite 12

Datentypen Boolesche Ausdrücke Operanden vom Typ byte, int, short, long, float, double oder char und gelieferter Ergebniswert vom Typ boolean Operatoren für Vergleiche == Gleichheit 4 == 5 (ergibt false)!= Ungleichheit 6!= 7 (ergibt true) > Größer 'a' > 'b' (ergibt false) < Kleiner -2. < 0.1 (ergibt true) >= Größer-Gleich 1 >= -1 (ergibt true) <= Kleiner-Gleich 3 <= 3 (ergibt true) boolean ispensioner; int age = 67; ispensioner = age > 65; 4.10.2005, Seite 13

Datentypen Operator-Prioritäten Verarbeitungsreihenfolge boolescher Operatoren in Java 1. ( ) 2.! 3. & 4. 5. && 6. Vergleichsoperatoren haben in Java eine höhere Priorität als boolesche Operatoren! Klammern benutzen! (zur Erhöhung der Lesbarkeit) möglichst einfache boolesche Ausdrücke verwenden 4.10.2005, Seite 14

Agenda Agenda Grundstruktur Datentypen Methoden Ausdrücke & Zuweisungen Ein- / Ausgabe 4.10.2005, Seite 15

Methoden Methoden Definition: Teil eines Programms, das in in sich abgeschlossene Aufgabe löst und hierzu eine Folge von Anweisungen und Deklarationen ausführt Analogon zu Funktion in der Mathematik (wie auch Operatoren) Vorteile bessere Übersichtlichkeit von Programmen (Struktur) separate Lösung von Teilproblemen Wiederverwendbarkeit Aspekte: Methodendeklaration und Methodenaufruf 4.10.2005, Seite 16

Methoden Deklaration einer Methode public / private, static, final Ergebnis-Datentyp oder void Namen und Datentypen der Eingaben Modifier Rückgabetyp Name (Typ 1 Parameter 1, Typ n Parameter n ) { Deklarationen und Anweisungen; return Ausdruck; // falls nicht void } Beendigung und Rückgabe innerhalb einer Klasse, vor/nach der main-methode Reihenfolge der Methodendeklarationen hat keinen Einfluß auf Semantik keine Schachtelung von Methodendeklarationen möglich 4.10.2005, Seite 17

Methoden Funktionen und Prozeduren: Beispiele für Methodendeklarationen Funktionen: Methoden mit Rückgabewert; ohne Seiteneffekte public static float fahrenheit(float c) { return c *9/5 +32; } Prozeduren: Methoden ohne Rückgabewert; mit Seiteneffekten public static void printbox() { System.out.println( -------- ); System.out.println( ); System.out.println( ); System.out.println( -------- ); } Mischformen sind möglich, aber sollten vermieden werden! 4.10.2005, Seite 18

Methoden Aufruf einer Methode Aufruf einer Methode, welche in derselben Klasse deklariert ist: f = fahrenheit(42); printbox (); Geschachtelte Methodenaufrufe: main() { int f(int m,n) { void p(float x) { (1) (2) (4) (3) n=f(2, 42); p(n); (5) (9) (8) (7) (6) } } } 4.10.2005, Seite 19

Methoden Formale und aktuelle Parameter Formale Parameter (Methoden-Deklaration) Einführung einer lokalen Variable für die Methode wie viele Übergabeparameter, von welchem Typ und in welcher Reihenfolge Aktuelle Parameter (Methoden-Aufruf) Übergabe eines "Initialwertes" für den formalen Parameter Bedingung: Anzahl an formalen Parametern = Anzahl an aktuellen Parametern für alle Parameter in der entsprechenden Reihenfolge gilt: Typ des aktuellen Parameters ist typkonform zum Typ des formalen Parameters 4.10.2005, Seite 20

Methoden Der Teufel steckt im Detail Welche Fehler haben sich eingeschlichen? public static void methode1(int a) { return 2 * a; } public static int methode2 (int a) { return (a == a); } public static int methode3 (int a) { int temp = 2 * a; } 4.10.2005, Seite 21

Methoden Korrektheit von Methoden: Vor- und Nachbedingungen public static float fahrenheit(float c) pre: c > -273,15 post: result = c *9/5 +32 Vorbedingung (pre condition) Muss der Aufrufer sicher stellen Kann die Methode erwarten: public static int fahrenheit(int c) { assert (c > -273,15); return c *9/5 +32; } Nachbedingung (post condition) Muss die Methode sicherstellen Kann der Aufrufer erwarten: f = fahrenheit(c); assert (f == c *9/5 +32); 4.10.2005, Seite 22

Agenda Agenda Grundstruktur Datentypen Methoden Ausdrücke & Zuweisungen Ein- / Ausgabe 4.10.2005, Seite 23

Ausdrücke & Zuweisungen Variablendeklarationen Jede Variable muss vor ihrer Verwendung deklariert werden - macht den Namen und den Typ der Variablen bekannt - Compiler reserviert Speicherplatz für die Variable boolean iscorrect; int x, y; deklariert eine Variable Typ boolean deklariert zwei Variablen x und y vom Typ int (Ganzzahl) Initialisierung - Jede Variable sollte explizit initialisiert werden - Programmierstil: Variablendeklaration und Initialisierung am Anfang der Methode boolean iscorrect = false; int x = 100, y = 0; deklariert boolean Variable mit Initialwert false deklariert int Variablen x und y und weist Werte zu 4.10.2005, Seite 24

Ausdrücke & Zuweisungen Konstantendeklaration Initialisierte "Variablen", deren Wert man nicht mehr ändern kann static final float PI = 3.14159; Zweck: bessere Lesbarkeit: max ist lesbarer als 100 bessere Wartbarkeit: wenn die Konstante mehrmals vorkommt und geändert werden muss, dann muss das nur an 1 Stelle erfolgen Konstantendeklaration muss auf Klassenebene stehen (s. später) Konvention: GROSSBUCHSTABEN 4.10.2005, Seite 25

Ausdrücke & Zuweisungen Programmierstil: Verwende niemals Literale im Code Literale sind feste Werte von Datentypen float u, r; String tag; u = 2 * 3.14159 * r; if (tag == Montag ) { } static final float PI = 3.14159; static final int MONTAG = 1 float u, r; int tag; u = 2 * PI * r; if (tag == MONTAG) { } 4.10.2005, Seite 26

Ausdrücke & Zuweisungen Zuweisungen Variable x = x + 1 ; Ausdruck 1. berechne den Ausdruck 2. speichere seinen Wert in der Variablen Bedingung: linke und rechte Seite müssen zuweisungskompatibel sein - müssen dieselben Typen haben, oder - Typ links Typ rechts Hierarchie der ganzzahligen Typen long int short byte Beispiele int i, j; short s; byte b; i = j; // ok: derselbe Typ i = 300; // ok (Zahlkonstanten sind int) b = 300;// falsch: 300 paßt nicht in byte i = s; // ok s = i; // falsch Statische Typenprüfung: Compiler prüft: - dass Variablen nur erlaubte Werte enthalten - dass auf Werte nur erlaubte Operationen ausgeführt werden Java ist eine streng typisierte Sprache 4.10.2005, Seite 27

Ausdrücke & Zuweisungen Arithmetische Ausdrücke Vereinfachte Grammatik (EBNF) Expr = Operand {BinaryOperator Operand}. Operand = [UnaryOperator] ( identifier number "(" Expr ")" ). Binäre Operatoren + Addition - Subtraktion * Multiplikation / Division, Ergebnis ganzzahlig 4/3 (-4)/3 4/(-3) (-4)/(-3) % Modulo (Divisionsrest) 4%3 (-4)%3 4%(-3) (-4)/(-3) Unäre Operatoren + Identität (+x = x) - Vorzeichenumkehr 4.10.2005, Seite 28

Ausdrücke & Zuweisungen Vorrangs- und Typregeln in arithmetischen Ausdrücken Vorrangregeln - Punktrechnung (*, /, %) vor Strichrechnung (+, -) - Unäre Operatoren binden stärker als binäre z.b.: 3 + 4 * -2 ergibt -5 Typregeln Operandentypen byte, short, int, long Ergebnistyp - wenn mindestens 1 Operand long ist long - sonst int Beispiele short s; int i; long x; x = x + i; // long i = s + 1; // int (1 ist vom Typ int) s = (short)(s + 1); // Typumwandlung nötig Typumwandlung (type cast) (type)expression - wandelt Typ von expression in type um - dabei kann etwas abgeschnitten werden i (short)i 4.10.2005, Seite 29

Ausdrücke & Zuweisungen Typkonvertierung Eine Konvertierung primitiver Datentypen heißt erweiternd, wenn sie in Pfeilrichtung erfolgt, einschränkend, wenn sie entgegen der Pfeilrichtung erfolgt. byte short int long float double char Implizite Typkonvertierung Erweiternde Typkonvertierung; vom Compiler automatisch durchgeführt Bei nicht identischen, aber kompatiblen Variablen, Ausdrücken, Parametern Explizite Typkonvertierung Erweiternde oder einschränkende Typkonvertierung; vom Programmierer erzwungen durch den Type Cast Operator Beispiel: double a = 5.0; int i= (int) a; 4.10.2005, Seite 30

Ausdrücke & Zuweisungen Beispiel: Zinsberechnung Problem: Lösung: Eine Bank ändert oft ihre Zinssätze. Frage: Wie verändern sich dadurch mein Zinsertrag? Was wissen wir? Was wollen wir wissen? Wie bekommen wir das Ergebnis heraus? Formel: I = (P T R) / 100 I (interest): Zinsertrag pro Jahr T (time): Zeit in Jahren P (principal): Guthaben R (rate): Zinssatz Algorithmus: M Nummer des aktuellen Monats (12 - M) /12 noch zu verzinsende Zeit im laufenden Jahr (P * (12 - M) / 12) * oldrate) / 100 Zinsen bei altem Zinssatz (P * (12 - M) / 12) * newrate) / 100 Zinsen bei neuem Zinssatz Die Differenz hieraus ergibt die gesuchte Veränderung des Ertrags 4.10.2005, Seite 31

Beispiel: Zinsberechnung public class Sample { static final double p = 1000; // in EUR static final int m = 4; // for April static final double oldrate = 12.5; // % static final double newrate = 13.0; // % } } public static void main(string[] args) { double dif = 0; // perform calculation dif = computeinterest(p, m, oldrate) computeinterest(p, m, newrate); // print out the result System.out.println("Interest will change by: " + dif); public static double computeinterest( double p, int m, double r) { double i = 0; double t = 0; } t = (12.0 - m) / 12.0; i = p * t * r / 100; return i; 4.10.2005, Seite 32

Agenda Agenda Grundstruktur Datentypen Methoden Ausdrücke & Zuweisungen Ein- / Ausgabe 4.10.2005, Seite 33

Ein- / Ausgabe Standard-Ein- und Ausgabe Eingabe von der Tastatur System.in Programm Ausgabe auf die Konsole System.out Punkt-Notation: Zugriff auf Attribute und Methoden von Klassen und Objekten (siehe Objekt-Orientierung 4.10.2005, Seite 34

Ein- / Ausgabe Standard-Ausgabe Ausgabe auf die Konsole: System.out.print( ein Text ); // Parameter: Zeichenkette (String) Zeilenvorschub: System.out.println(); // print line beziehungsweise System.out.print( \n ); // newline Character Eine einzelne Zeichenkette darf nicht auf mehrere Zeilen aufgeteilt werden: Das geht so nicht Konkatenation (Verkettung) von Zeichenketten mit +-Operator: Output value: + diff + Euro \n Dabei implizite Typkonversion double String 4.10.2005, Seite 35

Ein- / Ausgabe Standard-Eingabe import java.io.*; public class Sample { public static void main(string[] args) throws IOException { int a, b, c; BufferedReader din = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Bitte a eingeben: "); a = Integer.parseInt(din.readLine()); System.out.println("Bitte b eingeben: "); b = Integer.parseInt(din.readLine()); c = a + b; System.out.println("a+b="+c); } } Komplizierter als Standard-Ausgabe Import des Java-Pakets für Ein-/Ausgabe Exception Handling Geschachtelte Objekt- Instaziierung Klassenmethoden verschiedener Klassen 4.10.2005, Seite 36