D
DanTheMan12
Gast
Hallo miteinander,
ich habe folgende Aufgabenstellung und hänge eigentlich nur noch an Kleinigkeiten fest. Das heißt, das Programm läuft zumindest schonmal, aber erfüllt noch nicht 100%ig die geforderten Eigenschaften. Vielleicht findet sich jemand, der mir bei den fettgedruckten Sätzen helfen kann.
Mein Beispielsatz lautet: Ich trinke im Winter gern Tee und meine Position zur Erstellung des Passwortes ist die 2 (also die 3.).
1. Beim zweiten Satz: Ich schreibe in Zeile 9 die Aufforderung, aber wenn ich das Programm ausführe, erscheint erst die Aufforderung und es folgt "Ausnahme wird behandelt", "Der Satz muss zwischen 6 und 10 Woerter haben." aus Zeile 33 bzw. 44. Wie bekomme ich das ganze andersherum?
2. Der erste Satz erfordert ein '?', wenn ein Wort kürzer als die gewünschte Position des Zeichens eines Wortes ist. Wie kann ich das Programm erkennen lassen, dass die Ausnahme stattfindet und das Programm dort, anstelle einer erneuten Eingabeaufforderung, ein '?' für a setzt und die Schleifen weiter durchläuft? Demnach müsste für meinen Beispielsatz das Passwort hi?nre entstehen, da "im" nur 2 Stellen besitzt und somit Position 2 nicht erkannt werden kann.
Vielen Dank im Voraus
ich habe folgende Aufgabenstellung und hänge eigentlich nur noch an Kleinigkeiten fest. Das heißt, das Programm läuft zumindest schonmal, aber erfüllt noch nicht 100%ig die geforderten Eigenschaften. Vielleicht findet sich jemand, der mir bei den fettgedruckten Sätzen helfen kann.
Ein oft benutztes Verfahren zum Erstellen von Passwörtern ist die Verwendung von Merksätzen oder Zitaten. Von einem einfach zu merkenden Satz werden aus den einzelnen Wörtern jeweils die Buchstaben an einer bestimmten Position herausgenommen und hintereinander gefügt. Ein Passwort sollte aber immer mindestens 6 und maximal 10 Zeichen lang sein.
Implementieren Sie eine Klasse Passwort, die eine statische Methode static String erstellePasswort(String satz, int pos) bereitstellt. Die Methode soll aus einem zu übergebenen Satz und der Angabe der Position unter Verwendung des oben beschriebenen Verfahrens ein Passwort konstruieren. Falls dabei ein Wort kürzer als die gewünschte Position ist, soll statt des Buchstabens ein '?' in das Passwort eingefügt werden. Bei einer unerlaubten Passwortlänge (Anzahl der Wörter im Satz < 6 oder Anzahl der Wörter > 10) soll eine Instanz der selbst zu definierenden Ausnahmeklasse PasswortException ausgeworfen und an die aufrufende Stelle weitergereicht werden. Testen Sie die Methode erstellePasswort in der main-Methode. Verwenden Sie zum Einlesen eines Satzes die Methode nextLine() der Klasse Scanner. In der main-Methode soll die Ausnahmebehandlung durchgeführt werden, die aufgrund fehlerhafter Nutzung der Methode erstellePasswort auftreten kann. Nach der Ausnahmebehandlung soll der Nutzer zur wiederholten Eingabe eines Merksatzes aufgefordert werden.
Für die Lösung der Aufgabe sind die folgenden Methoden der Klasse String zu verwenden.
Java:// int length() - die Methode ermittelt die Länge eines StringObjektes String s = "JAVA-IST-TOLL"; int i = s.length(); // i hat den Wert 13 // String[] split(String separator) - zerlegt ein StringObjekt an dem Zeichen separator in ein Array von Teilstrings String[] woerter = s.split("-"); int len = woerter.length; //len hat den Wert 3 mit den Teilstrings JAVA, IST, TOLL // char charAt(int index) - gibt das Zeichen an Position index eines StringObjektes zurück char c = s.charAt(7); // c hat den Wert 'T'
Java:
import java.util.Scanner;
class PasswortException extends Exception { // eigene Fehlerklasse
PasswortException() {
super();
}
PasswortException(String message) {
super(message);
System.out.println("Geben Sie erneut einen Satz ein!"); // Aufforderung zur erneuten Eingabe
}
} // PasswortException (Klasse)
public class Passwort {
public static void main (String[] arg) {
boolean schleife; // bool'scher Typ schleife für do-while
do {
try {
Scanner in = new Scanner(System.in);
String eingabe = in.nextLine(); // Einlesen des Satzes
int index = 2; // vordefinierte Position, an der das Zeichen gelesen werden soll
System.out.println("Passwort: " + erstellePasswort(eingabe, index)); // Aufruf der Methode erstellePasswort
break;
} //try
// wird aufgerufen, wenn die geforderte Position (index) hoeher als die Anzahl der Zeichen des Wortes sind
catch (StringIndexOutOfBoundsException b) {
System.out.println("Ausnahme wird behandelt:");
System.out.println(b.getMessage());
schleife = true;
}
// wird aufgerufen, wenn der einzulesende Satz <6 oder >10 Woerter hat
catch (PasswortException c) {
System.out.println("Ausnahme wird behandelt:");
System.out.println(c.getMessage());
schleife = true;
}
} while (schleife = true);
} // main (Methode)
static String erstellePasswort (String satz, int pos) throws PasswortException {
int zeichen = satz.length(); // zaehlt Zeichen (inklusive Leerzeichen)
String[] wort = satz.split(" "); // splittet den Satz in Woerter durch die Erkennung von " " (Leerzeichen)
int anzahl = wort.length; // zaehlt die Woerter
if (anzahl < 6 || anzahl > 10) throw new PasswortException ("Der Satz muss zwischen 6 und 10 Woerter haben.");
String password = "";
for (int i = 0; i < wort.length; i++) { // Erstellung des Passworts per for-Schleife, durchlaeuft die Woerter
char a = wort[i].charAt(pos); // setzt a auf Zeichen an pos-Stelle (2) des i-ten Wortes
if (wort.length < pos) { // bei index = 2 --> StringIndexOutOfBoundsException --> hier bin ich mir nicht sicher, wie es richtig geht
a = '?'; // ich wuerde gern a auf "?" setzen, aber es wird erst die Ausnahme erkannt, sodass er nichts weiter macht
}
password = password + a; // fuegt dem vorerst erzeugten password a zu und haengt pro Durchlauf das aktuelle a an
}
return password;
} // erstellePasswort (Methode)
} // Passwort (Klasse)
Mein Beispielsatz lautet: Ich trinke im Winter gern Tee und meine Position zur Erstellung des Passwortes ist die 2 (also die 3.).
1. Beim zweiten Satz: Ich schreibe in Zeile 9 die Aufforderung, aber wenn ich das Programm ausführe, erscheint erst die Aufforderung und es folgt "Ausnahme wird behandelt", "Der Satz muss zwischen 6 und 10 Woerter haben." aus Zeile 33 bzw. 44. Wie bekomme ich das ganze andersherum?
2. Der erste Satz erfordert ein '?', wenn ein Wort kürzer als die gewünschte Position des Zeichens eines Wortes ist. Wie kann ich das Programm erkennen lassen, dass die Ausnahme stattfindet und das Programm dort, anstelle einer erneuten Eingabeaufforderung, ein '?' für a setzt und die Schleifen weiter durchläuft? Demnach müsste für meinen Beispielsatz das Passwort hi?nre entstehen, da "im" nur 2 Stellen besitzt und somit Position 2 nicht erkannt werden kann.
Vielen Dank im Voraus