parent
fb40446e3b
commit
210e824032
|
@ -160,8 +160,15 @@ public class ArrayExperimente
|
|||
*/
|
||||
public static int[] arrayUmdrehen(int[] array)
|
||||
{
|
||||
int[] wendeArray = new int[array.length];
|
||||
|
||||
return null;
|
||||
for (int i=0; i<array.length;i++)
|
||||
{
|
||||
wendeArray[i] = array[array.length -1 -i];
|
||||
|
||||
}
|
||||
|
||||
return wendeArray;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,7 +30,7 @@ public class Mitternachtsformelrechner
|
|||
{
|
||||
double x1 = (-b/2*a);
|
||||
System.out.println ("x1=" + x1);
|
||||
|
||||
}
|
||||
double Zähler1 = (-b + Math.sqrt(d));
|
||||
double Zähler2 = (-b - Math.sqrt(d));
|
||||
double x1 = (-b + Math.sqrt(d)) / (2*a);
|
||||
|
@ -41,5 +41,5 @@ public class Mitternachtsformelrechner
|
|||
System.out.println (x2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,277 @@
|
|||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Diese Klasse enthaelt Uebungsaufgaben fuer den Umgang mit Strings.
|
||||
*
|
||||
*/
|
||||
public class Stringuebungen {
|
||||
|
||||
/**
|
||||
* Diese Methode demonstriert grundlegend das Anlegen, Verketten
|
||||
* und Ausgeben von Strings. Lest sie aufmerksam und durch
|
||||
* probiert sie aus, bis ihr alles verstanden habt.
|
||||
*/
|
||||
public static void basics_Demo() {
|
||||
// So kann man eine String-Instanz anlegen:
|
||||
String s1 = new String("Hallo!");
|
||||
|
||||
// Die folgende Kurzschreibweise ist aber allgemein ueblich:
|
||||
String s2 = "Guten Morgen!";
|
||||
|
||||
|
||||
// Erst nachdenken, dann ausprobieren: Was geben diese Zeilen aus?
|
||||
System.out.println("Erster Test"); // "Erster Test"
|
||||
System.out.println(s1); // "Hallo"
|
||||
|
||||
// Mit dem + kann man Strings ganz einfach verketten:
|
||||
System.out.println("s1 ist " + s1);
|
||||
System.out.println("s2 ist " + s2);
|
||||
|
||||
|
||||
// String-Instanzen koennen nach der Instanziierung nie wieder
|
||||
// veraendert werden (man sagt englisch "Strings sind immutable")
|
||||
// -- die Referenzen allerdings schon:
|
||||
s1 = s2; // s1 zeigt jetzt auf eine andere String-Instanz
|
||||
|
||||
// Man kann auch Variablen anderer Typen mit Strings verketten:
|
||||
int x = 44;
|
||||
System.out.println(x);
|
||||
System.out.println("Die Variable x hat den Wert " + x);
|
||||
|
||||
// Dabei kann man nicht mit dem int anfangen; vor dem + muss immer
|
||||
// ein String stehen, notfalls ein leerer:
|
||||
System.out.println("" + x + " ist der Wert von x.");
|
||||
|
||||
// Von der Tastatur einzulesen ist leider recht hakelig: Ganz
|
||||
// oben in der Datei muss "import java.util.Scanner;" stehen (s.o.),
|
||||
// dann braucht man (einmal) eine Scanner-Instanz...:
|
||||
Scanner tastaturleser = new Scanner(System.in);
|
||||
// und dann erst kann man mit dem Scanner etwas von der Tastatur lesen:
|
||||
System.out.println("Bitte gib' einen kurzen Text ein: ");
|
||||
String s3;
|
||||
s3 = tastaturleser.nextLine();
|
||||
|
||||
System.out.println("Deine Eingabe lautet \"" + s3 + "\"");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Diese Methode demonstriert die Benutzung der String-Methoden
|
||||
* length(), indexOf(), charAt(), toUpperCase() und substring().
|
||||
* Lest sie aufmerksam durch und probiert aus bis ihr alles
|
||||
* verstanden habt.
|
||||
*/
|
||||
public static void stringMethodenDemo() {
|
||||
///////////////////////////////////////////////////
|
||||
///////////// Die Methode length() ////////////////
|
||||
// ermittelt die Laenge eines Strings:
|
||||
String s = "Informatik";
|
||||
System.out.println(s + " besteht aus " + s.length() + " Zeichen.");
|
||||
System.out.println("Baden-Wuerttemberg".length());
|
||||
System.out.println();
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
///////////// Die Methode indexOf() ////////////////
|
||||
// ermittelt den Index der ersten Fundstelle, an
|
||||
// der ein String innerhalb eines laengeren Strings vorkommt.
|
||||
// Achtung: die Indizes beginnen bei 0, nicht bei 1 (wie bei Arrays)
|
||||
String text = "Barbara mag aber Rhabarber statt Gelaber!";
|
||||
|
||||
// Erst ueberlegen, dann testen: Welche Fundstelle wird ausgegeben?
|
||||
String gesucht = "bar";
|
||||
int index = text.indexOf(gesucht);
|
||||
System.out.println("In " + text + " steht " + gesucht
|
||||
+ " bei Index " + index);
|
||||
|
||||
gesucht = "ab";
|
||||
index = text.indexOf(gesucht);
|
||||
System.out.println("In " + text + " steht " + gesucht
|
||||
+ " bei Index " + index);
|
||||
|
||||
gesucht = "ber";
|
||||
index = text.indexOf(gesucht);
|
||||
System.out.println("In " + text + " steht " + gesucht
|
||||
+ " bei Index " + index);
|
||||
|
||||
// Man kann die Suche auch weiter hinten beginnen, hier bei 15:
|
||||
gesucht = "ber";
|
||||
index = text.indexOf(gesucht, 15);
|
||||
System.out.println("In " + text + " steht " + gesucht
|
||||
+ " bei Index " + index);
|
||||
System.out.println();
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
///////////// Die Methode charAt() ////////////////
|
||||
// pickt einen einzelnen Buchstaben ("character") aus einem String.
|
||||
// Der Java-Typ char ist dabei ein primitiver Typ (keine Klasse!).
|
||||
text = "if-Schleifen gibt es nicht!";
|
||||
char c = 'h';
|
||||
char buchstabe = text.charAt(0);
|
||||
System.out.println(buchstabe);
|
||||
|
||||
// Erst nachdenken, dann testen: Was wird ausgegeben?
|
||||
System.out.println(text.charAt(3));
|
||||
|
||||
System.out.println(text.charAt(text.length() - 4));
|
||||
System.out.println();
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
///////// Die Methoden toUpperCase() und toLowerCase
|
||||
// erzeugen einen neuen String, der nur Gross- (bzw. Klein-)
|
||||
// buchstaben enthaelt:
|
||||
System.out.println("Aus " + text + " wird " + text.toLowerCase());
|
||||
System.out.println("Aus " + text + " wird " + text.toUpperCase());
|
||||
System.out.println();
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
///////// Die Methoden subString() schneidet aus einem
|
||||
// String einen Teil heraus. Die Angabe von Startindex und
|
||||
// dem (nicht mehr enthaltenen!) Endindex ist allerdings
|
||||
// gewoehnungsbeduerftig:
|
||||
System.out.print(text + "\nenthaelt ab Index 4 bis 7: ");
|
||||
System.out.println(text.substring(4, 7));
|
||||
}
|
||||
|
||||
/**
|
||||
* Zaehlt die Vorkommen eines Buchstabens innerhalb eines Textes.
|
||||
* @param text zu durchsuchender Text
|
||||
* @param z Buchstabe, nach dem gesucht wird
|
||||
* @return Zahl der Vorkommen von z in text
|
||||
*/
|
||||
public static int anzahlVorkommen(String text, char z) {
|
||||
/*# Geht mit einer Schleife den gesamten String durch;
|
||||
* erhöhe den Zaehler jedesmal, wenn das Zeichen
|
||||
* im String vorkommt; gebe dann den Wert des Zaehlers zurueck. */
|
||||
|
||||
int anzahl = 0;
|
||||
|
||||
|
||||
return anzahl;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dreht den uebergebenen String herum.
|
||||
* Aus GEWINNER wird also RENNIWEG.
|
||||
*
|
||||
* @param text umzudrehender String
|
||||
* @return den umgedrehten String
|
||||
*/
|
||||
public static String rueckwaerts(String text) {
|
||||
/*#Dies kann auf verschiedene Arten gelößt werden.
|
||||
* Eine Möglichkeit ist, du gehst mit einer Schleife
|
||||
* rueckwaerts durch den String
|
||||
* das geht z.B. mit for(int i=s.length()-1; i>=0; i--) und
|
||||
* haenge sie seine Buchstaben an den ergebnis-String an.
|
||||
*/
|
||||
|
||||
String ergebnis = "";
|
||||
|
||||
|
||||
return ergebnis;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ermittelt, ob ein Text ein Palindrom ist.
|
||||
* Ein Text ist ein Palindrom, wenn er rueckwaerts wie vorwaerts
|
||||
* gelesen das gleiche ergibt. Beispiele sind ANNA, OTTO, RENTNER, RELIEFPFEILER
|
||||
* oder auch als Palindromsatz ERIKAFEUERTNURUNTREUEFAKIRE.
|
||||
*
|
||||
* Das Wort Bob gilt wegen der Gross-/Kleinschreibung
|
||||
* hier NICHT als Palindrom.
|
||||
*
|
||||
* @param text Text, der untersucht werden soll.
|
||||
* @return true, wenn der Text ein Palindrom ist; false sonst.
|
||||
*/
|
||||
public static boolean istPalindrom(String text ) {
|
||||
/*# Diese Aufgabe kann auf verschiedene Arten geloest werden.
|
||||
* Eine nutzt auf elegante Weise anderen Code. Eine andere geht so:
|
||||
* Durchlaufe den Text in einer Schleife und vergleiche den
|
||||
* ersten mit dem letzten Buchstaben (im naechsten Durchlauf dann den
|
||||
* zweiten mit dem vorletzten usw.).
|
||||
*/
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Prueft, ob zwei Woerter Anagramme voneinander sind.
|
||||
*
|
||||
* Anagramme nennt man Woerter (oder Texte), die durch
|
||||
* Umordnung ihrer Buchstaben auseinander hervorgehen.
|
||||
* Folgende Wort- bzw. Textpaare sind beispielsweise
|
||||
* Anagramme voneinander:<p>
|
||||
* Leo / Oel<p>
|
||||
* shit / hits / this<p>
|
||||
* SAU / USA<p>
|
||||
* ABITURE / BAU TIER<p>
|
||||
* STAUFENS / FAN-TUSSE<p>
|
||||
* Frodos Ehe / Sehr doofe<p>
|
||||
*
|
||||
* Zwei Saetze gelten auch dann als Anagramme, wenn dafür
|
||||
* Leer- und Satzzeichen sowie Kleinschreibung ignoriert
|
||||
* werden muessen wie bei "rauschen" / "Hase nur C".
|
||||
*
|
||||
* @param wort1 Der erste Text.
|
||||
* @param wort2 Der zweite Text.
|
||||
* @return ob die beiden Texte Anagramme voneinander sind.
|
||||
*/
|
||||
public static boolean sindAnagramme(String wort1, String wort2 ) {
|
||||
/*# Mache dir klar, dass es nur auf die Haeufigkeit der
|
||||
* Buchstaben ankommt. Und dann mach dir keine
|
||||
* unnoetige Arbeit, sondern benutze fertigen Code.
|
||||
*/
|
||||
|
||||
boolean ergebnis = true;
|
||||
|
||||
|
||||
return ergebnis;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Für Experten: Die Caesar-Chiffre
|
||||
* Die Funktion chiffriert einen Klartext mit der Caesar-Chiffre und
|
||||
* dem angegebenen Schluessel.
|
||||
* Der Klartext wird um "schluessel" Stellen im Alphabet
|
||||
* weitergeschoben. Mit dem Schluessel 3 wird also
|
||||
*
|
||||
* aus "ABC" der Geheimtext DEF
|
||||
* aus "VWXYZ" der Geheimtext YZABC
|
||||
* aus "INFO" der Geheimtext LQIR
|
||||
*
|
||||
* Der Einfachheithalber dürft ihr annehmen, dass der zu verschlüsselnde
|
||||
* Text "normalisiert" ist, d.h. nur Großbuchstaben enthält.
|
||||
*
|
||||
* @param klartext zu verschluesselnder Klartext
|
||||
* @param schluessel Verschiebung im Alphabet (nach rechts)
|
||||
* @return den verschluesselten Text (Geheimtext).
|
||||
*/
|
||||
public static String caesarChiffrieren(String klartext, int schluessel) {
|
||||
/*# Es gibt verschiedene Moeglichkeiten, die Verschiebung
|
||||
* umzusetzen; eine besteht darin, alle Buchstaben einzeln in
|
||||
* int-Werte umzurechnen. Man kann char-Werte mit einer Zuweisung wie
|
||||
* int zahl = (int) charVariable;
|
||||
* ganz einfach in int-Werte umwandeln. Dann rechnet man die eigentliche
|
||||
* Caesar-Verschiebung aus und wandelt mit
|
||||
* char c = (char) intVariable;
|
||||
* zurueck in Buchstaben.
|
||||
*
|
||||
* Aber Achtung: 'A' hat nicht den Zahlenwert 0!
|
||||
* Finde zuerst raus, welchen Zahlenwert A hat.
|
||||
*/
|
||||
|
||||
String geheimtext = "";
|
||||
|
||||
|
||||
return geheimtext;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Die Test-Klasse Stringuebungen_MLTest.
|
||||
*
|
||||
* @author Urs Lautebach
|
||||
* @version 2019-12
|
||||
*/
|
||||
public class StringuebungenTest {
|
||||
/**
|
||||
* Konstruktor fuer die Test-Klasse Stringuebungen_MLTest
|
||||
*/
|
||||
public StringuebungenTest() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Setzt das Testgerüst fuer den Test.
|
||||
*
|
||||
* Wird vor jeder Testfall-Methode aufgerufen.
|
||||
*/
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt das Testgerüst wieder frei.
|
||||
*
|
||||
* Wird nach jeder Testfall-Methode aufgerufen.
|
||||
*/
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAnzahlVorkommen() {
|
||||
// Buchstaben, die ein- und mehrfach vorkommen:
|
||||
assertEquals(3, Stringuebungen.anzahlVorkommen("Barbara", 'a'));
|
||||
assertEquals(2, Stringuebungen.anzahlVorkommen("Barbara", 'r'));
|
||||
assertEquals(1, Stringuebungen.anzahlVorkommen("Barbara", 'B'));
|
||||
|
||||
// kein Vorkommen:
|
||||
assertEquals(0, Stringuebungen.anzahlVorkommen("Barbara", 'x'));
|
||||
|
||||
// letzten Buchstaben suchen:
|
||||
assertEquals(1, Stringuebungen.anzahlVorkommen("Wald", 'd'));
|
||||
|
||||
// Im leeren String suchen (darf keinen Fehler ausloesen):
|
||||
assertEquals(0, Stringuebungen.anzahlVorkommen("", 'a'));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRueckwaerts() {
|
||||
assertEquals("", Stringuebungen.rueckwaerts(""));
|
||||
assertEquals("1", Stringuebungen.rueckwaerts("1"));
|
||||
assertEquals("21", Stringuebungen.rueckwaerts("12"));
|
||||
assertEquals("cba", Stringuebungen.rueckwaerts("abc"));
|
||||
assertEquals("EISLAUF", Stringuebungen.rueckwaerts("FUALSIE"));
|
||||
assertEquals("+3-2-1", Stringuebungen.rueckwaerts("1-2-3+"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIstPalindrom() {
|
||||
assertFalse(Stringuebungen.istPalindrom("lalala"));
|
||||
assertFalse(Stringuebungen.istPalindrom("Bob"));
|
||||
|
||||
assertTrue(Stringuebungen.istPalindrom("bob"));
|
||||
assertTrue(Stringuebungen.istPalindrom("alalalalalalalala"));
|
||||
assertTrue(Stringuebungen.istPalindrom("asDf...fDsa"));
|
||||
|
||||
assertTrue(Stringuebungen.istPalindrom(""));
|
||||
assertTrue(Stringuebungen.istPalindrom("RELIEFPFEILER"));
|
||||
assertTrue(Stringuebungen.istPalindrom("EINNEGERMITGAZELLEZAGTIMREGENNIE"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testSindAnagramme() {
|
||||
assertTrue(Stringuebungen.sindAnagramme("", ""));
|
||||
assertTrue(Stringuebungen.sindAnagramme(" ", ""));
|
||||
assertTrue(Stringuebungen.sindAnagramme("a", "a"));
|
||||
assertTrue(Stringuebungen.sindAnagramme("abc", "bca"));
|
||||
assertTrue(Stringuebungen.sindAnagramme("Staufens", "sauen fst"));
|
||||
assertTrue(Stringuebungen.sindAnagramme("Baren bara", "ABarbaren"));
|
||||
assertTrue(Stringuebungen.sindAnagramme("Frodos Ehe", "Sehr doofe"));
|
||||
|
||||
assertFalse(Stringuebungen.sindAnagramme("informatik", "kitamrofn"));
|
||||
assertFalse(Stringuebungen.sindAnagramme("dudeldei", "leude"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaesarChiffrieren() {
|
||||
assertEquals("", Stringuebungen.caesarChiffrieren("", 3));
|
||||
assertEquals("GUTENMORGEN", Stringuebungen.caesarChiffrieren("GUTEN MORGEN", 26));
|
||||
assertEquals("KZQHEZQH", Stringuebungen.caesarChiffrieren("larifari", 25));
|
||||
assertEquals("DEF", Stringuebungen.caesarChiffrieren("abc", 3));
|
||||
assertEquals("FFFCCC", Stringuebungen.caesarChiffrieren("aaa xxx", 5));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue