Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmier- sprache Java. Das einfachste Programm:

Ähnliche Präsentationen


Präsentation zum Thema: "Programmier- sprache Java. Das einfachste Programm:"—  Präsentation transkript:

1 Programmier- sprache Java

2 Das einfachste Programm:

3 public class MainProgAufbau1 { public static void main (String[] args){ } } Hauptprogramm Kopf Rumpf Begrenzer (Block) Zwischen der öffnenden und der schließenden geschweiften Klammer kommen die Anweisungen, hier keine. Diese müssen mit Semikolon beendet werden. Das ganze Programm muss innnerhalb einer sogenannten Klasse stehen (Näheres dazu später). public static void main (String[] args){ in eine Zeile schreiben. Aus Platzgründen wurden hier 2 Zeilen benötigt.

4 public class MainProgAufbau1 { public static void main (String[] args){ } } Reservierte Worte; sollen nicht vom Programmierer für Variablennamen vergeben werden

5 Ein reines Ausgabe - Programm:

6 public class MainProgAufbau1 { public static void main (String[] args){ System.out.println("Hallo Welt"); } } Der auf dem Bildschirm ausgegebene Text ist eine Zeichenkette. Diese steht immer zwischen Anführungszeichen. Auf dem Bildschirm erscheint also: Hallo Welt Anweisungen einrücken Semikolon am Ende einer jeden Anweisung

7 public class MainProgAufbau1 { public static void main (String[] args){ System.out.println("Hallo Welt"); } } println bedeutet, dass nach der Ausgabe auf dem Bildschirm der Kursor einen Zeilenvorschub macht, d.h der Kursor steht auf der nächsten Zeile in der ersten Spalte. public static void main (String[] args){ in eine Zeile schreiben. Aus Platzgründen wurden hier 2 Zeilen benötigt.

8 public class MainProgAufbau1 { public static void main (String[] args){ System.out.println("Hallo Welt"); } } Den Parameter können wird für unsere Zwecke auch weglassen und nur schreiben: public static void main()

9 Ein Ein /Ausgabe - Programm:

10 import java.io.*; public class MainEingabe1 { public static void main(String[] args) throws IOException{ String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Text eingeben"); mystr = myinput.readLine(); System.out.println("Der Text heisst:"+mystr); } } Alles jeweils in eine Zeile. Hier ist es aus Platzgründen nicht möglich.

11 import java.io.*; public class MainEingabe1 { public static void main(String[] args) throws IOException{ String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Text eingeben"); mystr = myinput.readLine(); System.out.println("Der Text heisst:"+mystr); } } Einige Bezeichnungen werden erst sehr viel später erklärt und müssen jetzt einfach so hingenommen und akzeptiert werden. Ein paar Bezeichnungen werden allerdings hier jetzt schon geklärt...

12 import java.io.*; public class MainEingabe1 { public static void main(String[] args) throws IOException{ String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Text eingeben"); mystr = myinput.readLine(); System.out.println("Der Text heisst:"+mystr); } } Deklarationsteil = Zutaten Typ Variablenname Variable Anweisungsteil = Zubereitung Einzelne Anweisungen im Anweisungsteil (enden mit einem Semikolon)

13 import java.io.*; public class MainEingabe1 { public static void main(String[] args) throws IOException{ String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Text eingeben"); mystr = myinput.readLine(); System.out.println("Der Text heisst:"+mystr); } } Der Typ String bedeutet, dass die Variable Zeichenketten speichert.

14 import java.io.*; public class MainEingabe1 { public static void main(String args[]) throws IOException{ String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Text eingeben"); mystr = myinput.readLine(); System.out.println("Der Text heisst:"+mystr); } } Kurz (näheres viel später): Im Anweisungsteil wird ein sogenanntes Objekt (mit dem vom Programmierer frei gewählten Namen myinput) des Typs BufferedReader erzeugt. Da dieser Typ dem Compiler unbekannt ist, muss er "importiert" werden. Die Methode (Unterprogramm) readline speichert die über Tastatur eingegebene Zeichenkette in der Variablen mystr. Es wird auf dem Bildschirm die Zeichenkette Der Text heisst: ausgegeben UND der Wert der Variablen mystr

15 Elemente des Rumpfs :

16 ... int z; String mystr; int b,c,d;... Variable Typ: int int ist Abkürzung für integer (bedeutet ganze Zahl) Der Variablenname soll selbstsprechend bzw. selbsterklärend sein. Also sollte man z.B. eine Variable, die die Breite eines Rechtecks speichert auch breite nennen und NICHT wie hier (aus Platzgründen) nur mit einem Buchstaben benennen ! mehrere Variablen können auch durch Kommata getrennt werden. Aber am Ende muss ein Semikolon kommen. Der Typ gibt an, welche Werte (z.B. ganze Zahlen) eine Variable annehmen kann.

17 ... int z; String mystr; int b,c,d;... Primitiver Datentyp Klassentyp Es gibt verschiedene Typen: - primitive (elementare) Datentypen (z.B. ganze Zahlen), - Klassentypen (z.B. String) näheres später

18 ... int z=123; int a; int b,c,d;... z wird mit dem Wert 123 initialisiert. Eine Variable kann deklariert und gleichzeitig auch initialisiert (vorbelegt) werden

19 Eine Variable kann w ä hrend des Programmlaufs unterschiedliche Werte annehmen. Eine Variable muss vor ihrer Verwendung im Deklarationsteil vereinbart werden. Eine Variable hat einen Namen und einen Typ. Variable sind Daten mit folgenden Eigenschaften:

20 Unter einer Variablen kann man sich einen Behälter vorstellen. In diesem Behälter wird ein Wert gespeichert (z.B. eine bestimmte Menge Flüssigkeit). Diese Menge bleibt solange konstant in diesem Behälter, solange sie nicht verändert wird. Diese Eigenschaft nennt man speichern. Es "verdunstet" deshalb auch nichts.

21 Bitte folgende Regel einhalten: Anfangsbuchstabe eines Variablennamens immer klein schreiben. Dies ist dem Compiler zwar egal, doch an diese Regel halten sich alle Programmierer.

22 Ein weiteres Ein /Ausgabe - Programm:

23 import java.io.*; public class MainEingabe1 { public static void main(String args[]) throws IOException{ String mystr; int z; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); // gleich geht es weiter Hier wird noch die Variable z deklariert. Dies ist ein Kommentar, der vom Compiler ignoriert wird und nur für den Programmierer wichtig ist. Er beginnt mit // und gilt für die ganze Zeile

24 import java.io.*; public class MainEingabe1 { public static void main(String args[]) throws IOException{ String mystr; int z; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); // gleich geht es weiter z ist nicht selbsterklärend. Bitte einen selbstsprechenden Variablennamen wie z.B. zahl verwenden (hier fehlt leider der Platz!).

25 z=Integer.parseInt(mystr); z=z*z; System.out.println("Das Quadrat ist" +z); } } Die Methode parseInt macht aus der Zeichenkette mystr eine ganze Zahl. Diese wird in z gespeichert. Es wird auf dem Bildschirm die Zeichenkette "Das Quadrat ist" ausgegeben UND der Wert der Variablen z Zuweisungsoperation (Näheres in der übernächsten Folie)

26 System.out.println("z=+z"); z=+z Frage: Was gibt die folgende Anweisung auf dem Bildschirm aus ? Der Compiler erkennt das z nicht als eine Variable, sondern als einen normalen Buchstaben ! Er gibt die komplette Zeichenkette (also alles was sich zwischen den Anführungszeichen befindet) auf dem Bildschirm aus.

27 Zuweisungsoperation : Der Variablen links des Gleichheitszeichens = wird der Wert rechts des Gleichheitszeichens zugewiesen. LEIDER benutzt der Entwickler der Programmiersprache Java statt des Zeichens := das Gleichheitszeichen, obwohl es sich...

28 um eine Zuweisung und nicht um eine Gleichheit handelt. Dem Entwickler der Programmiersprache Java ist dies offensichtlich egal. Die Syntax gibt er vor und das Gleichheitszeichen hat bei ihm die Semantik von :=

29 Beispiele: y=10; z=y; z=y+2; y=z; z=z+1; Dynamische Entwicklung der Inhalte der Variablen y und z: 10?yz 12 13

30 Die Ausführung der Anweisungen des letzten Ein- bzw. Ausgabeprogramms detailliert erklärt:

31 Was bewirken die einzelnen Anweisungen des gerade vorgestellten Programms ? System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); z = z * z ; System.out.println ("Das Quadrat ist:"+z); z=Integer.parseInt(mystr);

33 Was bewirkt also: Das Programm hält an und der Benutzer muss über Tastatur eine ganze Zahl eingeben und mit dem Drücken der Return-Taste diese Eingabe beenden (erst dann macht das Programm weiter). Die eingegebene Zahl wird in der Variablen z gespeichert. Wir nehmen hier an, dass der Benutzer die Zahl 5 eingegeben hat. mystr = myinput.readLine();

34 Was bewirkt also: Die über Tastatur eingegebene Zeichenkette (z.B. 1234) wird in die dazugehörige Zahl 1234 umgewandelt und in der Variable z mit dem Datentyp integer gespeichert. z=Integer.parseInt(mystr);

35 Was bewirkt also: z = z * z; Der Wert der Variablen z (hier also 5) wird mit sich selbst multipliziert (ergibt hier also 25) und wiederum in der Variablen z abgespeichert. Der Wert der Variablen z ist hier also vor der Ausführung der Anweisung 5 und nach der Ausführung 25.

36 Was bewirkt also: Es wird folgendes auf dem Bildschirm ausgegeben: System.out.println ("Das Quadrat ist:"+z); Das Quadrat ist: 25

37 Aufgabe: Ein Schreiner will von einer rechteckigen Holzplatte den Flächeninhalt und den Umfang (für die Umleimer) bestimmen. Schreiben Sie dazu ein Programm.

38 import java.io.*; public class Maintest1{ public static void main(String args[]) throws IOException{ int l; // Länge int b; // Breite // nicht so gut (keine Dokumentation): int u,f; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Länge eingeben"); alles in der gleichen Zeile rechts von // wird als Kommentar aufgefasst und vom Compiler nicht berücksichtigt.

39 mystr = myinput.readLine(); l=Integer.parseInt(mystr); System.out.println("Bitte Breite eingeben"); mystr = myinput.readLine(); b=Integer.parseInt(mystr); u=2*(l+b); f=l*b; System.out.println("Umfang="+u+ "Fläche="+f); } } Angenomen, der Anwender gibt für die Breite den Wert 3 und für die Länge den Wert 4 ein. Wie sieht dann die Bildschirmausgabe aus? Umfang=14Fläche=12

40 mystr = myinput.readLine(); l=Integer.parseInt(mystr); System.out.println("Bitte Breite eingeben"); mystr = myinput.readLine(); b=Integer.parseInt(mystr); u=2*(l+b); f=l*b; System.out.println("Umfang="+u+ "Fläche="+f); } } Was müsste man an der Anweisung ändern, damit die folgende, optisch ansprechendere Bildschirmausgabe erzeugt wird? Umfang=14 Fläche=12

41 mystr = myinput.readLine(); l=Integer.parseInt(mystr); System.out.println("Bitte Breite eingeben"); mystr = myinput.readLine(); b=Integer.parseInt(mystr); u=2*(l+b); f=l*b; } }

42 mystr = myinput.readLine(); l=Integer.parseInt(mystr); System.out.println("Bitte Breite eingeben"); mystr = myinput.readLine(); b=Integer.parseInt(mystr); u=2*(l+b); f=l*b; System.out.println("Umfang="+u+ " Fläche="+f); } } Hier werden noch 2 Leerzeichen ausgegeben.

43 mystr = myinput.readLine(); l=Integer.parseInt(mystr); System.out.println("Bitte Breite eingeben"); mystr = myinput.readLine(); b=Integer.parseInt(mystr); u=2*(l+b); f=l*b; } } Was würden alternativ diese 2 Anweisungen ausgeben? Umfang=14 Fläche=12 Begründung: Nach jeder Ausgabe kommt ein Zeilenumbruch (println) System.out.println("Umfang="+u"); System.out.println("Fläche="+f");

44 Bei neueren Java-Versionen wird die Eingabe (mit Hilfe der Klasse Scanner) einfacher:

45 import java.io.*; import java.util.Scanner; public class MainEingabeScanner1{ public static void main() { int i1, i2; String s1, s2; Scanner tastatur = new Scanner(System.in); s1 = tastatur.next(); s2 = tastatur.next(); i1 = tastatur.nextInt(); i2 = tastatur.nextInt(); } } Mit der Methode next kann man eine Zeichenkette über Tastatur eingeben. Mit der Methode nextInt kann man eine ganze Zahl über Tastatur eingeben In eine Zeile schreiben (hier aus Platzmangel unmöglich)

46 Programmieren Sie das Schreinerei-Programm mit Hilfe der Klasse Scanner.

47 import java.io.*; import java.util.Scanner; public class MainSchreinerei2{ public static void main(String[] args){ int breite; int laenge; int umfang; int flaeche; Scanner tastatur = new Scanner(System.in); System.out.println("Breite eingeben"); breite = tastatur.nextInt(); In eine Zeile schreiben (hier aus Platzmangel unmöglich)

48 System.out.println("Länge eingeben"); laenge = tastatur.nextInt(); umfang = 2*(laenge+breite); flaeche = laenge*breite; System.out.println("Umfange=" +umfang); System.out.println("Fläche= " +flaeche); } } In eine Zeile schreiben (hier aus Platzmangel unmöglich)

49 Frage: Was ist der Nachteil dieser zweier Programme ? Antwort: Es können nur ganzzahlige Werte eingegeben werden.

50 Wir machen deshalb einen kleinen Ausflug:

51 1 Byte =8 Bit

52 Wie viele Zustände kann man mit 1 Byte darstellen ?

53 Zu schwierig ? Also beginnen wir mit einem Bit

54 Wie viele Zustände kann man mit 1 Bit darstellen ? 1 0 und also, Anzahl der Zustände:2 * 1 = 2

55 Wie viele Zustände kann man mit 2 Bit darstellen ? 0 0 und also, Anzahl der Zustände:2 * 2 = 4 Also insgesamt

56 Wie viele Zustände kann man mit 3 Bit darstellen ? 0 0 und 0 also, Anzahl der Zustände:2 * 4 = Möglichkeiten Möglichkeiten 2 * 2 * 2 = 8 Also insgesamt

57 Wie viele Zustände kann man mit 8 Bit darstellen ? 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 8 = 256

58 Wie viele Zustände kann man mit 2 Byte darstellen ? 2 16 = Byte = 16 Bit also:

59 Wie viele Zustände kann man mit 4 Byte darstellen ? 2 32 = Byte = 32 Bit also:

60 Wie kann man dies schnell näherungsweise ausrechnen ?

61 2 10 = = 10 3, also also: = 2 10 · 2 = (2 10 ) 2 (10 3 ) 2 = 10 6 also: = 2 10 · 3 = (2 10 ) 3 (10 3 ) 3 = 10 9 also: = 2 10 · 4 = (2 10 ) 4 (10 3 ) 4 = also:

62 Weitere Maßeinheiten für (große) Datenmengen:

63 10 3 Byte = 1 Kilobyte = 1 KB 10 6 Byte = 1 Megabyte = 1 MB 10 9 Byte = 1 Gigabyte = 1 GB Byte = 1 Terabyte = 1 TB Byte = 1 Petabyte = 1 PB Byte = 1 Exabyte = 1 EB Byte = 1 Zettabyte = 1 ZB Byte = 1 Yottabyte = 1 YB

64 Wie kann man schnell näherungsweise ausrechnen, wie viele Zustände man mit 2 Byte bzw. 4 Byte darstellen kann, d.h. wie gross ist 2 16 und 2 32 ?

65 2 16 = = 2 6 · 2 10 = 64 · · 10 3 also: = = 2 2 · 2 30 = 4 · · 10 9 also:

66 Zurück zum primitiven (elementaren, einfachen) Datentyp:

67 import java.io.*; public class MainTest { public static void main(){ int z;... } Primitiver (elementarer) Datentyp

68 Der primitive (einfach, elementar) Datentyp einer Variablen legt fest, welche Werte eine Variable annehmen darf und in welchem Wertebereich sich diese Werte befinden dürfen. Dieser Wertebereich hängt von der Anzahl der Bytes ab, in denen die Variable gespeichert wird.

69 Ganzzahlige Datentypen Diese können dargestellt werden durch:

70 Datentyp byte Länge: 1 Byte Wertebereich: -2^7...+2^7-1, also Zahlen auf positiven und negativen Bereich aufgeteilt ^ bedeutet hoch

71 Datentyp short Länge: 2 Byte Wertebereich: -2^ ^16-1, also Zahlen auf positiven und negativen Bereich aufgeteilt

72 Datentyp int Länge: 4 Byte Wertebereich: -2^ ^32-1, also Zahlen auf positiven und negativen Bereich aufgeteilt

73 Datentyp long Länge: 8 Byte Wertebereich: -2^ ^63-1, also

74 Datentyp char Länge: 2 Byte Wertebereich: 0...2^16-1, also

75 Alle Unicode-Zeichen, z.B: A 0041 (hexadezimal) Die ersten 128 Zeichen des Unicode entsprechen den ersten 128 Zeichen des ASCII-Zeichensatzes.

76 Warum braucht man Unicode bzw. ASCII-Code?

77 Zeichen Ein Computer kann nur Zahlen speichern, keine Zeichen. Damit ein Zeichen gespeichert werden kann, wird ihm eine Zahl (ASCII- Wert) zugeordnet.

78 Da verschiedene Sprachen (z.B. chinesisch) sehr viele Zeichen besitzen und nicht im ASCII-Zeichensatz berücksichtigt werden, wurde ein neuer Zeichensatz definiert, der sogenannte Unicode.

79 Die ersten 256 Plätze im Unicode entsprechen dem Zeichensatz ISO Latein 1, wo auch der ASCII-Zeichensatz untergebracht ist.

80 Beispiele für Zeichen... char x; char y; x = 'c'; y = 'A'; y = '\u0041';... Was würde der Compiler sagen, wenn die zwei Hochkommata fehlen würden? Er würde c als Variable auffassen. Da diese aber nicht deklariert (angemeldet) wurde, gibt er eine Fehlermeldung aus. u steht für Unicode und die nachfolgende Zahl muss eine Hexadezimalzahl sein.

81 Beispiele für Zeichen... char x; char y; x = 'c'; y = 'A'; y = '\u0041';... Diese zwei Anweisungen machren also genau das Gleiche! Das ASCII-Zeichen des ASCII-Codes 41Hex ist nämlich A. Bitte nachschauen Mit Hilfe des Backslash (Gegenschrägstrich) kann man solche Ersatzdarstellungen realisieren.

82 Manchmal braucht man diese Ersatzdarstellungen (Fluchtzeichenfolgen oder Escape- Sequenzen), weil man damit Steuerzeichen, oder Zeichen, die nicht auf dem Eingabegerät (Tastatur) vorhanden sind, darstellen, kann, wie zum Beispiel...

83 \n führt Zeilenvorschub durch (new line) \t setzt Horizontaltabulator \v setzt Vertikaltaltabulator \b geht Mit dem Kursor ein Zeichen zurück (backspace) \r führt Wagenrücklauf durch (carriage return) \f führt Seitenvorschub durch (form feed) \a löst Klingelzeichen aus (Alarm) \' Hochkomma \" Anführungszeichen \\ Gegenschrägstrich (Backslash) \u.. Mit u wird eine Unicode-Ersatzdarstellung eingeleitet.

84 Gleitpunkt Datentypen Können dargestellt werden durch:

85 Fließkommazahlen (oder auch Gleitkommazahlen genannt) Können dargestellt werden durch :

86 Datentyp float Länge: 4 Byte Wertebereich: -10^ ^38 Genauigkeit: 7 Stellen

87 Datentyp double Länge: 8 Byte Wertebereich: -10^ ^308 Genauigkeit: 15 Stellen

88 Java wurde in den USA entwickelt. Im amerikanischen Sprachraum schreibt man in Kommazahlen statt des Kommas einen Punkt. Deshalb gilt für die Syntax...

89 Beispiele für Gleitkommazahlen:... double x; x = ; x = -4.67; x = 7.5e-23; x = E-45;... 7,5· , ,67

90 Funktioniert genauso für float:... float x; x = ; x = -4.67; x = -3.14e23; x = -E17;... -3,14· , ,67

91 Boolescher Datentyp wird dargestellt durch:

92 Datentyp boolean Länge: ? Wertebereich: true, false wird in der Logik verwendet (true – wahr, false – falsch)

93 Beispiele für boolsche Werte... boolean b1; boolean b2; b1 = true; b2 = false;...

94 Das EVA Prinzip

95 import java.io.*; public class MainEingabe1 { public static void main(String args[]) throws IOException{ String mystr; int z; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte Zahl eingeben"); mystr = myinput.readLine(); z=Integer.parseInt(mystr); Eingabe

96 Verarbeitung Ausgabe //... z=z*z; System.out.println("z="+z); } }

97 Aufgabe: Ersatzwiderstand von 2 parallel geschalteten Widerständen berechnen.

98 import java.io.*; public class Maintest2{ public static void main(String args[]) throws IOException{ double R1; double R2; double ersatz; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte 1. Widerstand eingeben"); // gleich geht es weiter... Variablennamen normalerweise groß schreiben. Da R1 und R2 aus Bezeichnungen aus der Physik sind, kann man es hier erlauben. Dem Compiler ist es zwar egal, doch sagt die Java-Community: Variablennamen groß schreiben.

99 mystr = myinput.readLine(); R1=Double.parseDouble(mystr); System.out.println("Bitte 2. Widerstand eingeben"); mystr = myinput.readLine(); R2=Double.parseDouble(mystr); ersatz=1/(1/R1+1/R2); System.out.println("Ers.widerstand=" +ersatz); }

100 Weitere Lösung

101 import java.io.*; public class Maintest2{ public static void main(String args[]) throws IOException{ double R1; double R2; double ersatz; String mystr; BufferedReader myinput = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte 1. Widerstand eingeben"); // gleich geht es weiter... Alles ist gleich wie in der letzten Lösung.

102 mystr = myinput.readLine(); R1=Double.parseDouble(mystr); System.out.println("Bitte 2. Widerstand eingeben"); mystr = myinput.readLine(); R2=Double.parseDouble(mystr); ersatz=1/R1+1/R2; System.out.println("Ers.widerstand=" +ersatz); } Alles ist immer noch gleich (bis auf eine Anweisung) wie in der letzten Lösung. Was fehlt aber noch ? ersatz = 1 / ersatz;

103 Frage: Wäre folgende Anweisung auch korrekt ? 1/ersatz = 1/R1 + 1/R2 Nein ! Links des Gleichheitszeichens darf nur genau eine Variable stehen !

104 Weiter mit: Aufgaben aus dem Übungsblatt lösen.


Herunterladen ppt "Programmier- sprache Java. Das einfachste Programm:"

Ähnliche Präsentationen


Google-Anzeigen