"" in java, Zahlendreieck

barca_best_club

Cadet 2nd Year
Registriert
Aug. 2018
Beiträge
19
Hallo!
Ich bin Anfänger in Java und lerne gerade Wiederholungsstrukturen (konkret while - Schleifen). Es in der jetzigen Aufgabe ein Programm entwickelt werden, welches ein Zahlendreieck anzeigt:
0
0 1
0 1 2

0 1 2 3 4 5 6 7 8 9
Lösung:
Java:
/* Zahlendreieck mit while-Schleife
 * @author Hans-Peter Habelitz
 * @date 2011-12-11
 */
public class ZahlendreieckWhile {

    public static void main(String[] args) {
    int zahl = 0;
    String ausgabe = "";

    while (zahl < 10) {
        ausgabe = ausgabe + zahl;
        System.out.println(ausgabe);
        zahl++;
    }
    }

}
Ich habe mir zu dieser Aufgabe jetzt die Lösung angeschaut, und muss fragen: Was bedeutet in Zeile 9 dieses ... = "" ? Ich habe das Zeichen nicht in dem Buch gefunden und auch eine Google - Recherche ergab (zu meinem Erstaunen) leider kein Ergebnis.
Und: Wieso werden ausgabe und ausgabe + zahl gleichgesetzt? Das ergibt weder mathematisch noch logisch Sinn für mich. Vielleicht ist das " " der Schlüssel dazu?
 
Guten Abend :)

Dein String "ausgabe" enthält eine Zeichenkette bzw. in deinem Fall übergibst du in der Schleife der Variable "ausgabe" eine Zahl.

Diese wird anschließend über den System.out.println - Befehl ausgegeben und das auch bis die Zahl 10 erreicht wird. Das "" welches der Variable "ausgabe" zugewiesen wird, ist in dem Fall nur ein Platzhalter. Du könntest Da genauso gut "I" oder "Hallo" eintragen, dann würde vor der Zahlenkette eben ein "Hallo" stehen.

Da der Wert deines Strings nicht leer sein darf oder eine andere Wertigkeit als eine Zeichenkette annehmen darf, steht bei der Zuweisung auf die von dir deklarierte Variable ausgabe das ""; .

Ich hoffe ich konnte dir damit etwas helfen :)
 
"" ist ein leerer Text.
= ist keine mathematische Funktion, sondern eine Zuweisung. Es bedeutet: Nehme das was rechts steht und speichere das Ergebnis in der Variable auf der linken Seite ab. Die rechte Seite wird zuerst ausgeführt.
 
  • Gefällt mir
Reaktionen: psYcho-edgE
Hi,
"" steht für einen leeren String (also nicht einfach nur Null-Wert).

Der Plus-Operator ist für den String überladen, d.h. er hat eine andere Bedeutung als mathematisch addieren. Hier bedeutet er verknüpfen/anhängen.

Quasi: String + int; ausgabe + i; Leerstring + i;
Java sieht hier String plus int und stellt fest, dass der int-Wert noch implizit in seine String-Repräsentation gewandelt werden muss, sodass String + String am Ende bei rauskommt.

So kurz umrissen in aller Kürze.

Google mal nach "Operatorüberladung String Java".

Grüße

Anmerkung: Überladung ist hier in Java der technisch falsche Begriff. Führt dich aber zu Quellen, die das ganz gut erklären. + ist für String ein definierter Operator.
 
Der Operator "=" weißt einer variable einen Wert zu. In Zeile zum Beispielt wird ein Integer definiert und zeitlich der initiale Wert "0" zugewiesen.

So in Zeile 12 passiert jetzt ein bisschen mehr als nur die Zuweisung eines Wertes für die String variable "ausgabe". Der Operator "+" verknüpft hier den aktuellen Wert der Variable "ausgabe" mit dem Wert der Variable "zahl" (ACHTUNG: Hier finden eine Konvertierung des Datentyps von "int" auf "String" statt). Mit jedem Zeilen durchlauf hängst du also eine neue zahl an, da in Zeile 14 der WErt von "zahl" immer um eins erhöhrt wird (Der Operator ++ bei "zahl++" könnte man auch als "zahl = zahl + 1" schreiben).

Wie über mir schon geschrieben wurde steht "" in Zeile 9 für die Zuweisung eines leeren Strings. Dazu einfach mal den Unterschied zwischen "null" und leerer String googlen. Würde man keinen leeren String zuweißen, dann würde Zeile 12 eine Fehlermeldung liefern. Glaub ich zumindest ^^
 
barca_best_club schrieb:
Was bedeutet in Zeile 9 dieses ... = "" ?
Das Gleichzeichen ist nur das Zuweisungsoperator. Und die beiden Anführungszeichen bedeuten einfach ein leerer String, also eine leere Zeichenfolge. Du könntest auch schreiben:
Code:
String ausgabe = new String();
Es gibt aber technisch einen Unterschied.
barca_best_club schrieb:
Wieso werden ausgabe und ausgabe + zahl gleichgesetzt? Das ergibt weder mathematisch noch logisch Sinn für mich. Vielleicht ist das " " der Schlüssel dazu?
Java erlaubt es Strings mit int zu Konkatenieren (Aneinanderhängen). Zahlen werden in diesem Fall in einen String umgewandelt.

Die Aufgabe ist übrigens ein sehr schlechtes Beispiel. Bei String Konkatenation innerhalb von Schleifen sollte man grundsätzlich den StringBuilder verwenden.
 
In Zeile 8 und 9 werden die Variablen initialisiert.
In Zeile 12 wird der Variable ausgabe das Ergebnis der Addition von ausgabe und zahl zugewiesen.

Die While-Schleife wird also so lang durchlaufen, so lang zahl kleiner als 10 ist. Nachdem zahl bei jedem Durchlauf in Zeile 14 um 1 erhöht wird, also 10 mal.
 
Nochmal ob ich es richtig verstanden habe: In Zeile 12 wird also der (in dem Durchlauf neuen) Variable ausgabe sowohl die "alte" ausgabe" vom vorigen durchlauf als auch die neue zahl, also die alte ausgabe + 1 zugewiesen? Und die alten Ausgaben außer der letzten (und damit das "Dreieck") werden immer mit angezeigt, weil diese immer in jeder neuen Wiederholung mit an den String ausgabe angehängt wurden?
 
Hey.
Irgendwie tue ich mir schwer deine Beschreibung zu verstehen - langer Tag meinerseits. ;) Aber ich glaube du hast recht. Manchmal hilft es einfach mit einem Stift aufzuschreiben, welche Werte die Variablen so haben. :)

Nach Durchlauf #intial1234
ausgabe"""0""01""012""0123"...
zahl01234...

Java:
// Erster Durchlauf
while (0 < 10) {
    ausgabe = "" + 0;
    zahl++;
}

Java:
// Zweiter Durchlauf
while (1 < 10) {
    ausgabe = "0" + 1;
    zahl++;
}

Java:
// Dritter Durchlauf
while (2 < 10) {
    ausgabe = "01" + 2;
    zahl++;
}

Java:
// Vierter Durchlauf
while (3 < 10) {
    ausgabe = "012" + 3;
    zahl++;
}
 
barca_best_club schrieb:
Nochmal ob ich es richtig verstanden habe: In Zeile 12 wird also der (in dem Durchlauf neuen) Variable ausgabe sowohl die "alte" ausgabe" vom vorigen durchlauf als auch die neue zahl, also die alte ausgabe + 1 zugewiesen?
Die Variable ausgabe ist nicht neu. Diese wird ja in Zeile 9 instantisiert. Es wird lediglich die zahl immer an den vorherigen String angehangen.
 
Zurück
Oben