# Passwort erstellen



## Alibistudent (17. Mrz 2011)

Hallo alle zusammen und zwar hab ich eine Hausaufgabe aufbekommen die ich lösen muss. Es geht um Methoden, Klassen und Strings. Ich hab Probleme mit der Aufgabe weil viel verlangt wird es sind Sachen vorgegeben mit der man die Aufgabe lösen soll jedoch verwirren sie mich noch ein bisschen weil ich noch neu in dem Thema Methoden drin bin. Also vorab wäre es schön wenn ich den Aufbau meines Quelltextes hinbekommen würde damit mir vllt vieles klarer wird was denn jetzt als Klasse und was als Methode aufgezählt werden muss. Danach wäre es sehr schön wenn ihr mir Schritt für Schritt mit der Lösung der Aufgabe helfen könnt:rtfm: es geht mir darum alles zu verstehen und ich möchte nicht das ihr für mich die Aufgabe löst aber vllt könnte man die Struktur die hier erforderlich ist erklären bzw. vorgeben. danke im voraus:toll:
Also die Aufgabe lautet:
_
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.

*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'_

Das ist der Aufbau vllt noch nicht ganz richtig aber ich hoffe ich hab es schon ansatzweise verstanden:rtfm:

```
import java.util.Scanner
public class passwort{
	public static void main(String[] arg){
		Scanner in = new Scanner (System.in);
		passwort = in.nextLine();
	}
	public static String erstellePasswort(String satz, int pos){
		
	}
	public static int length(){
		
	}
	public static String[] split(String separator){
		
	}
	public static char charAt(int index){
		
	}
}
```


----------



## homer65 (18. Mrz 2011)

Auf die Schnelle mal meine Interpretation der Klasse Passwort

```
package pack;
public class Passwort 
{
	public static String erstellePasswort(String satz,int pos) throws PasswortException
	{
		String erg = "";
		String[] woerter = satz.split("-");
		if (woerter.length < 6) throw new PasswortException();
		if (woerter.length > 10) throw new PasswortException();
		for (int i=0;i<woerter.length;i++)
		{
			String wort = woerter[i];
			int l = wort.length();
			if (l < pos) erg += "?";
			else
			{
				char ch = wort.charAt(pos);
				erg += ch;
			}
		}
		return erg;
	}
}
```


----------



## xehpuk (18. Mrz 2011)

Alibistudent hat gesagt.:


> ```
> import java.util.Scanner
> public class passwort{
> // ...
> ...


Wie bereits in der Aufgabenstellung steht, sind dies Methoden, die bereits in 
	
	
	
	





```
java.lang.String
```
 stehen. Ihr sollt diese nicht selbst schreiben, sondern in 
	
	
	
	





```
erstellePasswort(String satz, int pos)
```
 verwenden.

Du könntest ja auch mal erläutern, was du dir bisher dazu gedacht hast. Wie du dir einen Lösungsweg vorstellst etc.


----------



## Andi_CH (18. Mrz 2011)

charAt() und length() brauchst du sicher nicht in deiner Klasse - das sind nur Hinweise darauf was mit String möglich ist.


----------



## Alibistudent (18. Mrz 2011)

also ich wollte mich erstmal langsam ranarbeiten weil ja viele informationen gegeben sind und ich wusste nicht wo ich anfangen sollte:rtfm: ich hab mir schon in etwa gedacht das die methoden in java integriert sind nur denken reicht halt nicht^^ dann dachte ich ich machs auf die normale art und wenn was falsch ist hilft ihr mir bestimmt:bae:

wie mir homer65 schon gezeigt hat weiß ich jetzt wie es aussehen sollte! habs auch schon verstanden was in der Methode erstellePasswort passiert! Nur weiß ich nicht was bei "throw new" passiert! naja ich kanns mir schon denken also ich sag euch mal wie ich das verstanden hab, hab nämlich bisschen was dazu gelesen...also man kann einen Fehler der entsteht bzw. den man selber hervorruft wegwerfen "throw" man muss aber vorher ansagen das solch ein fehler entstehen kann in dem Methodenkopf in dem Fall "throws PasswortException()" aber dadurch das man den Fehler bzw. die Werte die man hat wegwirft muss doch etwas passieren um das ganze neu zu starten um sich einen gültigen Wert zu holen. Ich denke dazu sollen "try" und "catch" dienen. Man kann die Ausnahme auffangen mit "catch" und ich würde sagen das man das catch in der main-methode unterbringen muss da wo man sich den wert holt. Nur weiß ich nicht was ich beachten muss und bezeichnungen etc. brauch ich vllt eine methode die PasswortException() heißt?

hier mein quellcode bis jetzt:

```
import java.util.Scanner;
import java.lang.String;
package pack;//wofür steht das package?? dachte java.lang.String beinhaltet die Funktionen von Java
public class passwort{
	public static void main(String[]arg){
		Scanner in = new Scanner(System.in);
		String passwort = in.nextLine();
		int position = in.nextInt();
		System.out.println(erstellePasswort(passwort, position));
	}
    public static String erstellePasswort(String satz,int pos) throws PasswortException
    {
        String erg = "";
        String[] woerter = satz.split("-");
        if (woerter.length < 6) throw new PasswortException();
        if (woerter.length > 10) throw new PasswortException();
        for (int i=0;i<woerter.length;i++)
        {
            String wort = woerter[i];
            int l = wort.length();
            if (l < pos) erg += "?";
            else
            {
                char ch = wort.charAt(pos);
                erg += ch;
            }
        }
        return erg;
    }
}
```


----------



## homer65 (18. Mrz 2011)

Tja, damit wäre das ganze schon fertig.
Ein Package ist einfach eine Zusammenfassung von mehreren Klassen, das braucht man nicht unbedingt.
Ist nur übersichtlicher, wenn man viele Klassen hatt.
Wenn eine Exception geworfen wird, kann man das mit einem TRY-CATCH Block behandeln, oder aber wie folgt einfach weitergeben.

```
import java.util.Scanner;
import java.lang.String;
public class Passwort
{
    public static void main(String[]arg) throws PasswortException
    {
        Scanner in = new Scanner(System.in);
        String passwort = in.nextLine();
        int position = in.nextInt();
        System.out.println(erstellePasswort(passwort, position));
    }
    public static String erstellePasswort(String satz,int pos) throws PasswortException
    {
        String erg = "";
        String[] woerter = satz.split("-");
        if (woerter.length < 6) throw new PasswortException();
        if (woerter.length > 10) throw new PasswortException();
        for (int i=0;i<woerter.length;i++)
        {
            String wort = woerter[i];
            int l = wort.length();
            if (l < pos) erg += "?";
            else
            {
                char ch = wort.charAt(pos);
                erg += ch;
            }
        }
        return erg;
    }
}
```


```
public class PasswortException extends Exception
{

}
```


----------



## xehpuk (18. Mrz 2011)

```
public class passwort
```
 und 
	
	
	
	





```
String passwort
```
 ist ganz böse. Klassennamen immer groß!
Ich würde 
	
	
	
	





```
PasswortException
```
 von 
	
	
	
	





```
IllegalArgumentException
```
 erben lassen.


----------



## Alibistudent (19. Mrz 2011)

muss hier nichts mehr rein?

```
public class PasswortException extends Exception
{
 
}
```

also ich habs so verstanden das eine ausnahme sowas wie ein fehler ist! dieser fehler wird weggeworfen damit der quelltext bis zum ende laufen kann damit kein richtiger "unbehandelbarer" fehler entsteht. dadurch das man dem system vorher sagt also hier könnte ein fehler entstehen (naja es ist ja in unserem fall kein fehler aber nach unserer aufgabe her schon von daher mehr ein selbstverursachter fehler) kann der "Fehler" entweder behandelt werden nach dem wegwerfen oder einfach in dem Papierkorb gelassen werden...lieg ich da richtig?:rtfm:


----------



## Firephoenix (20. Mrz 2011)

Hi,
hier ist das ziemlich gut erklärt:
Tutorial / Java Grundlagen / Exceptions
Gruß


----------

