Schleifen und Strings

bozz03

Mitglied
1.
Erstellen Sie einen neuen String, der aus der ursprünglichen Zeichenkette (str) besteht, die (times) mal aneinander gehängt wurde. Sie den neuen String zurück.

Das ist die Aufgabenstellung
Wir müssen das mit einer Schleife machen. Meine Lösung wird getestet mit JUnit.

Java:
package de.hs_weingarten.progp.uebung3.schleifen;

public class StrConcatTimes {

    public static String strConcatTimes(String str, int times) {

        int grenze = times - 1;

        for (int i = 1; i <= grenze; i++)
            str = str + str;
        return str;

Ich bekomme den Fehler nicht raus und komme nicht weiter
2.
Geben Sie eine neue Zeichenkette zurück, die gleich str ist, jedoch soll
die neue Zeichenkette keine direkt aufeinanderfolgende doppelten
Buchstaben enthalten.
Gehen Sie str Zeichen für Zeichen durch und nutzen Sie dazu wieder
charAt(). Bauen Sie die neuen Zeichenkette in dem Sie das aktuelle
Zeichen anhängen oder gegebenenfalls ignorieren
Wie oben auch wird meine Lösung mit JUnit getestet.
Java:
public static String strReplaceDuplicate(String str) {

        for (int i = 0; i <= str.length() - 1; i++)
            if (str.charAt(i) == str.charAt(i) + 1)
                str = str.replaceAll(str.charAt(i), "");

        return str;

Das funktioniert leider nicht weil er mir bei str = str.replaceAll(str.charAt(i), ""); ein Fehler ausspuckt das ich das so nicht machen darf.

Wäre für eure Hilfe dankbar
 

Joose

Top Contributor
Gewöhne dir an bei Schleifen und if-Bedingungen Klammern zu verwenden. Auch wenn diese vom Compiler bei einzeiligen nicht verlangt werden.
Dadurch minimierst du eine potenzielle Fehlerquelle ;) (ein passender Artikel dazu: http://www.spiegel.de/netzwelt/web/goto-fail-apples-furchtbarer-fehler-a-955154.html)


Ich bekomme den Fehler nicht raus und komme nicht weiter

Welchen Fehler denn?
Welches Ergebnis erwartest du, welches Ergebnis bekommst du?

Das funktioniert leider nicht weil er mir bei str = str.replaceAll(str.charAt(i), ""); ein Fehler ausspuckt das ich das so nicht machen darf.

Hier wäre es ganz praktisch wenn du uns verraten würdest welcher Fehler ausgespuckt wird ;)


Mit etwas mehr Informationen kann man dir sicher schnell helfen :)
 

Joose

Top Contributor
Tipp zu 1:
Lass dir nach jedem Schleifendurchlauf den Wert von "str" ausgeben und überlege dann warum es nicht klug ist den zusammengehängten Wert wieder der Variable "str" zuzuweisen ;)

Tipp zu 2:
Dokumentation lesen http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
Die Methode replaceAll erwartet 2 Strings als Parameter du lieferst char und string. Deswegen wird sich der Compiler beschweren.
Außerdem wirst du mit dieser Variante zuviel löschen -> replaceAll ersetzt alle Vorkommen! Egal wo du mit "charAt" gerade bist.
 

bozz03

Mitglied
Zu Aufgabe 1:
Ich soll den String H 3x mal hintereinander hängen damit HiHiHi rauskommt bei mir kommt HiHiHiHi raus d.h 1x Hi zuviel


Zu AUfgabe 2:
the method replaceAll(String, String) in the type String is not applicable for the type for the argument (char,String)

EDIT:
1.Ich füge einmal zuviel String hinzu aber ich hab keine Ahnung wie ich das beheben kann.

2. kann ich nur mit replace arbeiten? und wie wandle ich den char in ein String um?
 

Joose

Top Contributor
Zu beiden Aufgaben habe ich dir oben noch Tipps dazugeschrieben, bitte mal durchlesen ausprobieren und dann nochmal deine Antwort hier posten :)
 

Joose

Top Contributor
Zu Aufgabe 1:
Ich soll den String H 3x mal hintereinander hängen damit HiHiHi rauskommt bei mir kommt HiHiHiHi raus d.h 1x Hi zuviel

1.Ich füge einmal zuviel String hinzu aber ich hab keine Ahnung wie ich das beheben kann.

Deswegen auch mein Tipp, dir bei jedem Schleifendurchlaufen den Wert von "str" ausgeben zu lassen.
Aber strußi hat dir leider schon die Lösung verraten :(

2. kann ich nur mit replace arbeiten? und wie wandle ich den char in ein String um?
Nein replace ist auch die falsche Variante. Wie man einen char in String umwandelt kann man in Grundlagenbücher oder per Google gut finden (-> Eigeninitiative).
 

bozz03

Mitglied
Bei der zweiten Aufgabe komme ich trotzdem nicht weiter. Hocke schon seit paar Stunden drauf. Habt ihr Tipps für mich wie ich drauf kommen könnte? (Artikel in Deutsch bitte)

sowas wie deleteCharAt gibt es nicht oder?
 

Joose

Top Contributor
Mache es doch ähnlich wie bei Aufgabe 1.
Anstatt bei deinem Start String etwas zu löschen baue dir doch einen neuen zusammen indem du char für char hinten anfügst.
Natürlich dabei überprüfen das keine doppelten angefügt werden (zählervariable erhöhen)
 

bozz03

Mitglied
Code:
    public static String strReplaceDuplicate(String str) {
        String neu = "";
        for (int i = 0; i == str.length() - 1; i++) {
            if (str.charAt(i) != str.charAt(i + 1)) {
                neu = new StringBuffer().append(str.charAt(i)).toString();
            }
        }
        return neu;

    }
}
Also das zweite l von Hallo wird weggelassen, aber neu besteht nur aus einem buchstaben (verständlich).
Bin dennoch auf dem Holzweg oder? Hocke solang schon vor dem PC und check es immernoch nicht :D

Edit:Falscher Code
 

Joose

Top Contributor
Naja du musst natürlich schon dafür sorgen das der bisherige Wert von "neu" nicht verloren geht.
Wie hast du es denn bei Aufgabe 1 geschafft das der bisherige Wert nicht verloren geht und du immer wieder was dranhängen kannst?
 

Neue Themen


Oben