StringArray verlgeichen

Thisor

Bekanntes Mitglied
Hallo,
bin neu hier, ein Java-Anfänger und will das programmieren lernen :)
Ich bin gerade dabei eine Aufgabe zu lösen:
Ein String Array ist vorgegeben und ich soll den string durchlaufen und die längste Zeichenkette raussuchen.
Bei einem int/double etc Wert hätte ich es in etwa so programmiert:
Java:
int sum = 0;
for(int i = 0; i < numbers.length; i++){
if(numbers >= numbers[i+1]){
sum = numbers;
}
Die Schleife durchläuft ja jedes Element in dem Array und überprüft dann die größe.
Beim String muss es aber zusätzlich die Zeichenkette mitzählen und dann mit dem rechtsstehenden Wort die Zeichenkettenanzahl miteinander vergleichen.

Komme da nicht weiter. Würde mich um hilfe freuen :)
lg
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Hi,

wenn Du den längsten String suchst, dann musst Du erst einmal wissen, wie Du die Länge eines Strings ermitteln kannst. Hast Du da schon eine Möglichkeit gefunden?

Und bei Deinem Code ist mir unklar, was Du da genau machen willst:
- wenn numbers dein Array ist, dann kannst Du da keine einzelne Zahl zuordnen.
- wenn du das Array durchläufst, dann musst Du aufpassen, dass Du innerhalb des Arrays bleibst. Also prüfen, was der höchste Wert von i ist und wenn Du auf das Element i+1 zugreifst: Ist das noch innerhalb des arrays?

Ansonsten versuch Dich doch einmal an der Thematik selbst. Wenn Du konkrete Probleme bekommst, dann können wir Dir auch deutlich besser helfen als jetzt im Augenblick.

Konrad
 

KaffeeFan

Bekanntes Mitglied
Pack die Längen der Strings die du vergleichen willst doch z.B. in Integer-Werte und teste ob sie den gleichen Wert haben.

Gruß
Luk
 

Thisor

Bekanntes Mitglied
Also die länge eines Strings würde ich durch .length ermitteln. Aber ich habe das so verstanden, dass wenn ich mit .length in ein Array durchlaufe, dann gibt es mir nur die Anzahl der vorhandenen Elemente durch.
Bsp:
String marke = {"BMW", "Audi", "Mercedes"}; //länge 4

- Beispiel oben gehe ich doch durch jedes Element durch und überprüfe ob numbers (also 0, da i in der schleife auf 0 gesetzt ist, und überprüfe ob es an der Stelle i+1, also an der rechtenstelle von i), größer gleich ist, wenn ja, dann soll es in sum speichern. Und das macht er solange bis er die Schleife durchgelaufen ist, so interpretier ich das zumindest. Hab ich ein Denkfehler?

- Stimmt, die Schleife oben ist falsch, würde ein out of Bounce exception kommen, richtig wäre es
for(int i = 0; i <numbers.length -1 ; i ++)
 

KaffeeFan

Bekanntes Mitglied
numbers[z].length();

Wenn z=0 ist, gibt er die die Länge des ersten Strings aus dem Array usw...

Edit: Es heißt OutOfBounds, Bound=Grenze

Gruß
Luk
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

ui, hier geht ja noch so einiges durcheinander ;)

Also die länge eines Strings würde ich durch .length ermitteln.
Aber ich habe das so verstanden, dass wenn ich mit .length in ein Array durchlaufe, dann gibt es mir nur die Anzahl der vorhandenen Elemente durch.
Das ist so (mehr oder weniger) richtig!
"myString.length()" ist eine Methode, die Dir die Länge eines Strings liefert ("The length is equal to the number of Unicode code units in the string")
"myArray.length" ist ein Integer-Wert mit der Anzahl der Elemente im Array

String marke = {"BMW", "Audi", "Mercedes"}; //länge 4
Warum sollte das Länge '4' sein ?? :eek:
marke[0] = BMW
marke[1] = Audi
marke[2] = Mercedes

die Schleife oben ist falsch, würde ein out of Bounce exception kommen, richtig wäre es
Java:
for(int i = 0; i <numbers.length -1 ; i++)
Na fast, es gibt es aber nur eine OutOfBound-Exception :D

Sonst ist die Idee schon richtig, beim vorletzten Element aufzuhören, da es ja beim letzten keinen Nachfolger mehr gibt!
Grundsätzlich sollten bei Dir immer die Alarmglocken schrillen, wenn Du in einer Schleife auf einen Index GRÖSSER als den maximalen Schleifenindex (etwa mit i + 1) zugreifst!! Das führt dann fast immer irgendwann zu einem solchen Problem.

Gruß Klaus
 

JStein52

Top Contributor
Nur mal der Vollständigkeit halber:

Java:
String marke = {"BMW", "Audi", "Mercedes"}; //länge 4

ist schon syntaktisch falsch. Müsste wenn schon dann so aussehen:

Java:
String[] marke = {"BMW", "Audi", "Mercedes"}; //länge 4

Und dann ist marke.length 3 !!!
 

Thisor

Bekanntes Mitglied
huijajui...
mein Fehler, war da noch nicht so fit, sorry. Hoffe dass ich jetzt konzentrierter bin x).
Die Länge ist in dem Fall 3 und nicht 4 :p wollte 4 Marken schreiben, hab eine vergessen - ups.
Und jup, die eckigen Klammern haben auch gefehlt bei String.

Also nochmal, im Fall für String
Java:
String str = ""; //da wird der neue String eingespeichert
String[] marke = {"Audi", "BMW", "VW", "Mercedes"}; //länge 4
//schleife damit ich an jedes Element gelange
for(int i = 0; i < marke.length()-1; i++){
//jetzt will ich  ja das erste Element mit den darauffolgendem Wert vergleichen.
//das was größer ist, soll übernommen werden, und das wiederhole ich bis zum schluss bis ich durch bin.
//das Element mit der größten Zeichenkette soll ausgegeben werden. Also würde ich jetzt mit if arbeiten:

if(marke[i] <= [marke[i+1]){      
str += marke[i];
}



wo liegt mein Denkfehler? Oder muss ich mir Theorie reinpauken?
PS: Wie kann ich die Codes in Code-Blöcke umwandeln? :)
lg
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

String[] marke = {"Audi", "BMW", "VW", "Mercedes"}; //länge 4
Richtig :)

//schleife damit ich an jedes Element gelange
for(int i = 0; i < marke.length()-1; i++){
Richtig :)

Java:
if( marke <= [marke[i+1] )
{     
    str += marke;
}
wo liegt mein Denkfehler? Oder muss ich mir Theorie reinpauken?
Dein Gedankenfehler ist, dass Du zunächst stumpf die Array-Variable nimmst (falsch!!), dann aber eine konrekte Stelle im Array ansprichst (richtig) (wobei hier auch noch ein '[' zuviel ist!!). Korrekt wäre es so:
Java:
if( marke[i] <= marke[i+1] )
{     
    str += marke[i];
}

PS: Wie kann ich die Codes in Code-Blöcke umwandeln? :)
Was genau meinst Du damit ??? :rolleyes:

Gruß Klaus
 

VfL_Freak

Top Contributor
@Joose ok, so gesehen .... ist wohl doch nicht mein Tag :cool:

und was ich eben vergaß:
Java:
if( marke[i] <= marke[i+1] )
DER Vergleich geht so natürlich auch nicht!
Wenn Du ja die Längen der Strings vergleichen willst, dann musst Du sie auch nehmen ;)
Java:
if( marke[i].length() <= marke[i+1].length() )

Gruß Klaus
 

Thisor

Bekanntes Mitglied
Dann wäre das so korrekt?

Java:
for (int i = 0; i < strings[i].length(); i++) {

       if (strings[i].length() <= strings[i + 1].length()) {

         strings = strings[i].length();

       }
       return strings;

     }

   }

vg
 
K

kneitzel

Gast
Thisor: Compiliert es? Macht es das, was es soll?

Darüber kannst Du doch jederzeit selbst feststellen, ob es korrekt ist oder eben nicht.

Wobei ich meine, dass Du einmal überlegen solltest:
- Was willst Du genau machen? Hier kann ich nicht oft genug sagen: Spiel es auf einem Zettel einmal selbst durch!
- Überleg, was genau macht Dein Code?

Das sind ein paar Grundlagen, die Du selbst machen musst. Wenn Du ein Problem hast, dann kannst Du es im Detail beschreiben und dann können wir Dir helfen. Dabei solltest Du aber auch genau lesen, was so geschrieben wurde. So bezweifle ich nur nach lesen des Threads, dass der Code so ok ist, denn es ist ja im Thread gesagt worden, dass bei der Länge des Arrays hinter das .length keine Klammern gehören. Und die Zuweisung strings = strings.length() ist wohl auch nicht wirklich compilierbar, denn entweder strings ist ein Array oder es ist ein Integer.

Konrad
 

Thisor

Bekanntes Mitglied
..nicht mein Tag.
Ich probiere das mal durch, mit blatt und stift, und schreibe dann morgen wie weit ich gekommen bin.

Gute Nacht und danke erstmal
 

Thisor

Bekanntes Mitglied
Okay, ich glaub ich check´s nicht..ich komme nicht weiter.


Ich benutze String.length(); wenn ich ein Datentyp von String ohne array habe.
Mit der for-Schleife gehe ich durch die Zeichenkette und ermittle die Anzahl, bzw. eben die Länge des Strings.

Bei
String str = "HalloWorld"; //wäre die Länge 10
Wenn ich ein Array von Typ String habe, kommt in der for-Schleife keine runden Klammer vor.
Also
String[] str2 = {"HalloWorld"}; // kommt 1 raus, im Index 0.
Ich komme nicht weiter als :

Java:
  public static String[] replaceEmptyString(String strings[]) {

String str = "";


//strings.length - 1 deshalb, weil ich in der if-Anweißung [i+1] habe und somit ein OutOfBounds //verhindern mag
     for (int i = 0; i < strings.length -1 ; i++) {

//mit der Anweißung will ich, dass es die i-te Stelle (i ist mit 0 initialisiert) das nächste Element vergleicht, also (i+1)
//wenn größer, dann soll strings das in str einspeichern und die forSchleife soll das gesamte Array durchlaufen
       if (strings[i].length() <= strings[i + 1].length()) {
//allerdings wenn ich´s im debugger richtig verstanden habe, vergleicht er nur diese 2 stellen und geht //nicht weiter
 

//hier will ich das neue Wort zuweißen, der Parameter und alles andere ist vorgegeben, es wird erwartet //ein String zurück zu geben und kein int-Wert, das gehört so zur Aufgabe. Daher auch String str und //nicht int anzahl; zum Beispiel
//anschließend muss ich es mit JUnit durchlaufen 


  str = strings[i];

       }
       return str;

     }

EDIT: Ich bekomme immer ein Compiler-Fehler, bzw Eclipse zeigt mir was rotes an. Fixes werden so vorgeschlagen, indem ich den Parameter bzw die Funktion umschreibe. Dies ist aber nicht erlaubt und würde glaub auch nicht funktionieren, da die JUnit Test´s mir immer Falsch somit ausgeben würde.

EDIT2: Sehe gerade das ein StringArray erwartet wird,
also String[] str ;
Wenn ich also den String zu String[] umwandle, ist die rechte Seite von

str = strings.length

falsch. Eclipse will das ich String[] zu String caste und Strings im Parameter zu Strings[] umänder. Paramenter darf ich ja aber nicht ändern...*grüml*
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

so wirklich habe ich deinen Post nicht verstanden :(

Mit der for-Schleife gehe ich durch die Zeichenkette und ermittle die Anzahl, bzw. eben die Länge des Strings.
Nein!!
Du läufst nicht durch eine Zeichenkette, sondern durch die Elemente des String-Arrays !!
"strings.length" ist die Anzahl der enthalten Elemente (also die Anzahl der enthaltenen Strings) und NICHT die Stringlänge !!
"strings[0].length()" würde die Anzahl der Zeichen im ersten String liefern .....

String[] str2 = {"HalloWorld"}; // kommt 1 raus, im Index 0.
Was ja auch korrekt ist, da genau ein String enthalten - eben am Index '0'

EDIT: Ich bekomme immer ein Compiler-Fehler, bzw Eclipse zeigt mir was rotes an. Fixes werden so vorgeschlagen, indem ich den Parameter bzw die Funktion umschreibe. Dies ist aber nicht erlaubt und würde glaub auch nicht funktionieren, da die JUnit Test´s mir immer Falsch somit ausgeben würde
Du musst die auftretenden Compilerfehler schon posten - alle Glaskugeln sind zurzeit im Außendienst :p

Gruß Klaus
 
K

kneitzel

Gast
Also ich habe auch Probleme Dir hier zu folgen. Ich unterstelle jetzt erst einmal, dass die eigentliche Aufgabe unverändert ist und Du somit die längste Zeichenkette finden musst. Wenn Du also ein Array hast mit den folgenden Zeichenketten:
"22"
"1"
"55555"
"4444"
"333"
dann sollte die Zeichenkette "55555" gefunden werden.

Und nun spielen wir einfach ein kleines Spiel: Wie findest DU die längste Zeichenkette? Was machst Du genau? Kannst Du uns dies einmal schreiben? Du gehst die Liste Zeile für Zeile durch und machst was? Was merkst Du Dir? Was vergleichst Du?

Könntest Du dies einmal versuchen und uns schreiben? Also erst einmal kein Java!

Konrad
 

Thisor

Bekanntes Mitglied
Moin,

so wirklich habe ich deinen Post nicht verstanden :(


Nein!!
Du läufst nicht durch eine Zeichenkette, sondern durch die Elemente des String-Arrays !!
"strings.length" ist die Anzahl der enthalten Elemente (also die Anzahl der enthaltenen Strings) und NICHT die Stringlänge !!


Gruß Klaus

Doch :p mein String ist in dem Beispiel kein Array-String, sondern ein normaler String
 

VfL_Freak

Top Contributor
What ??
Ich weiß ja nicht, welche Zeile DU jetzt meinst, aber hier
Java:
public static String[] replaceEmptyString(String strings[]) 
{
     for (int i = 0; i < strings.length -1 ; i++)
ist 'strings' eindeutig ein Array !!!
Eine weitere for-Schleife sehe ich nicht ..... :confused:

Gruß Klaus
 

Thisor

Bekanntes Mitglied
Sorry für doublepost

Also ich habe auch Probleme Dir hier zu folgen. Ich unterstelle jetzt erst einmal, dass die eigentliche Aufgabe unverändert ist und Du somit die längste Zeichenkette finden musst. Wenn Du also ein Array hast mit den folgenden Zeichenketten:
"22"
"1"
"55555"
"4444"
"333"
dann sollte die Zeichenkette "55555" gefunden werden.

Und nun spielen wir einfach ein kleines Spiel: Wie findest DU die längste Zeichenkette? Was machst Du genau? Kannst Du uns dies einmal schreiben? Du gehst die Liste Zeile für Zeile durch und machst was? Was merkst Du Dir? Was vergleichst Du?

Könntest Du dies einmal versuchen und uns schreiben? Also erst einmal kein Java!

Konrad
Ich dekliaiere bzw initialisiere ein neuen String mit String str = "";
ich gehe mit der forSchleife durch, setzte i an stelle 0, da ich ab dem ersten Element alle anderen Elemete vergleichen mag.
Dann fange ich mit der Bedingnug an, wenn das erste Element länger oder gleich als die zweite ist, wenn es zutrifft, speichere ich dies im str ab und vergleiche nun den gespeicherten String mit dem nächsten Element.
 

Thisor

Bekanntes Mitglied
What ??
Ich weiß ja nicht, welche Zeile DU jetzt meinst, aber hier
Java:
public static String[] replaceEmptyString(String strings[])
{
     for (int i = 0; i < strings.length -1 ; i++)
ist 'strings' eindeutig ein Array !!!
Eine weitere for-Schleife sehe ich nicht ..... :confused:

Gruß Klaus
Oben drüber ist doch der Satz wo ich sage dass ich String.length() benutze wenn String kein Array ist und ich die länge des Strings bzw zeichenketten haben mag.
Und im Code habe ich doch ohne Klammern Strings.length -1 benutzt da in dem Programm Code ein Array vorgegeben ist.
Versteh ich´s nicht oder sorge ich zu sehr um Verwirrung?
 
K

kneitzel

Gast
Thisor:
Ok, damit hast Du ja jetzt einen Algorithmus, den Du umsetzen kannst.
Wollen wir einmal Deinen Code etwas mit dem, was Du geschrieben hast, vergleichen:
Du willst den gespeicherten String mit einem Wert aus dem Array vergleichen. Was steht aber in Deinem Code? Was vergleichst Du dort? Evtl. siehst Du da jetzt einen kleinen Fehler.

Konrad
 

VfL_Freak

Top Contributor
Versteh ich´s nicht oder sorge ich zu sehr um Verwirrung?
Letzters ... :)

Nochmal:
Mit der for-Schleife gehe ich durch die Zeichenkette und ermittle die Anzahl, bzw. eben die Länge des Strings
Nein!! Das ist falsch!
Du läufst nicht durch eine Zeichenkette, sondern durch die einzelnen Elemente des String-Arrays!!

wenn String kein Array
Die Aussage ist völlig unsinnig, da ein String nie ein Array sein kann!!

"String" ist der Datentyp, der eine Zeichenkette / eine Menge von chars bezeichnet.
Ein "String" kann eine Länge haben, nämlich die Anzahl der enthalten einzelnen Zeichen
Beispiel:
Java:
String myString = "blablub";
So, "myString" ist eine Zeichenkette mit der Länge 7!
Ermitteln kann Du sie mit "myString.length()"

Eine gute Erklärung für Arrays findest Du hier: http://www.java-tutorial.org/arrays.html
Die Arraylänge ("myArray.length") liefert immer nur die Anzahl der enthalten Elemente!!

Gruß Klaus
 

JStein52

Top Contributor
Ich glaube hier redet jeder von einem anderen Code. Und alle reden aneinander vorbei.
Dein Algorithmus soll doch folgender sein:

Du hast ein array von String's und du gehst dieses Array in einer Schleife durch und merkst dir in einer weiteren String-Variablen den bisher längsten String. Initialisiert wird dieses Variable mit "" (Leerstring).

schreibe doch mal den entsprechenden Code dazu und poste ihn hier wieder. Dann ist jeder auf dem gleichen Stand !

Und wieso heisst deine Methode jetzt plötzlich replaceEmptyString ? Ich denke du willst den längsten String in einem Array suchen. Dann solltest du sie vielleicht findLongestString nennen ?
 
Zuletzt bearbeitet:

Thisor

Bekanntes Mitglied
Okay, das ist mir jetzt etwas peinlich! :D

Die Methode heisst replaceEmptyString weil in dem Array eine Reihe von Elementen ist, und eins davon ist leer, also " "
und diese soll ersetzt werden aus dem Element der dem meisten Zeichenketten

Somit ist die Schleife zwar geblieben, jedoch musste ich den rest ändern, und zwar :


Java:
for (int i = 0; i < strings.length; i++) {

if (strings[i].equals("")) {
   
if (i != strings.length - 1){ 

int temp = i + 1;
int max = strings[i + 1].length();
           for (int j = i + 1; j < strings.length; j++) {
             if (max < strings[j].length()); {
               max = strings[j].length();
               temp = j;
             }
           }
           strings[i] = strings[temp];
         }
       }
     }
     return strings;
   }
}

Hat dann doch geklappt, wobei zugegeben ich mich doch schwer getan habe damit alle JUnit-Tests stimmen. Sorry für die Verwirrung! Hab´s irgendwie nicht geblickt -.- ", erst nachdem JStein52 mich auf den Methodennamen hingewiesen hat :p

Liebe Grüße!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Stringarray an Java Basics - Anfänger-Themen 1
N StringArray alphabetisch sortieren Java Basics - Anfänger-Themen 4
M Umwandlung von StringArray in String Java Basics - Anfänger-Themen 2
F Freier Index im Stringarray Java Basics - Anfänger-Themen 3
A Wie kann man einen zufälligen String aus einem StringArray auswählen? Java Basics - Anfänger-Themen 6
P StringArray mit String befüllen Java Basics - Anfänger-Themen 3
G Objekte aus ArrayList in StringArray konvertieren?! Java Basics - Anfänger-Themen 13
M set<String> in ein StringArray umwandeln? Java Basics - Anfänger-Themen 3
J Datentypen Umwandlung von Arraylist in ein StringArray Java Basics - Anfänger-Themen 10
S ermitteln eines Wertes im StringArray Java Basics - Anfänger-Themen 4
J Stringarray als Funktionsparameter Java Basics - Anfänger-Themen 6
A Stringarray toString Java Basics - Anfänger-Themen 5
D OOP StringArray in doubleArray konvertieren Java Basics - Anfänger-Themen 13
K Scanner -> StringArray Java Basics - Anfänger-Themen 7
M StringArray "AA" "AB" "AC". Java Basics - Anfänger-Themen 8
A Stringarray formatieren Java Basics - Anfänger-Themen 2
G Stringelemente in Stringarray verteilen. Java Basics - Anfänger-Themen 3
G Stringarray durch was ersetzen? Java Basics - Anfänger-Themen 14
M StringArray[][] Java Basics - Anfänger-Themen 4
J String -> Stringarray Java Basics - Anfänger-Themen 5
K Stringarray zu Vector hinzufügen Java Basics - Anfänger-Themen 2
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
F Datentypen 3 Strings lexikalisch miteinander verlgeichen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben