String mit ASCII vergleichen + gefundene Gemeinsamkeiten ausgeben

Cuh

Mitglied
Hallo, ich habe bei einer Aufgabe in der FH Schwierigkeiten und hoffe Ihr könnt mir dabei erneut behilflich sein.
Ich sitze seit ein paar stunden an diesem Problem und komme einfach nicht weiter : /

Ich habe einen String der sich aus 2 alten Strings zusammensetzt. (Artikelbezeichnung + ArtNr. ---> Beispiel: TRXSCHRB0012)

Aus diesem String soll ich eine Prüfziffer erstellen.
Hier wäre die Aufgabenstellung.

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 16 wird als Prüfziffer angehängt. Da hierbei Werte von 0 bis 15 auftreten können, wird anstelle einer Dezimalziffer die entsprechende Hexziffer angehängt.
- Zur Erinnerung: das Hexadezimalsystem kennt 16 Ziffern von 0-9 sowie von „A“-„F“. Ziffer von „0“-„9“ sind also analog zum Dezimalsystem zu interpretieren. „A“ steht für den Wert 10, „B“ für den Wert 11 usf. Ein Restwert von 13 bewirkt hier entsprechend das Anhängen der Hexziffer „D“.
 

Cuh

Mitglied
Java:
int i;        
int summe = 0;
int rest = 0;
        
        for (i = 0 ; i < kurzbezeichnung.length() ; i++ ){
            
            if(Character.isDigit(kurzbezeichnung.charAt(i))){
                summe = summe + kurzbezeichnung.charAt(i);
            }
            
            if (Character.isLetter(kurzbezeichnung.charAt(i)) && Character.isUpperCase(kurzbezeichnung.charAt(i))){
                summe = summe + (int)kurzbezeichnung.charAt(i) - 64;
            }
            
        }
        
        rest = summe % 16;
        
        if (rest==10){
            kurzbezeichnung = kurzbezeichnung + 'A';
        }
        else if (rest == 11){
            kurzbezeichnung = kurzbezeichnung + 'B';
        }
        else if (rest == 12){
            kurzbezeichnung = kurzbezeichnung + 'C';
        }
        else if (rest == 13){
            kurzbezeichnung = kurzbezeichnung + 'D';
        }
        else if (rest == 14){
            kurzbezeichnung = kurzbezeichnung + 'E';
        }
        else if (rest == 15){
            kurzbezeichnung = kurzbezeichnung + 'F';
        }
        
        return kurzbezeichnung;

Diese Variante hab ich von einem Kommilitonen bekommen, allerdings achtet unser Prof. sehr darauf nicht von anderen Kommilitonen zu kopieren.
Aber ich komm leider auch nicht drauf wie ich den Code oben umschreiben könnte damit er nicht als Plagiat getestet wird ;(
 

Natac

Bekanntes Mitglied
Die übliche Umsetzung wäre wohl die entsprechende Methode der Klasse Integer zu nutzen:
Java:
String hex = Integer.toHexString(i);

Alternativ könntest du die if-else-Kaskade auch als switch-Statement schreiben:

Java:
switch(rest){
 case 10: kurzbezeichnung = kurzbezeichnung + 'A'; break;
 case 11: kurzbezeichnung = kurzbezeichnung + 'B'; break;
 ...
}

Im Übrigen gibts du nicht die korrekte kurzbezeichnung zurück, wenn der rest < 10 ist.
 

Cuh

Mitglied
stimmt, hab ich ganz übersehen , danke :)

habe es jetzt so geschrieben:

Java:
int i;
int summe = 0;
int rest = 0;
        
        for (i = 0 ; i < kurzbezeichnung.length() ; i++ ){
            
            if(Character.isDigit(kurzbezeichnung.charAt(i))){
                summe = summe + kurzbezeichnung.charAt(i);
            }
            
            if (Character.isLetter(kurzbezeichnung.charAt(i)) && Character.isUpperCase(kurzbezeichnung.charAt(i))){
                summe = summe + (int)kurzbezeichnung.charAt(i) - 64;
            }
            if(Character.isLetter(kurzbezeichnung.charAt(i)) && Character.isLowerCase(kurzbezeichnung.charAt(i))){
                summe = summe + (int)kurzbezeichnung.charAt(i) - 96;
            }
            
        }
        
        rest = summe % 16;
    if (rest >= 10){
        
        switch(rest){
        case 10: kurzbezeichnung = kurzbezeichnung + 'A'; break;
        case 11: kurzbezeichnung = kurzbezeichnung + 'B'; break;
        case 12: kurzbezeichnung = kurzbezeichnung + 'C'; break;
        case 13: kurzbezeichnung = kurzbezeichnung + 'D'; break;
        case 14: kurzbezeichnung = kurzbezeichnung + 'E'; break;
        case 15: kurzbezeichnung = kurzbezeichnung + 'F'; break;
        }
    }
        else{
            kurzbezeichnung = kurzbezeichnung + rest;
        }
        return kurzbezeichnung;

allerdings bekomme ich immer noch eine Fehlermeldung wenn ich kurzbezeichnung dann ausgeben möchte.
Bzw. Das Projekt wäre somit eigentlich fertig allerdings bekomme ich wo die kurzbezeichnung (ArtikelBezeichnung + ArtikelNr. + Prüfziffer) stehen soll immer ein "null" in der Konsole
 
Zuletzt bearbeitet:

Cuh

Mitglied
Java:
public class Artikel {

    private int nummer;
    private String bezeichnung;
    private String kurzbezeichnung;
    private int lagerbestand;
    
    //Konstruktor.
    
    public Artikel(int nummer, String bezeichnung){
        this.nummer = nummer;
        this.bezeichnung = bezeichnung;
    }
    
    //Getter
    public int getNummer(){
        return nummer;
    }


    public int getLagerbestand(){
        return lagerbestand;
    }
    
    public String getBezeichnung(){
        return bezeichnung;
    }
    
    //Setter für die Bezeichnung, diese darf geändert werden.
    public void setBezeichnung(String neueBezeichnung){
        bezeichnung = neueBezeichnung;
    }
    
    public String getKurzbezeichnung(){
        return kurzbezeichnung;
    }
    
    //Lagermethoden! (Instanzmethode)
    public int einlagern(int lagerZugang){
        lagerbestand = lagerbestand + lagerZugang;
        return lagerbestand;
        
    }
    
    public int auslagern(int lagerAbgang){
        if (lagerbestand > lagerAbgang) {
        lagerbestand = lagerbestand - lagerAbgang;
        }
        return lagerbestand;
    }
    
    
    
    public static String erzeugeKurzbezeichnung(int nummer, String bezeichnung){
        
        //Formatierung der Artikelbezeichnung
        if(bezeichnung.length() > 8){
            bezeichnung = bezeichnung.substring(0, 8);
        }
        bezeichnung = bezeichnung.replaceAll("ß","s");
        bezeichnung = bezeichnung.replaceAll("[^a-zA-Z]", "");
        bezeichnung = bezeichnung.replaceAll("[aeiouAEIOU]", "");
        bezeichnung = bezeichnung.toUpperCase();
        
        
        //Artikel Nummer Formatierung. Fals die artikelNummer länger als 4 Stellen ist, sollen nur die letzten 4 Stellen benutzt werden. Falls diese kürzer als 4 Stellen ist soll diese mit vorangestellten Nullen auf 4 Stellen gefüllt werden.
        String formatierteNummer = String.format("%04d", nummer);
        formatierteNummer = formatierteNummer.substring(formatierteNummer.length()-4);
        
        //Kurzbezeichnung = Artikel Bezeichnung + Artikelnummer (beide formatiert wie in der Aufgabenstellung erwünscht.)
        String kurzbezeichnung ="";
        kurzbezeichnung = bezeichnung + formatierteNummer;


        
        //Prüfziffer ermitteln.
        int i;
        int summe = 0;
        int rest = 0;
        
        for (i = 0 ; i < kurzbezeichnung.length() ; i++ ){
            
            if(Character.isDigit(kurzbezeichnung.charAt(i))){
                summe = summe + kurzbezeichnung.charAt(i);
            }
            
            if (Character.isLetter(kurzbezeichnung.charAt(i)) && Character.isUpperCase(kurzbezeichnung.charAt(i))){
                summe = summe + (int)kurzbezeichnung.charAt(i) - 64;
            }
            if(Character.isLetter(kurzbezeichnung.charAt(i)) && Character.isLowerCase(kurzbezeichnung.charAt(i))){
                summe = summe + (int)kurzbezeichnung.charAt(i) - 96;
            }
            
        }
        
        rest = summe % 16;
    if (rest >= 10){
        
        switch(rest){
        case 10: kurzbezeichnung = kurzbezeichnung + 'A'; break;
        case 11: kurzbezeichnung = kurzbezeichnung + 'B'; break;
        case 12: kurzbezeichnung = kurzbezeichnung + 'C'; break;
        case 13: kurzbezeichnung = kurzbezeichnung + 'D'; break;
        case 14: kurzbezeichnung = kurzbezeichnung + 'E'; break;
        case 15: kurzbezeichnung = kurzbezeichnung + 'F'; break;
        }
    }
        else{
            kurzbezeichnung = kurzbezeichnung + rest;
        }
        return kurzbezeichnung;
    }
    
    
    
    public String toString(){
        return nummer + ", " +kurzbezeichnung+ ", " +bezeichnung + ", " +lagerbestand + " auf Lager";
    }
        


    public static void main (String[] args){
        
        //Ezeugen und ausgeben der Objekte
        Artikel a = new Artikel(123, "Torx-Schrauben 6x35");
        System.out.println(a);
        Artikel b = new Artikel(8, "Spax 8x55");
        b.einlagern(17);
        System.out.println(b);
        
        
        System.out.println(erzeugeKurzbezeichnung(62873408, "Schloßschraube"));
    
        }
    }

Bei dieser main soll folgendes auf der Konsole erscheinen:

123, TRXSCHRB01236, TorxSchrauben 6x35, 0 auf Lager
8, SPX8X550008D, Spax 8x55, 17 auf Lager
SCHLSSCH3408A


Meine Konsole gibt aus:

123, null, Torx-Schrauben 6x35, 0 auf Lager
8, null, Spax 8x55, 17 auf Lager
SCHLSSCH34082


EDIT: Sorry habe statt artikelNummer doch nur nummer in meinem code :(
keine Ahnung warum des hier artikelNummer heisst. Hab es abgeändert, sonst kommen wir alle noch durcheinander xD
 
Zuletzt bearbeitet:

Cuh

Mitglied
Haben auch einen JUnit Test bekommen, da läuft alles grün durch bis auf der "TesteKurzbezeichnung" Teil.
 
Zuletzt bearbeitet:

Dompteur

Top Contributor
Nein, die liegen erstens in einer statischen Methode und dann handelt es sich um eine lokale Variable.

D.h. du hast 2 Variablen, die gleich heißen. Eine deklarierst du in Zeile 5, die andere in Zeile 71.
 

Cuh

Mitglied
oh ja danke hab es gar nicht bemerkt.
Allerdings hänge ich immer noch bei meinem Problem von oben fest. Ich bekomme eine Falsche Ausgabe und weis einfach nicht an was es liegt :/
 

Cuh

Mitglied
Ok
hab es jetzt so abgeändert.

Java:
String foo ="";
foo = bezeichnung + formatierteNummer;
        
 
 
 
        //Prüfziffer ermitteln.
        
        int i;
        int summe = 0;
        int rest = 0;
 
        for (i = 0 ; i < foo.length() ; i++ ){
 
            if(Character.isDigit(foo.charAt(i))){
                summe = summe + foo.charAt(i);
            }
 
            if (Character.isLetter(foo.charAt(i)) && Character.isUpperCase(foo.charAt(i))){
                summe = summe + (int)foo.charAt(i) - 64;
            }
            if(Character.isLetter(foo.charAt(i)) && Character.isLowerCase(foo.charAt(i))){
                summe = summe + (int)foo.charAt(i) - 96;
            }
        }
 
        rest = summe % 16;
    if (rest >= 10){
 
        switch(rest){
        case 10: foo = foo + 'A'; break;
        case 11: foo = foo + 'B'; break;
        case 12: foo = foo + 'C'; break;
        case 13: foo = foo + 'D'; break;
        case 14: foo = foo + 'E'; break;
        case 15: foo = foo + 'F'; break;
        }
    }
        else{
            foo = foo + rest;
        }


        return foo;


dann hab ich noch eine toString wo ich gerne an der stelle wo foo steht den Wert von foo einfügen würde um es auf der Konsole dann auszugeben.

Java:
public String toString(){
        return nummer + ", " +foo +", " +bezeichnung + ", " +lagerbestand + " auf Lager";
    }

Sprich ich will auf der Konsole folgendes erreichen:
123, TRXSCHRB01236, TorxSchrauben 6x35, 0 auf Lager

aber statt TRXSCHRB01236 bekomm ich immer null.
Ich seh den Wald vor lauter Bäumen glaub ich nicht mehr, hänge jetzt schon seit Vormittag dran und langsam lässt die Konzentration nach. Also bitte nicht böse sein wegen dummen Fehlern
:oops:
 

Dompteur

Top Contributor
Das Problem ist nicht in der Methode "erzeugeKurzbezeichnung", sondern, dass du sie nirgends aufrufst.

Setze einmal folgende Zeile
Java:
kurzbezeichnung = erzeugeKurzbezeichnung(nummer, bezeichnung);
als letzte Zeile in den Konstruktor (Zeile 13).

Dann probier das Programm noch einmal aus.
Um das ganze dann sicher zu machen, musst du in allen Settern, die die Nummer und die Bezeichnung ändern, die Kurzbezeichnung neu ermitteln.
 

Cuh

Mitglied
ok super genial! hat funktioniert danke dir!!! : D
allerdings hab ich noch n kleines problem mit meinem JUnit Test.
Habe auf der Konsole exakt die Ausgabe die vorgeschrieben ist.
allerdings läuft der letze Test nicht grün durch, bekomme immer die Fehlermeldung:
expected;<SCHLS[SCH3408A]> but was:<SCHLS[CHR34089]>
 

Cuh

Mitglied
EDIT:

Habe das Projekt/Testat eingereicht, und wurde auch schon vom Bot kontrolliert und es hat bestanden :D

Vielen vielen vielen dank an alle die mir geholfen haben, hätte es vermutlich sonst nicht hinbekommen.
@Dompteur, dir noch mal ein RIESEN Dankeschön, du hast mir wirklich unheimlich gut geholfen!! :):)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
S ASCII String zu int Java Basics - Anfänger-Themen 5
H String in Ascii-Werte für Verschüsselungssystem Java Basics - Anfänger-Themen 8
S ASCII Code aus String herauslesen Java Basics - Anfänger-Themen 3
A String(Ascii ) in String umwandeln Java Basics - Anfänger-Themen 3
S String mit ASCII/HTML Zeichen darstellen Java Basics - Anfänger-Themen 10
J Ascii Zeichen von einem String umwandeln und ausgeben Java Basics - Anfänger-Themen 11
T String to ASCII Java Basics - Anfänger-Themen 3
D prüfen ob string nur ascii zeichen enthält Java Basics - Anfänger-Themen 7
T Ascii String zu Hex Wert wandeln? Java Basics - Anfänger-Themen 6
S Hex-String in Ascii-String umwandeln! Java Basics - Anfänger-Themen 7
J String nur mit ASCII-Zeichen Java Basics - Anfänger-Themen 4
K String(ASCII) to BigInteger Java Basics - Anfänger-Themen 2
G ASCII -> String Java Basics - Anfänger-Themen 2
Dilandau ascii code von zeichen in string ermitteln? Java Basics - Anfänger-Themen 9
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 String wiederholen mit Schleifen Java Basics - Anfänger-Themen 1
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
T String splitten Java Basics - Anfänger-Themen 3
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
T Platzhalter in String? Java Basics - Anfänger-Themen 14
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
R Ein Multidimensionales String Array initialisieren und Deklarieren Java Basics - Anfänger-Themen 2
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S String mit Int input vergleichen Java Basics - Anfänger-Themen 5
C String/Char-API Java Basics - Anfänger-Themen 13
U Char zu einem String machen Java Basics - Anfänger-Themen 1
B Anzahl Nullen uns Einsen in String ermitteln Java Basics - Anfänger-Themen 3
T Leerzeichen im String entfernen Java Basics - Anfänger-Themen 6
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N null in String replacen Java Basics - Anfänger-Themen 16
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
M Eclipse kennt keine String Klasse mehr Java Basics - Anfänger-Themen 1
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
D String mit int multiplizieren? Java Basics - Anfänger-Themen 16
H Überprüfen ob String Array leer ist Java Basics - Anfänger-Themen 4
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26

Ähnliche Java Themen

Neue Themen


Oben