# Aufgabe: Eingaben prüfen, Exceptions



## Sonic1337 (28. Sep 2011)

Hallo liebe community hab mir gerade im Internet paar aufgaben angeschaut zum Thema Java und Exeptions komme aber überhaupt nicht vorran und bitte um Hilfe...
Hier mal die Aufgabe 

Die Klausuranmeldung zum Kurs 1618 erfolgt per Email. Dabei muss die Anmeldung ein bestimmtes Format haben, um weiterverarbeitet werden zu können. Vereinfacht gehen wir davon aus, dass die Anmeldung aus Klausurort Matrikelnummer Nachname Vorname besteht, also z.B.

 	Hamburg 12345678 Boss Hugo
 	oder
 	Rom 87654321 Borgia Lucrezia,

wobei in den Namen keine Sonderzeichen oder Umlaute vorkommen dürfen und die Matrikelnummer achtstellig ist.

Schreiben Sie ein Java-Programm, das unter fleißiger Verwendung von try, catch und throw-Anweisungen überprüft,
•	ob die Anmeldung aus den gewünschten Teilen besteht,
•	ob der angegebene Klausurort Hamburg ist,
•	ob die Matrikelnummer achtstellig ist und aus Zahlen besteht,
•	ob Nachname und Vorname aus Groß- und Kleinbuchstaben bestehen.

Hinweise:
•	Character-Werte können in Java auf Integer-Werte gecastet werden. Die auf Integer-Werte gecasteten Character-Werte der Buchstaben von A bis Z liegen im Bereich von65 bis 90, die der Buchstaben a bis z im Bereich von 97 bis 122.
•	Um an einzelne Buchstaben eines Strings zu kommen, verwendet man die Methode charAt.
•	Für den Test auf Gleichheit von Zeichenketten muss equals verwendet werden.
•	Definiert man eigene Ausnahmeklassen, müssen diese Unterklassen von Exception sein,

z.B.
class EigeneAusnahme extends Exception{
}


PS: danke im vorraus


----------



## The_S (28. Sep 2011)

Kurs 1618, achtstellige Matrikelnummer, Klausurorte, ...? Belegt da jemand an der FernUni Hagen den Kurs 1618 - Einführung in die OOP  ?

Aber back to topic: Ich sehe die Aufgabe, aber nicht wo dein konkretes Problem liegt. Wo hängts denn?


----------



## Noctarius (28. Sep 2011)

1. Was hat das mit Plattformprogrammierung zu tun?
2. Wieso klingt das eher nach Hausaufgabe als nach einer Übungsaufgabe im Internet?
3. Was ist deine Frage?
4. Bitte!


----------



## Sonicl1337 (28. Sep 2011)

Nein bin zurzeit am Fachabitur Informatik 

Stimmt hab vergessen das genaue Problem zu schildern ...

Wir wollen diese Thema wohl im nächsten halbjah laut Lehrer behandeln und ich finde keinen Anfang zu diese Aufgabe muss auch dazu sagen bin nicht so der Programmiere und suche jetzt entweder eine Lösung oder einen Anfang überhaupt da ich total aufm schlauch stehe momentan


----------



## Sonicl1337 (28. Sep 2011)

Noctarius hat gesagt.:


> 1. Was hat das mit Plattformprogrammierung zu tun?
> 2. Wieso klingt das eher nach Hausaufgabe als nach einer Übungsaufgabe im Internet?
> 3. Was ist deine Frage?
> 4. Bitte!



Frage 2 und 3 siehe Post. und 1. machen das mit eclipse, hoffe das beantwortet deine Frage


----------



## Landei (28. Sep 2011)

Du musst du mit Strings umgehen können: Galileo Computing :: Java ist auch eine Insel – 4 Der Umgang mit Zeichenketten

Besonders String.split sollte dir weiterhelfen.

Ob ein String eine Zahl ist, kann man entweder Zeichen für Zeichen prüfen, oder indem man einfach etwas wie Long.parseLong(..) aufruft (und eventuelle Fehler abfängt)

Einige Eigenschaften von chars sind in der Klasse Character hinterlegt, also z.B. ob ein Zeichen ein Buchstabe ist.

Bring das alles erst mal für korrekte Angaben zum Laufen, und kümmere dich erst dann um mögliche Exceptions. 

Versuche erst mal, wie weit du kommst, dann gibt's mehr Hilfe...


----------



## Freddy1337 (28. Sep 2011)

Kann mir mal wer einen kompletten Quellcode zu dieser Aufgabe posten bitte hab genau diesselbe


----------



## Firephoenix (28. Sep 2011)

Ohne das ich mich mal an dem "machen mit eclipse" aufhänge und dir Schizophrenie oder doch kollektive hausaufgaben bescheinige hier mal ein kleiner Anstoß:

Also du hast eine Methode die sieht ganz grob so aus:
<rückgabewert> <name> (<parameterliste>) <deklaration von exceptions>{
<rumpf mit funktion>
}

-da die Methode über Exceptions arbeitet fliegt der Rückgabewert schonmal raus (könnte evtl auch nach dem Test die Anmeldung zurückgeben oder true/false liefern...)
-Als Methodenname bietet sich ja wohl anmelden oder setAnmeldung an
-Die Parameterliste beschreibt den input der Methode "Hamburg 12345678 Boss Hugo" ist ein String.
Also kriegst du als parameter einen String übergeben der die anmeldung enthält, also nennen wir den auch so.
-Eigene Exceptions kann man noch bauen wenn der Rest läuft, fürs erste schmeißen wir einfach eine IllegalArgumentException

also sieht deine Methode erstmal so aus (ich mache sie mal public static, je nach kontext in deiner Anwendung kannst du das ja ändern)


```
public static void anmeldung(String anmeldung) throws IllegalArgumentException{
		//Prüfen ob die Anmeldung aus 4 Wörtern besteht
		//Prüfen ob das erste Wort des Strings Hamburg ist
		//Prüfen ob das zweite Wort eine 8-Stellige Nummer ist
		//Prüfen ob die letzten 2 Wörter gültige Namen sind (Großbuchstabe gefolgt von Kleinbuchstaben)
	}
```

Da ihr das offenbar über das casten von chars nach int machen sollt hier mal eine Ascii-Tabelle die du verwenden kannst:
Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion

Ich habe dir auch mal ein kleines Beispiel gebaut, bei dem ich einen String in ein int-array überführe das die Werte der Chars enthält und dann diese Werte darauf prüft ob eine Leerstelle enthalten ist.
Beachte dabei, dass man den ganzen Code mit anderen Mitteln wesentlich schöner/schneller/effizienter/kürzer schreiben kann, ich mich hier aber hart an die Methoden gehalten habe die euch in den hinweisen vorgegeben waren. Wenn du bei deiner (Haus?)Aufgabe auch andere Methoden der klassen String benutzen darfst wird das ganze einiges leichter.

Und Kenntnisse in Arrays und Schleifen bzw Typecasts setze ich hier vorraus, falls du Probleme mit dem Beispielcode hast hilft selbstrecherche nach dem was da passiert:

```
//Zeichenkette die geprüft werden soll
		String a = "EinWort ZweiWort";
		//neues int-Array anlegen das so groß wie der String ist
		int[] charValues = new int[a.length()];
		//die chars im String in das int-array übertragen
		for(int i = 0; i < a.length(); i++){
			//Zeichen aus dem String holen, nach int casten und in das Array ablegen
			charValues[i] = (int) a.charAt(i);
			//Kleine Testausgabe:
			System.out.println(a.charAt(i)+" hat den Wert: "+ charValues[i]);
		}
		//Aus der Tabelle oder der Ausgabe wissen wir, dass Space(Leerzeichen) den Wert 32 hat
		//Also suchen wir jetzt mal dannach
		for(int i = 0; i < charValues.length; i++){
			if(charValues[i] == 32){
				System.out.println("Leerzeichen an der Stelle "+i+" gefunden!");
			}
		}
```

Falls ihr übrigens immer so an eure Hausaufgaben rangeht dann viel Spaß bei der Klausur :rtfm:
Gruß


----------

