Sprachen Spiel

Aufgabe: B-Sprachen-Spiel
Kinder spielen gerne das B-Sprachen-Spiel. Die B-Sprache funktioniert so, dass an jeden Vokal (a,e,i,o,u) eines Wortes ein b plus die Wiederholung des Vokals angefügt wird.

Schreiben Sie eine Methode namens spielen, die ein normales Wort entgegennimmt (Parameterdatentyp: String) und in ein Wort der B-Sprache übersetzt und dieses zurückgibt.

Beispiel:

übergebene Zeichenfolge: spiel mit mir zurückgelieferte Zeichenfolge: spibiebel mibit mibir

Hinweise:
Verwenden Sie zur Lösung der Aufgabe keine Methoden der Klasse String außer toCharArray() und String.valueOf()!

Vorgehensweise:

    • Wandeln Sie den an die Methode übergebenen String mit toCharArray() in ein char-Array um!
    • Ermitteln Sie, wie lang der zurückzugebende String sein muss und erzeugen Sie ein neues char-Array der entsprechenden Länge. Speichern Sie in diesem char-Array das Wort der B-Sprache.
    • Wandeln Sie das neue char-Array mit String.valueOf() zurück in einen String um und geben Sie diesen zurück.

Meine Lösung:

import java.util.Scanner;
public class BUmwandeln {

    public static String bEinsetzen(int vokallaenge, String vokale) {

        char[] ausgabe = new char[vokallaenge];
        char[] ausgabeTemp = new char[vokallaenge];
        ausgabeTemp = vokale.toCharArray();
        int ausgabenlaenge = bestimmenVonLaenge(vokallaenge, ausgabeTemp);
        ausgabe = bUmwandeln(ausgabeTemp, ausgabenlaenge, vokallaenge);
        String ausgabeSt = umwandelnVonSt(ausgabenlaenge, ausgabe);

        return ausgabeSt;
    }

    public static String umwandelnVonSt(int ausgabenlaenge, char[] ausgabe) {
        String ausgabeAlsString = "";
        for (int i = 0; i < ausgabenlaenge; i++) {
            ausgabeAlsString = ausgabeAlsString + String.valueOf(ausgabe[i]);
        }
        return ausgabeAlsString;
    }
    public static int bestimmenVonLaenge(int vokallaenge, char[] ausgabe) {
        int ausgabenlaenge = vokallaenge;
        for ( int i = 0; i < vokallaenge; i++) {
            if (ausgabe[i] == 65 || ausgabe[i] == 97 || ausgabe[i] == 69 || ausgabe[i] == 101 || ausgabe[i] == 73 ||  ausgabe[i] == 105 || ausgabe[i] == 79 || ausgabe[i] == 111 || ausgabe[i] == 85 || ausgabe [i] == 117) {
                ausgabenlaenge = ausgabenlaenge + 2;
            }
        }        return ausgabenlaenge;
    }

    public static char[] bUmwandeln(char[] ausgabeTemp, int ausgabelaenge, int vokallaenge) { //
        char[] ausgabe = new char[ausgabelaenge];
        int x = -1;
        for (int i = 0; i < vokallaenge; i++) {
            x++;
            ausgabe[x] = ausgabeTemp[i];
            switch (ausgabe[x]) {
                case 65:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 65;
                    x = x + 2;
                    break;
                case 97:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 97;
                    x = x + 2;
                    break;
                case 69:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 69;
                    x = x + 2;
                    break;
                case 101:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 101;
                    x = x + 2;
                    break;
                case 73:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 73;
                    x = x + 2; 
                    break;
                case 105:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 105;
                    x = x + 2;
                    break;
                case 79:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 79;
                    x = x + 2;
                    break;
                case 111:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 111;
                    x = x + 2;
                    break;
                case 85:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 85;
                    x = x + 2;
                    break;
                case 117:
                    ausgabe[x + 1] = 98;
                    ausgabe[x + 2] = 117;
                    x = x + 2;
                    break;
            }
        }
        return ausgabe;
    }

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("Geben Sie ein Wort mit vokalen ein!");
        String vokale = scanner.nextLine();            //Das Wort, wo das BSpiel gemacht werden soll.
        int vokallaenge = vokale.length();
        System.out.println(bEinsetzen(vokallaenge, vokale));
        scanner.close();
    }

}

Geht es auch einfacher? Finde meine Lösung ziemlich komplex und nervig

Ich denke dein Switch-Case lässt sich sehr viel einfacher formulieren.

Übung 1: Jedes Case führt immer den identischen Code aus, probiere das mal als eine gemeinsame Methode zusammen zu fassen. so das jedes case so aussieht:
case X: x = setChars(...);

Wenn du das hast, kannst du dir überlegen, wie du jetzt noch das gesamte switch-case los wirst. Tipp: Arrays.

Ein paar kleine Tipps:

  1. Anstatt
    if (ausgabe[i] == 65 || ausgabe[i] == 97 || ...
    kann man direkt schreiben
    if (ausgabe[i] == 'A' || ausgabe[i] == 'a' || ...
    Also die Zeichen, in Hochkomma, statt der Zahlen. Das ist viel lesbarer.

  2. Mach das, was ich in Tipp 1 geschrieben habe, nicht :slight_smile: Erstelle dir eine Methode
    private static boolean istVokal(char c) { ... }
    Da drin kann dann eine if-Abfrage oder ein switch stehen. (Und da drin kannst oder solltest du dann auch die Zeichen, wie 'A', anstatt der Zahlen verwenden).
    Der wichtige Punkt ist: Das kannst du dann wiederverwenden. Die Stelle, wo vorher diese lange, häßliche if-Abfrage aus Tipp 1 stand, könnte dann einfach so geschrieben werden:
    if (istVokal(ausgabe[i])) { ... }

  3. Wenn du diese istVokal-Methode hast, kannst du das switch auch vereinfachen (bzw. durch ein if ersetzen). Den Grund hatte TMII schon angedeutet: