# also definition von klassen und string methoden und algorithmik



## akschay (24. Apr 2014)

Hallo Leute bin ganz neu in dem Forum, also ich habe einmal die Aufgabenstellung angehängt und dazu die gemachte Aufgabe von mir. Mein Problem ist das ich einen Fehler angezeigt bekomme in der Programmierung und seit Tagen komme ich nicht auf die Lösung bzw Korrektur. Kann mir bitte jemand helfen diesen kleinen Fehler ausfindig zu machen und zu korrigieren und zu erweitern, bin echt am verzweifeln. Vielen Dank schon mal im Vorraus


----------



## javampir (24. Apr 2014)

hi,
uns wäre sehr geholfen, wenn du die fehlermeldung posten würdest. außerdem ist es hilfreich, den code zu schreiben und in code-tags zu setzen.
ich könnte mir denken, dass der fehler in der vorletzten zeile ist. da zauberst du Kurzbezeichnung aus dem nichts hervor, da musst du nochmal String davorschreiben, also:

```
String Kurzbezeichnung = Kurzbe + s;
```
Tip: gewöhne dir an, variablennamen klein zu schreiben.
javampir


----------



## akschay (24. Apr 2014)

Hi also der Fehler ist das die Funktion berechneKurzbezeichnung nicht das richtige rechnet was ich erwarte.

Der code lautet dafür :


public static  String erzeugeKurzbezeichnung(int i, String Bezeichnung){
		int anzahl=0;
		String Kurzbe = Bezeichnung.replaceAll("[eauoiäüöEAUOIÄÜÖ]","");
		Kurzbe = Kurzbe.replaceAll("[ß]", "s");
		Kurzbe = Kurzbe.toUpperCase();


		//Kurzbe = Kurzbe.trim();
		String s = String.valueOf(Nr);
		if(s.length()<4){
			s = "0"+s;
		}else s = s.substring(0, 3);
		Kurzbezeichnung = Kurzbe+s;
		return Kurzbezeichnung;


und die Aufgabestellung 

Aufgabe 2 –Methode zur Erstellung von Kurzbezeichnungen
Die Klasse Artikel soll eine statische Methode
String erzeugeKurzbezeichnung(int nr,String bezeichnung)
erhalten, die aus einer übergebenen Nr und Artikelbezeichnung eine
Kurzbezeichnung erstellt. Aufrufe dieser Methode sind fachlich passend in die Klasse
Artikel zu integrieren (siehe hierzu Angaben in Aufgabe 1).
Eine Kurzbezeichnung eines Artikels besteht aus:
- bis zu 8 Konsonanten oder Ziffern aus der Artikelbezeichnung
- exakt 4 Ziffern, die sich aus der Artikel-Nr. ergeben
- einer 1-stelligen „Prüfziffer“
Beispiel:
Artikel-Nr.: 123
Artikelbezeichnung: Torx-*‐Schrauben
6x35
Ergeben folgende Kurzbezeichnung: TRXSCHRB01238
Folgende Regeln gelten für die Bildung der Kurzbezeichnung:
- Es werden die ersten 8 Konsonanten und/oder Ziffern von 0 - 9 der
Artikelbezeichnung berücksichtigt
o sind weniger vorhanden ist dieser Teil entsprechend kürzer
o Sonderzeichen werden nicht berücksichtigt
o Abweichende Alphabete mit Akzenten u. Ä. können ignoriert werden
(diese Fälle werden nicht getestet)
o Der Buchstabe „ß“ wird durch ein „s“ ersetzt
o Die Kurzbezeichnung enthält nur Großbuchstaben
- Es werden die letzten 4 Stellen der Artikel-Nr. angefügt
o Ist die Artikel-Nr. kürzer, wird mit der Ziffer „0“ auf 4 Stellen aufgefüllt
- Am Ende wird eine 1-stellige Prüfziffer angefügt
Die Bildungsregeln für die Prüfziffer lauten wie folgt:
- Jedem der 26 Buchstaben des Alphabets ist ein Wert zugeordnet:
A = 1, B = 2, C = 3, … Z = 26
- Die Werte aller Buchstaben sowie die Werte der einzelnen 4 Ziffern, die aus
der Artikel-Nr. abgeleitet wurden, werden zusammenaddiert und der
ganzzahlige Rest einer Division der Summe durch 11 wird als Prüfziffer
angehängt
o Beträgt der ganzzahlige Rest 10, so ist ein „X“ anzuhängen


----------



## nvidia (25. Apr 2014)

akschay hat gesagt.:


> Hi also der Fehler ist das die Funktion berechneKurzbezeichnung nicht das richtige rechnet was ich erwarte.
> [...]



Deine Funktion erfüllt ja auch nicht alle Anforderungen die gestellt wurden.


----------



## akschay (25. Apr 2014)

Ja und ich ich komme nicht darauf wäre echt lieb wenn mir jemand helfen würde....Bräuche es sehr dringend


----------



## kaoZ (25. Apr 2014)

mal abgesehen davon ist der Code grausam Formatiert und Variablen falsch deklariert sind, solltest du Code immer in Java Tags Posten , damit das Ganze lesbar wird.


```
public static String erzeugeKurzbezeichnung(int i, String Bezeichnung){
int anzahl=0;
String Kurzbe = Bezeichnung.replaceAll("[eauoiäüöEAUOIÄÜÖ]","");
Kurzbe = Kurzbe.replaceAll("[ß]", "s");
Kurzbe = Kurzbe.toUpperCase();


//Kurzbe = Kurzbe.trim();
String s = String.valueOf(Nr);
if(s.length()<4){
s = "0"+s;
}else s = s.substring(0, 3);
Kurzbezeichnung = Kurzbe+s;
return Kurzbezeichnung;
```

1. *Variablen Schreibt man lowerCamelCase*
2. bei deinen Sonderzeichen kann man das Schöner durch REGEX + Konstanten lösen.
3. wo ist dein eigener Ansatz für die Restlichen Aufgabenstellungen ?
4. du sollst hier eine Artikelnummer liefern , würde es da nicht Sinn machen deine Variable auch dementsprechend zu deklarieren ? 

Poste mal den ganzen Code den du bist jetzt bereits hast


----------



## nvidia (25. Apr 2014)

akschay hat gesagt.:


> [...] Mein Problem ist das ich einen Fehler angezeigt bekomme in der Programmierung und seit Tagen komme ich nicht auf die Lösung bzw Korrektur.[...]



Wenn du seit Tagen nicht auf die Lösung gekommen bist ist Softwareentwicklung vll. nichts für dich. 


```
public static String erzeugeKurzbezeichnungLeserlich(int artikelNr, String bezeichnung){
        Objects.requireNonNull(bezeichnung);
        if(bezeichnung.isEmpty() || artikelNr < 0){
            throw new IllegalArgumentException();
        }

        String kurzbezeichnung =
                bezeichnung
                        .toUpperCase()
                        .replaceAll("ß", "s")
                        .replaceAll("[^A-Z0-9[AEIOU]]", "")
                        .substring(0, Math.min(bezeichnung.length(), 8))
                            + String.format("%04d", (int)Math.log10(artikelNr)+1 <= 4
                                                        ? artikelNr
                                                        : artikelNr % 10000);

        int pruefziffer =
                kurzbezeichnung
                        .chars()
                        .map(c -> Character.isDigit(c) ? Character.digit(c, 10) : c - 64)
                        .sum() % 11;

        return kurzbezeichnung + (pruefziffer != 10 ? pruefziffer : "X");
    }
```


----------



## kaoZ (25. Apr 2014)

Er haut ihm direkt Lambda Expressions um die Ohren  + (Tenäre Operatoren xD)

Ich vermute mal das wird selbst mit Java 7 schon nicht einfach für den TO

da würde ich ihn mit Java 8 nicht zusätzlich Schockieren ^^

[EDIT]Immerhin hast du ihn nicht mit einem Funktionalen Interface Bombadiert :lol:[/EDIT]


----------



## nvidia (25. Apr 2014)

kaoZ hat gesagt.:


> Er haut ihm direkt Lambda Expressions um die Ohren  + (Tenäre Operatoren [...])
> [...]



Finde ich nicht schlimm, vor allem Anfänger die von Java noch nicht viel wissen profitieren wenn man sie früh mit den neuen Möglichkeiten in Kontakt bringt. Die müssen viel weniger bzw. gar nicht "umdenken" als jmd der seit x-Jahren nur Java entwickelt. Es ist eben nur schade das Bücher oder Tutorials sehr langsam oder gar nicht aktualisiert werden.


----------



## kaoZ (25. Apr 2014)

Ne , ist ja schon richtig , fands nur irgendwie ziemlich funny 

ich arbeite mich atm. auch in Lamda Expressions ein die Syntax ist ja auch viel einfacher / man spart knapp 5 Zielen mit einer expression.

Allerdings meckert Eclipse über die Syntax, kannst du ersehen Warum ? bzw. mir sagen was falsch ist / sein soll ?! ( Wenn wir schonmal dabei sind )


```
public class LamdaExpressions {

	public LamdaExpressions() {
	
		//Anonymes Runnable
		Runnable r = new Runnable() {
			@Override
			public void run() {
				System.out.println("Anonymes Runnable");
				
			}
		};
		
		//Lamda Expression
		Runnable r2 = () -> System.out.println("Lamda Runnable!"); // () -> hier wird laut Eclipse eine Expression erwartet.....
	}
}
```


----------



## Flown (25. Apr 2014)

kaoZ hat gesagt.:


> Ne , ist ja schon richtig , fands nur irgendwie ziemlich funny
> 
> ich arbeite mich atm. auch in Lamda Expressions ein die Syntax ist ja auch viel einfacher / man spart knapp 5 Zielen mit einer expression.
> 
> ...



Der Code funktioniert einwandfrei. Keine Probleme beim Ausführen.


----------



## kaoZ (25. Apr 2014)

> Der Code funktioniert einwandfrei. Keine Probleme beim Ausführen.



Okay.....das ist strange ....

[EDIT]
Scheint an Eclipse 4.3.2 zu liegen , anscheinend gibts da nen Feature Patch , Lamda Expressions werden wohl erst ab 4.4 unterstützt, ich werds mal eben patchen
[/EDIT]

Hier mal der Link zum Patch für Eclipse 4.3.2, diesen in Eclipse einfach unter install new Software einfügen  : 


```
http://download.eclipse.org/eclipse/updates/4.3-P-builds/
```

EDIT : Nach Neuinstallation und anpassen des Builds / Build Paths und der Compiler Version klappt es nun auch wunderbar ^^


----------



## akschay (25. Apr 2014)

Vielen vielen Dank...Es war wirklich so eine große Hilfe.:toll:


----------



## kaoZ (26. Apr 2014)

Es stehen doch schon einige Bespiele geschrieben ?!

Die Aufgabenstellung ist klar formuliert, wenn du jetzt spezielle teile nicht umsetzen kannst, dann kannst du hier natürlich Fragen zu deinem Aktuellen Problem stellen, 

aber es wird sich keiner hinsetzen und dir alles vorkauen 

Eigeninitiative ist die Devise.

Poste doch mal den Code den du bis jetzt geschrieben hast.


----------

