Strings und Zahlen (2)

Hin und her zwischen String und Zahl

Analog zur Umwandlungsmethode Integer.parseInt(), die wir auf der vorigen Seite kennen gelernt haben, gibt es die parse-Methode auch für andere Variablentypen, z.B. Double.parseDouble(), die Strings in Double-Zahlen verwandelt. Hier entstehen jedoch gewissen Konflikte, mit denen man sich irgendwann auseinandersetzen muss.

Die Scannermethode Eingabe.nextDouble() und die Ausgabemethode System.out.format() berücksichtigen die jeweiligen Ländereinstellungen des Computers. Das heißt, dass sie in Deutschland die Eingabe von Dezimalbrüchen mit Dezimalkomma erwarten und Dezimalbrüche mit Komma ausgeben.

Im Gegensatz dazu erwartet die Umwandlungsfunktion Double.parseDouble() als Argument einen String, in dem der Dezimalbruch mit Punkt geschrieben ist. Entsprechend gibt System.out.println() Dezimalbrüche mit Dezimalpunkt statt Komma aus.

Was ist zu tun? Zum Glück stellt die Klasse String die Methoden String.contains() und String.replace() zur Verfügung, mit der man jedes Vorkommen eines bestimmten Zeichens in einem String erkennen und das Zeichen leicht durch ein anderes Zeichen ersetzen kann. Wenn Sie auf die Eingabeaufforderung hin eine Zahl mit Punkt schreiben, kann Java direkt damit rechen. Geben Sie die Zahl mit Komma ein, so wird sie zum Rechnen umgewandelt und später zurückverwandelt.

Hier ein Beispielprogramm.


import java.util.*;
public class PunktUndKomma {
  public static void main(String[] args) {
    System.out.println("Punkt und Komma");
    Scanner Eingabe = new Scanner(System.in);
    boolean kommaErsetzt = false;
    System.out.print("\nGib bitte eine Kommazahl ein : ");
    String antwort = Eingabe.next();
    if (antwort.contains(",")) {
      antwort = antwort.replace(',','.');
      System.out.println("Ich ersetze Kommas durch Punkte: "+antwort);
      kommaErsetzt = true;
    }
    double zahl = Double.parseDouble(antwort);
    zahl = zahl/2;
    System.out.println("Die Hälfte von deiner Zahl ist : "+zahl);
    String ausgabe = String.valueOf(zahl);
    if (kommaErsetzt) {
      ausgabe = ausgabe.replace('.',',');
      System.out.println("Ich ersetze Punkte durch Kommas: "+ausgabe);
    }
  }
}


Aufgaben:

  1. Schreiben Sie ein Programm, das den Zeichensatz des Computers von (char) 32 bis (char) 255 ausgibt.
  2. Schreiben Sie ein Programm, das in einem eingegebenen Satz die Zeichen / die Wörter / die Vokale / die Umlaute zählt.
  3. Schreiben Sie ein Programm, das herausfindet, wie viele der 9000 Zahlen zwischen 1000 und 9999 "Dezimalpalindrome" sind, die vorwärts gelesen denselben Wert ergeben wie rückwärts gelesen.
  4. Schreiben Sie ein Programm, das herausfindet, wie viel Prozent der Zahlen zwischen 1 und 1000000 mindestens eine 7 enthalten.
  5. Fragen Sie nacheinander nach drei Ziffern. Sortieren Sie sie nach der Größe und fügen Sie sie zu einer möglichst großen Zahl zusammen. Testen Sie dann, ob die Zahl größer als 750 ist.
    Beispiel: Die Eingaben 3, 6, 1 werden zu 631 zusammengefügt, der Vergleich mit 750 ergibt, dass die Zahl zu klein ist.
  6. Schreiben Sie ein Programm, das untersucht, welche vierstellige Zahl abcd die Gleichung abcd = a^b*c^d erfüllt. (Hinweis: Produzieren Sie der Reihe nach alle vierstelligen Zahlen von 1000 bis 9999. Verwandeln Sie sie in eine String und zerlegen Sie sie mithilfe der Funktion String. charAt () in Tausender, Hunderter, Zehner und Einer.  Verwandeln Sie diese in Double-Werte und berechnen Sie mithilfe von Math.pow() den Wert a^b*c^d. Vergleichen Sie diesen mit der Zahl.)