also definition von klassen und string methoden und algorithmik

akschay

Mitglied
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
 

Anhänge

  • image.jpg
    image.jpg
    89 KB · Aufrufe: 64
Zuletzt bearbeitet:
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:
Java:
String Kurzbezeichnung = Kurzbe + s;
Tip: gewöhne dir an, variablennamen klein zu schreiben.
javampir
 
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
 
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.

Java:
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 🙂
 
Zuletzt bearbeitet:
[...] 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. 🙂

Java:
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");
    }
 
😀 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]
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
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 )

Java:
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.....
	}
}
 
Zuletzt bearbeitet:
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 )

Java:
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.....
	}
}

Der Code funktioniert einwandfrei. Keine Probleme beim Ausführen.
 
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 :

Code:
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 ^^
 
Zuletzt bearbeitet:
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.
 

Zurück
Oben