Bei der Verarbeitung soll nun text der Wert "Hallo" zugewiesen werden.
Weise ausgabe den Wert 17 zu. Compiliere und teste!
Weise text nun den Wert 17 zu. Compiliere und teste!
Warum geht das nicht, welche Fehlermeldung gibt der Compiler aus?
Weise text den Wert "17" zu. Compiliere und teste!
Hinweis: Das folgende Kapitel ist aus dem C++ Corner entnommen, in Java gibt es kein "cout << " daher können die Übungen so nicht nachvollzogen werden,
die Prinzipien gelten jedoch auch für Java!
Man stelle sich vor, der Speicher des Computers sei ein Einsortierungskasten:
Aufgabe: Hier hast du 2 Euro, lege den Wert in das Fach mit deinem Namen! In diesem Beispiel heisst du Erna. Was muss getan werden? |
|||||
Definition einer Variable (Veränderbaren)Das Fach muss erst beschriftet und angelegt werden, das nennt man deklarieren: int erna; // Definition von erna Der Wert 2 wird in das Fach gelegt, zugewiesen: erna = 2; // erna den Wert 2 zuweisen Einer Variablen einen Startwert zuweisen nennt man auch initialisieren. Der Wert von erna ist nun 2, erna hat den Wert 2, der Wert 2 wurde in der Variablen erna gespeichert. Wie kann der Wert einer Variablen wieder ausgelesen werden? Einfach Variable aufrufen: ausgabe = erna; // den Wert von erna auslesen |
|||||
Job: Erstelle ein Projekt mit dem Namen eva-prinzip, dessen main-Funktion folgende Anweisungen enthält:
int erna; // Definition von erna erna = 2; // erna den Wert 2 zuweisen cout << "Erna hat " << erna << " Euro" << endl; // den Wert von erna ausgeben
Ismael ist ein ganz Genauer, deshalb schleppt er auch immer seinen Taschenrechner mit sich rum, er will nun ein Fach für seinen Taschenrechner im Speicher!
Passt so ein Taschenrechner in ein Euro-Fach wie es Erna hat? Für Ismael muss also ein anderer Typ Fach definiert werden, ein Typ für grosse und genaue Werte (double): double ismael; // Definition von ismael Ismael hat auch nicht einfach einen Taschenrechner sondern genau 1.0 Taschenrechner gelle! ismael = 1.0; // ismael den Wert 1.0 zuweisen Der Wert der Variablen wird allerdings genauso einfach wie bei Erna ausgegeben: cout << ismael; // den Wert von ismael ausgeben |
|||
Job: Erweitere das Projekt für Ismael:
double ismael; // Definition von ismael ismael = 1.0; // ismael den Wert 1.0 zuweisen cout << "Ismael hat genau " << ismael << "Taschenrechner" << endl; // den Wert von ismael ausgeben
Für verschiedene Typen von Daten braucht man verschieden grosse Fächer, d.h. verschieden viel Speicher, bei der Definition muss also gleich bekannt gegeben werden welchen Typ die Variable hat, damit der Compiler weis wieviel Speicher er reservieren soll.
Woher weis der Compiler beim Ausgeben das Ismael ein ganz Genauer ist? Durch die Typangabe bei der Definition weis der Compiler ausserdem wie der Wert in dem Fach zu interpretieren ist, bei einem double-Fach sollen auch die Nachkommastellen ausgegeben werden. Siehe Darstellungen von Daten in digitalen Systemen... Allgemeine Form einer Definition<Typ> <Bezeichner>; Definitionen bestehen aus einer Typangabe und einem Bezeichner (engl. Identifier). |
Welchen Wert hat eigentlich ein Fach dem noch nichts zugewiesen wurde?
Man stelle sich vor, das Fach wurde definiert aber es wurde noch kein Wert zugewiesen, was da wohl drin ist?
Job: Kommentiere die Zuweisungen der Werte von erna und ismael im Projekt aus, welche Werte werden ausgegeben?
Erkenntnis: Beim Definieren werden die Fächer in C nicht automatisch ausgeräumt und leer gemacht, da ist eventuell noch das Zeugs vom Vorbesitzer drin!
Da in dem Fach alles Mögliche sein kann ist es sinnvoll gleich bei der Definition einen Wert zuzuweisen, das nennt man initialisieren (Startwert zuweisen):
int erna = 2; // Definition und Initialiesierung von erna mit 2 double ismael = 1.0; // Definition und Initialisierung von ismael mit 1.0
<Typ> <Bezeichner> = <Initialwert>;
C und Java erlauben auch mitten zwischen Anweisungen neue Variablen einzuführen, zu deklarieren. In Pascal oder Delphi würde das eine Fehlermeldung ergeben, denn dort gilt:
Es ist daher empfehlenswert und guter Stil die verwendeten Variablen am Anfang zu definieren und gleich zu initialisieren.
Tückischerweise gehen unterschiedliche Programmiersprachen auch unterschiedlich mit diesem Thema um -eine prima Ursache von Fehlern und stundenlanger Fehlersuche...
In Delphi werden z.B. frisch deklarierte Variablen automatisch mit 0 initialisiert, blöd wenn man sich daran gewöhnt hat und dann C++ schreiben soll... ;-)
Info: Der Ort, an dem eine Variable deklariert wird bestimmt ausserdem den Kontext, ihren Gültigkeitsbereich, dazu mehr bei Funktionen, Klassen und Methoden..
Ab hier wieder in Java nachvollziehbar.
public int ausgabe; // Variable vom Typ int public String text =""; // Variable vom Typ String ... ausgabe = 17; text = "Hallo";
In Java sind Strings Objekte, eine Variable vom Typ String ist ein Verweis auf ein String-Objekt.
Bevor eine Variable verwendet werden kann muss sie Definiert werden, d.h. dem Compiler bekannt gemacht werden.
Dabei sind für den Compiler drei Informationen wesentlich:
Beispiele:
int i; public int eingabe;
Wird einer Variablen zum ersten Mal ein Wert zugewiesen spricht man auch von der Initialisierung der Variablen.
Beispiel für Definition und Initialisierung:
int i = 0; String text = "";
Problem: Wie kann eingabe in text ausgegeben werden? (Eine int-Zahl in einen String umgewandeln)
Lösung: Arbeiter anderer Klasse zu Hilfe nehmen!
km= Integer.valueOf(textField1.getText()).IntegerValue();