MezData-Logo Lösungen Button :JAVA: Datentypen

Aufgabe (String ausgeben)

Bei der Verarbeitung soll nun text der Wert "Hallo" zugewiesen werden.

Aufgabe (Zahl in text ausgeben)

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!

Variablen

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

Variablen-Typen

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).
Der Identifier ist das "Namensschild" des Fachs.

Initialisierung von Variablen

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!

Gleich einen Startwert zuweisen!

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

Allgemeine Form der Definition mit Initialiserung

<Typ> <Bezeichner> = <Initialwert>;

Ordnung ist das halbe Leben, zuerst die Variablen dann der Rest!

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:

Variablen müssen in Pascal und Delphi am Anfang definiert werden!

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... ;-)

Variablen sollten in C und Java am Anfang definiert werden!

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.

Variablentypen

public int ausgabe;     // Variable vom Typ int
public String text =""; // Variable vom Typ String
...
ausgabe = 17;
text = "Hallo";

Besonderheit bei Strings in Java

In Java sind Strings Objekte, eine Variable vom Typ String ist ein Verweis auf ein String-Objekt.

Definition

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:

  1. wieviel Speicher-Platz für die Variable gebraucht wird
  2. wie der Inhalt des Speicherplatzes zu interpretieren ist
  3. in welchem Kontext die Variable verwendet wird, z.B. zu welcher Klasse oder Funktion die Variable gehört,
    ob sie von aussen sichtbar ist -public.

Beispiele:

int i;
public int eingabe;

Initialisierung

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  = "";

Typkonvertierung

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();