Lernpfad:Würfelspiel in Java/Mit Strings arbeiten: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 15: | Zeile 15: | ||
{{Hint:Start}} | {{Hint:Start}} | ||
'''Hinweis''' Auf einem <code>int</code> können zum Beispiel keine Methoden aufgerufen werden, da Integer zunächst keine Objekte sind. Die Java Klassenbibliothek enthält aber auch für diese ''primitiven Datentypen'' eigene Klassen. Zum Beispiel die [https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html Klasse Integer]. Sie enthält unter anderem hilfreiche Klassenmethoden | '''Hinweis''' Auf einem <code>int</code> können zum Beispiel keine Methoden aufgerufen werden, da Integer | ||
zum Umgang mit Integern. | zunächst keine Objekte sind. Die Java Klassenbibliothek enthält aber auch für diese ''primitiven Datentypen'' | ||
eigene Klassen. Zum Beispiel die [https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html Klasse Integer]. | |||
Sie enthält unter anderem hilfreiche Klassenmethoden zum Umgang mit Integern. | |||
{{Hint:End}} | {{Hint:End}} | ||
Da Strings Objekte sind, kann es bei ihrer Verwendung zu unerwarteten Fehlern kommen. Ein häufiges Problem ist der | |||
Vergleich von Strings: | |||
<syntaxhighlight lang="java" line="1"> | |||
String s1 = "Test"; | |||
String s2 = "Test"; | |||
if( s1 == s2 ) { | |||
System.out.println("Die Strings sind gleich."); | |||
} else { | |||
System.out.println("Die Strings sind unterschiedlich."); | |||
} | |||
</syntaxhighlight> | |||
Im Gegensatz zur Erwartung wird <code>Die Strings sind unterschiedlich.</code> ausgegeben. Der Operator <code>==</code> | |||
vergleicht bei Objekten die Objektidentität, also obe es sich um das Gleiche Objekt handelt. Oben werden zwei Objekte der Klasse | |||
String mit demselben Inhalt <code>Test</code> erzeugt. Da es sich aber um unterschiedliche Objekte handelt, ergibt der Vergleich | |||
<code>false</code>. | |||
Statt dessen sollte zum Vergleich der Inhalte - also der Zeichenketten - die Methode [https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#equals-java.lang.Object- String#equals(String)] verwendet werden. | |||
<syntaxhighlight lang="java" line="1"> | |||
if( s1.equals(s2) ) { | |||
System.out.println("Die Strings sind gleich."); | |||
} else { | |||
System.out.println("Die Strings sind unterschiedlich."); | |||
} | |||
</syntaxhighlight> | |||
Jetzt ist die Ausgabe wie erwartet <code>Die Strings sind gleich.</code>. | |||
== Strings formatieren == | == Strings formatieren == | ||
Zeichenketten müssen in Programmen sehr häufig zur Laufzeit des Programms aus variablen Inhalten zusammengesetzt werden. Am Ende des Würfelspiels könnte man zum Beispiel die Nachricht ''"Spieler 1 hat gewonnen"'' bzw. ''"Spieler 2 hat gewonnen"'' anzeigen lassen. Die Nummer des Spielers ist hier variabel, je nachdem, welcher Spieler gewonnen hat. Noch schöner wäre es, wenn zusätzlich der Name des Spielers angezeigt würde. | Zeichenketten müssen in Programmen sehr häufig zur Laufzeit des Programms aus variablen Inhalten zusammengesetzt | ||
werden. Am Ende des Würfelspiels könnte man zum Beispiel die Nachricht ''"Spieler 1 hat gewonnen"'' bzw. ''"Spieler 2 | |||
hat gewonnen"'' anzeigen lassen. Die Nummer des Spielers ist hier variabel, je nachdem, welcher Spieler gewonnen hat. | |||
Noch schöner wäre es, wenn zusätzlich der Name des Spielers angezeigt würde. | |||
Um mit solchen Situationen umzugehen haben sich Zeichenketten mit besonderen Formatierungszeichen und die [https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...- format-Methode] etabliert. | Um mit solchen Situationen umzugehen haben sich Zeichenketten mit besonderen Formatierungszeichen und die | ||
Für obige Situation könnte der String wie folgt aussehen: | [https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...- format-Methode] | ||
etabliert. Für obige Situation könnte der String wie folgt aussehen: | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Zeile 29: | Zeile 63: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Die Formatierungszeichen beginnen jeweils mit einem <code>%</code>. Das Zeichen <code>%d</code> steht für '''''d'''ecimal number'', das Zeichen <code>%s</code> für '''''S'''tring''. An Stelle des ersten Platzhalters soll also eine Zahl (in diesem Fall eine Ganzzahl), an Stelle des Zweiten eine | Die Formatierungszeichen beginnen jeweils mit einem <code>%</code>. Das Zeichen <code>%d</code> steht für '''''d'''ecimal | ||
Zeichenkette eingesetzt werden. Mittels <code>format</code> kann man nun beliebige Werte einfügen: | number'', das Zeichen <code>%s</code> für '''''S'''tring''. An Stelle des ersten Platzhalters soll also eine Zahl (in diesem Fall | ||
eine Ganzzahl), an Stelle des Zweiten eine Zeichenkette eingesetzt werden. Mittels <code>format</code> kann man nun | |||
beliebige Werte einfügen: | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Zeile 38: | Zeile 74: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Doch die Formatierungsmöglichkeiten gehen noch weiter als bloßes ersetzen. Soll zum Beispiel der Punktestand der Spieler als Rangliste angezeigt | Doch die Formatierungsmöglichkeiten gehen noch weiter als bloßes ersetzen. Soll zum Beispiel der Punktestand der Spieler als | ||
werden, dann müssen die Punktzahlen passend untereinander stehen (rechtsbündig). Dazu könnte man die Punktzahlen nach links mit Nullen auffüllen, | Rangliste angezeigt werden, dann müssen die Punktzahlen passend untereinander stehen (rechtsbündig). Dazu könnte man | ||
bis alle Punktzahlen gleich viele Zeichen haben. | die Punktzahlen nach links mit Nullen auffüllen, bis alle Punktzahlen gleich viele Zeichen haben. | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> |