Die Klassen Math und String: Unterschied zwischen den Versionen

Aus ComeniusWiki
Wechseln zu: Navigation, Suche
(Die Klasse String)
(Die Klasse String)
 
Zeile 203: Zeile 203:
 
==Die Klasse ''String''==
 
==Die Klasse ''String''==
  
Der Datentyp '''String''' ist in Java kein einfacher Datentyp wie etwa ''int'' oder ''double'' oder ''boolean'', sondern eine Klasse. Eine Variable vom Typ String enthält daher nicht den String selbst, sondern sie enthält einen Verweis auf ein Objekt der Klasse String. Eine wichtigsten Konsequenzen aus dieser Tatsache ist, dass Strings nicht mit dem Vergleichsoperator == verglichen werden können, denn der Vergleichsoperator prüft, ob die Verweise gleich sind und nicht, ob die Strings gleich sind, auf die verwiesen wird. Daher stellt die Klasse ''String'' eigens eine Methode ''equals()'' zu Verfügung, die diese Aufgabe erledigt. Daneben gibt es noch viele weitere interessante Methoden zum Umgang mit Zeichenketten.
+
Der Datentyp '''String''' ist in Java kein einfacher Datentyp wie etwa ''int'' oder ''double'' oder ''boolean'', sondern eine Klasse. Eine Variable vom Typ String enthält daher nicht den String selbst, sondern sie enthält einen Verweis auf ein Objekt der Klasse String. Genau genommen ist ein String ein Array von Zeichen (Datentyp ''char''). Folgende Darstellungsweisen drücken daher dasselbe aus:
 +
 
 +
String s = "Hallo";
 +
 
 +
char[] s = {'H', 'a', 'l', 'l', 'o'};
 +
 
 +
Eine wichtigsten Konsequenzen aus dieser Tatsache ist, dass Strings nicht mit dem Vergleichsoperator == verglichen werden können, denn der Vergleichsoperator prüft, ob die Verweise gleich sind und nicht, ob die Strings gleich sind, auf die verwiesen wird. Daher stellt die Klasse ''String'' eigens eine Methode ''equals()'' zu Verfügung, die diese Aufgabe erledigt. Daneben gibt es noch viele weitere interessante Methoden zum Umgang mit Zeichenketten, in denen der Array-Charakter von String-Objekten deutlich wird.
  
  

Aktuelle Version vom 17. März 2016, 09:53 Uhr

Eine der großen Stärken von Java sind vordefinierte Klassen, die in einer Bibliothek bzw. einem package mitgeliefert werden. Typische Beispiele für solche vordefinierten Klassen sind die Klassen Math und String, die beide im package java.lang enthalten sind.


Die Klasse Math

Die Sprache Java selbst sieht nur einfache arithmetische Operationen wie Addition, Subtraktion, Multiplikation etc. vor. Schon bei einfachen mathematischen Formeln müssen wir aber kompliziertere mathematische Funktionen verwenden wie z.B. Quadratwurzel, Sinus oder Cosinus. Die Designer von Java haben sich entschlossen, diese komplexeren mathematischen Funktionen in eine spezielle Klasse namens Math zu packen. Die Klassen von java.lang werden immer automatisch vom Java-Compiler verfügbar gemacht, so dass das package nicht importiert werden muss.

Dokumentation der Klasse java.lang.Math

Beispiele für die Verwendung von Methoden der Klasse Math:

Funktion Methode
Kreiszahl Pi Math.PI
Quadratwurzel von x Math.sqrt(x)
Potenz: x hoch a Math.pow(x,a)
Winkelfunktionen (sin, cos, tan) Math.sin(x)
Rundung Math.round(x)
Aufrunden Math.ceil(x)
Abrunden Math.floor(y)


Anwendungen

Die zwei Methoden enthalten jeweils Anwendungen aus der Klasse Math:


import java.util.Scanner;
 
public class Aufgaben{
 
Scanner eingabe;
 
public Aufgaben(){
   eingabe = new Scanner(System.in);
}
 
//Beispiel 1
public void wurzelBerechnen(){
   System.out.print ("Geben Sie eine Zahl ein: ");
   int x = eingabe.nextInt();
   if(x<0){System.out.println("Ungültige Eingabe!"); wurzelBerechnen();};
     //Durch den erneuten Aufruf der Methode wurzelBerechnen() erscheint sofort wieder die Eingabeaufforderung
   System.out.println("Die Wurzel von "+x+" ist "+Math.sqrt(x));
}
 
 
//Beispiel 2
public void gerundeteWurzel(){
   System.out.print ("Geben Sie eine Zahl ein: ");
   int x = eingabe.nextInt();
   if(x<0){System.out.println("Ungültige Eingabe!"); gerundeteWurzel();};
   System.out.println("Die gerundete Wurzel von "+x+" ist "+Math.round(Math.sqrt(x)));
}
}


Die folgenden Methoden können wieder in der Klasse Aufgaben implementiert werden und deren Scanner-Objekt nutzen. (Hinweis: In den Aufgaben werden Bedingungen wiederholt.)

Aufgabe 1

Erstelle eine Methode public void pythagoras(), die nach Eingabe der Seitenlänge der beiden Katheten eines rechtwinkligen Dreiecks die Länge der Hypotenuse berechnet. Bei Eingabe negativer Werte soll ein Hinweis ausgegeben werden.


Aufgabe 2

Erstelle eine Methode public void kugel(), die nach Eingabe des Radius das Volumen und die Oberfläche der entsprechenden Kugel berechnet. (Achtung: Bei der Berechnung des Volumens lauert eine böse "Datentypfalle" !!)


Aufgabe 3

Erstelle eine Methode public void zylinder(), die nach Eingabe des Radius und der Höhe das Volumen und die Oberfläche des entsprechenden Zylinders berechnet.


Aufgabe 4

Erstelle eine Methode public void prismaberechnung(), die nach Eingabe der Seitenlänge des gleichseitigen Grundflächendreiecks und der Höhe des Prismas das Volumen und die Oberfläche berechnet.


Aufgabe 5

Schreibe eine Methode public void quadratzahlTest(), die überprüft, ob eine eingegebene Zahl eine Quadratzahl ist oder nicht. Das eigentliche Problem besteht darin, eine geeignete Bedingung zu formulieren.


Die Klasse String

Der Datentyp String ist in Java kein einfacher Datentyp wie etwa int oder double oder boolean, sondern eine Klasse. Eine Variable vom Typ String enthält daher nicht den String selbst, sondern sie enthält einen Verweis auf ein Objekt der Klasse String. Genau genommen ist ein String ein Array von Zeichen (Datentyp char). Folgende Darstellungsweisen drücken daher dasselbe aus:

String s = "Hallo";

char[] s = {'H', 'a', 'l', 'l', 'o'};

Eine wichtigsten Konsequenzen aus dieser Tatsache ist, dass Strings nicht mit dem Vergleichsoperator == verglichen werden können, denn der Vergleichsoperator prüft, ob die Verweise gleich sind und nicht, ob die Strings gleich sind, auf die verwiesen wird. Daher stellt die Klasse String eigens eine Methode equals() zu Verfügung, die diese Aufgabe erledigt. Daneben gibt es noch viele weitere interessante Methoden zum Umgang mit Zeichenketten, in denen der Array-Charakter von String-Objekten deutlich wird.


Dokumentation der Klasse java.lang.String


Aufgabe 1

Erstelle eine Klasse StringMethoden und kopiere folgenden Code in den Editor:

public class StringMethoden {
 
public void stringMethodenTesten(){
 
String s1 = "Nikolausi";
String s2 = "Mikolausi";
String s3 = "NIKOLAUSI";
 
//...
System.out.println("Methode 1: "+s1);
//...
System.out.println("Methode 2: "+s1.charAt(5));
//...
System.out.println("Methode 3: "+s1.endsWith("ausi"));
//...
System.out.println("Methode 4: "+s1.equals(s2));
//...
System.out.println("Methode 5: "+s1.equalsIgnoreCase(s3));
//...
System.out.println("Methode 6: "+s1.indexOf("i"));
//...
System.out.println("Methode 7: "+s1.indexOf("aus"));
//...
System.out.println("Methode 8: "+s1.length());
//...
System.out.println("Methode 9: "+s1.replace('l','m'));
//...
System.out.println("Methode 10: "+s1.startsWith("Niko"));
//...
System.out.println("Methode 11: "+s1.substring(4));
//
System.out.println("Methode 12: "+s1.substring(4,8));
//
System.out.println("Methode 13: "+s1.toLowerCase());
//
System.out.println("Methode 14: "+s1.toUpperCase());
}
}

Kompiliere das Programm und lasse die Ergebnisse auf der Konsole ausgeben. Ergänze nun das Programm mit einem Kommentar (// ...), der genau angibt, was jede dieser String-Methoden macht.


Aufgabe 2

Ergänze die Klasse StringMethoden um eine Methode, die für eine eingegebene Zeichenkette zählt und ausgibt, wie oft ein bestimmter Buchstabe vorkommt. Der Einfachheit halber soll die eingegebene Zeichenkette in Kleinbuchstaben umgewandelt werden. Hilfreich ist hier die Tatsache, dass eine for-Schleife auch mit Zeichen (z.B. 'a' bis 'z') funktioniert. Der Typ der Zählvariable ist natürlich dann char. Hinweis: Eine innere Schleife läuft jeweils durch die ganze Zeichenkette, um den gesuchten Buchstaben zu finden.


Aufgabe 3

Carlchen Crypto ist sauer. Die NSA liest trotz seiner genialen Verschlüsselung immer noch seine mails. Nun hat er eine neue Idee: Er nimmt von einer Zeichenkette immer jeden zweiten Buchstaben und gibt ihn aus. Anschließend hängt er ausgehend vom zweiten Buchstaben wiederum jeden zweiten Buchstaben an. Beispiel: Aus "Deggendorf" wird (nach Umwandlung in Kleinbuchstaben) "dgedregnof". Erstelle eine Methode crypto2(), die nach Eingabe einer Zeichenkette Carlchens Idee umsetzt.

Zusatzaufgabe: Erstelle eine Methode crypto2Decode(), die nach eingabe eines mit crypto2() verschlüsselten Wortes dieses wieder dekodiert. Achtung: Es ist eine Fallunterscheidung hinsichtlich der Länge des Wortes (gerade oder ungerade) notwendig.


Aufgabe 4

Das bekannte Wortspiel bzw. Lied "Drei Chinesen mit dem Kontrabass" soll als Methode dreiChinesen() umgesetzt werden, wobei der gewünschte Vokal den Eingabewert darstellt.


Aufgabe 5

Carlchen hat jetzt endgültig die Nase voll von den Schnüfflern der NSA. Er wandelt nun seine Texte in eine Kette von Binärzahlen ohne Punkt und Komma um. Daran soll sich die NSA die Zähne ausbeißen. Erstelle eine Methode crypto3(), die mit Hilfe der Methode Integer.toBinaryString(int i) (Hinweis: Auch char wird hier wie int behandelt.) ein Zeichen nach dem anderen in eine Binärzahl umwandelt und ausgibt, so dass am Ende eine lange Kette von Nullen und Einsen dasteht. Um Problemen aus dem Weg zu gehen, sollte die Zeichenkette txt in Kleinbuchstaben umgewandelt werden und anschließend sollten alle Leerzeichen mit txt.replaceAll(" ","") entfernt werden.

Zusatzaufgabe 1: (Knobelaufgabe!): Carlchen will das Ganze natürlich auch wieder dekodieren. Erstelle eine Methode crypto3Decode(), die das bewerkstelligt. Dazu muss man drei Dinge wissen: 1. Jedes Zeichen bzw. jede ASCII-Zahl, die ein Zeichen 'a' bis 'z' bzw. 'A' bis 'Z' ausgibt, kann durch eine 7-stellige Binärzahl dargestellt werden (dezimal 65 bis 122), die wir mit einer der bekannten String-Methoden aus der langen Kette herausschneiden können. 2. Mit Integer.parseInt(String c, 2) können wir einen Binärzahl-String c in eine Dezimalzahl umwandeln. 3. Mit (char) x können wir eine Zahl x (Datentyp int) in ein Zeichen umwandeln. Besondere Vorsicht ist geboten mit dem Datentyp der Variablen, in denen die Zwischenergebnisse der Umwandlung abgespeichert werden.



Aufgabe 6

Erstelle eine Methode woerterZaehlen(), die nach Eingabe eines Satzes ausgibt, aus wievielen Wörtern der Satz besteht.