tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
1346
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Erik Erik ist offline Mitglied Gold
    Registriert seit
    Jul 2008
    Beiträge
    171
    Hallo,

    ich habe die Funktionen Zahl -> Zahlenwort und Alle Zahlen in einem String ersetzten in Java gelöst.
    Der Code der daraus entsprungen ist gefällt mir nicht wirklich da ich mehr oder weniger ohne Idee drauflos programmiert habe .

    Das ganze habe ich mit Rekursion gelöst wobei es sicherlich noch besser geht (bin deswegen mal gespannt auf andere Abgaben gespannt).

    Sonst ist vielleicht noch zu sagen das eher ein Neuling in Java bin und ursprünglich .NET programmiert habe (bin wegen Umstieg auf Ubuntu umgestiegen).

    So hier nun der Code der Klasse Zahlen mit dem ich wie gesagt nicht wirklich zufrieden bin:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    
    private static Pattern p = null;
        
        private static final String[] EinerZahlen = {
                "eins",
                "zwei",
                "drei",
                "vier" ,
                "fünf" ,
                "sechs",
                "sieben",
                "acht",
                "neun" };
        
        private static final String[] ZehnerZahlen = {
                "zehn",
                "zwanzig",
                "dreißig",
                "vierzig",
                "fünfzig",
                "sechzig",
                "siebzig",
                "achzig",
                "neunzig"
        };
        
        private static final String[] ZahlenVorsilben = {
                "ein",
                "zwei",
                "drei",
                "vier",
                "fünf",
                "sechs",
                "sieben",
                "acht",
                "neun"
        };
        
        private static String VordereNullenLöschen(String eingabe) {
            if (eingabe.startsWith("0") && eingabe.length() > 1) {
                return VordereNullenLöschen(eingabe.substring(1, eingabe.length()));
            } else {
                return eingabe;
            }
        }
        
        public static String KonvertertiereZahl(String eingabe) {
            
            eingabe = VordereNullenLöschen(eingabe);
            
            int länge = eingabe.length();
            
            switch (länge) {
            case 1: // Einer behandeln
                if (Integer.valueOf(eingabe) == 0)
                    return "null";
                return EinerZahlen[Integer.valueOf(eingabe) - 1];
            case 2: // Zehner und Einer behandeln
                if (eingabe.equals("11")) {
                    return "elf";
                } else if (eingabe.equals("12")) {
                    return "zwölf";
                } else {
                    int Zehner = Integer.valueOf(eingabe.substring(0, 1));
                    int Einer = Integer.valueOf(eingabe.substring(1, 2));
                    
                    if (Zehner == 1) {
                        return (Einer != 0 ? ZahlenVorsilben[Einer - 1] : "") + ZehnerZahlen[Zehner - 1]; // ohne "und"
                    } else {
                        return (Einer != 0 ? ZahlenVorsilben[Einer - 1] + "und" : "") + ZehnerZahlen[Zehner - 1]; // mit "und"
                    }
                }
            case 3: // Hunderter
                String rest = eingabe.substring(1, 3);
                int Hunderter = Integer.valueOf(eingabe.substring(0, 1));
                if (Integer.valueOf(rest) == 0) {
                    return ZahlenVorsilben[Hunderter - 1] + "hundert";
                } else {
                    return ZahlenVorsilben[Hunderter - 1] + "hundert" + KonvertertiereZahl(rest);
                }
            case 4: // Tausender
                rest = eingabe.substring(1, 4);
                int Tausender = Integer.valueOf(eingabe.substring(0, 1));
                if (Integer.valueOf(rest) == 0) {
                    return ZahlenVorsilben[Tausender - 1] + "tausend";
                } else {
                    return ZahlenVorsilben[Tausender - 1] + "tausend" + KonvertertiereZahl(rest);
                }
            case 5: // Zehn-Tausender
                rest = eingabe.substring(2, 5);
                
                if (Integer.valueOf(VordereNullenLöschen(rest)) == 0) {
                    return KonvertertiereZahl(eingabe.substring(0, 2)) + "tausend";
                } else {
                    return KonvertertiereZahl(eingabe.substring(0, 2)) + "tausend" + KonvertertiereZahl(rest);
                }
            case 6: // Hundert-Tausender
                rest = eingabe.substring(3, 6);
                
                if (Integer.valueOf(VordereNullenLöschen(rest)) == 0) {
                    return KonvertertiereZahl(eingabe.substring(0, 3)) + "tausend";
                } else {
                    return KonvertertiereZahl(eingabe.substring(0, 3)) + "tausend" + KonvertertiereZahl(rest);
                }
            default:
                    return "Illegal String";
            }
            
            
            
        }
        
        public static String ErsetzteAlleZahlen(String eingabe) {
            
            if (p == null)
                p = Pattern.compile("[+-]?[0-9]+");
            Matcher m = p.matcher(eingabe);
     
            String neu = "";
     
            int pos = 0;
            
            while ( m.find() ) {
                neu = neu + eingabe.substring(pos, m.start()) + KonvertertiereZahl(eingabe.substring(m.start(), m.end()));
                pos = m.end();
            }
            neu = neu + eingabe.substring(pos, eingabe.length());
            
            return neu;
        }

    Ich werde mir eure Lösungen ansehen und hoffentlich was draus lernen

    Gruß
    Erik

    EDIT:
    Zitat Zitat von Matthias Reitinger
    Ich hab mal 1000 zufällige Zahlen im Bereich von 0 bis (10^66)-1 angehängt
    Ähhhmm. Ich hoffe meine Abgabe zählt überhaupt?
    Geändert von Erik (17.01.10 um 18:50 Uhr)
     

Thema nicht erledigt

Ähnliche Themen

  1. [QUIZ#17] thilos (java)
    Von thilos im Forum Archiv
    Antworten: 0
    Letzter Beitrag: 13.08.10, 01:33
  2. Quiz XML mit Java DOM
    Von Simon Berger im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 16.06.10, 08:20
  3. [QUIZ#14] Jellysheep (Java)
    Von Jellysheep im Forum Archiv
    Antworten: 0
    Letzter Beitrag: 27.03.10, 19:09
  4. [QUIZ#9] BastianX75 (Java)
    Von BastianX75 im Forum Archiv
    Antworten: 0
    Letzter Beitrag: 22.07.09, 09:16
  5. Quiz mit Java?
    Von fraus im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 13.07.01, 10:22