Lernpfad:Würfelspiel in Java/Mit Strings arbeiten: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
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">
8.581

Bearbeitungen

Navigationsmenü