Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind.

Lazyyy

Mitglied
Hallo zusammen,

folgendes: Bei meiner Aufgabe geht es darum das ein übergebenes String Array darauf getestet wird ob die einzelnen Strings der Reihe nach aufsteigend sind von ihrer Länge her.
Rückgabe wenn richtig true sonst false.

Meine Idee: die Strings in chars umzuwandeln und anschließend die Länge der einzelnen Einheiten im Char-Array zu vergleichen.
Code:
public boolean aufsteigendSortiert(char[] a)
  {
     for (int i = 0; i < a.length-1; i++) {
           if (a[i] > a[i+1]) {                    // für int[] array allerdings bei char Planlos
              return false;
           }
     }
     return true;
  }
 
Zerlege doch die Aufgabe.
1. Schreibe einen Algorithmus, der dir überprüft ob ein int-array aufsteigend sortiert ist
2. Schreibe einen Algorithmus der dir dein String-array in ein array mit deren Länge umwandelt (Tipp: String.length() gibt dir die Länge eines Strings zurück)
3. Schritt 2 aufrufen -> Resultat in Schritt 1 überprüfen
4. Fertig
 
Code:
public static boolean sortierenNachLaenge(String[] strings) {
       
       int[] intArray = new int[10];           // Kann laenge nicht bestimmen (Liste?)
       for(int i = 0; i < strings.length;i++){
           intArray[i] = strings.length[i];     //??
       }
       
       for(int i = 0; i < intArray.length; i++){
           if(intArray[i]< intArray[i+1]){
               return true;
           }
   return false;
       }
   }

Komme an dieser Stelle nicht weiter.
 
Ein Arrayzugriff passiert mit String str = strings[i]; und die Länge von einem String ist int strLength = str.length();.[/i]
 
so müsste es meiner Meinung nach funtionieren allerdings fehlt ihm ein Return Statement.: Warum?
Code:
int hilfe = strings.length;
       int[] intArray = new int[hilfe];       
       
       for(int i = 0; i < strings.length;i++){
           String str = strings[i];
           intArray[i] = str.length();   
       }
       
       for(int j = 0; j < intArray.length; j++){
           if(intArray[j]< intArray[j+1]){
               return true;
           }
       
   return false;
       }
 
Wenn deine 2. for-Schleife nicht betreten wird (bspw wenn dein intArray die Länge 0 hat), kann er auch keine return-Anweisung finden.
 
Code:
public static boolean sortierenNachLaenge(String[] strings) {
       
       int laenge = strings.length;
       int[] intArray = new int[laenge];   
  
       for(int i = 0; i < strings.length;i++){
           String str = strings[i];
           intArray[i] = str.length();
       }
       for(int j = 0; j < intArray.length; j++){
           if(intArray[j]< intArray[j+1]){
               return true;
           }
       }
   return false;
   }

Ok vielen Dank schon einmal.
Der Code funktioniert fast.
4 von 7 übergebenen Beispiel String Arrays erkennt er richtig. Leider kann ich diese nicht sehen. Sieht noch jemand einen Fehler.
 
Geh doch nochmal die zweite Schleife durch. Checkt sie alle Stellen im Array? Es sollte doch so sein, wenn eins nicht passt sollte sofort false geliefert werden. Falls alles passt, dann sollte true zurückgegeben werden.
 
Code:
public static boolean areSortedByLength(String[] strings) {
       
       int hilfe = strings.length;
       int[] intArray = new int[hilfe];   
       
       if(strings.length == 0){
           return false;
       }
       
       for(int i = 0; i < strings.length;i++){
           String str = strings[i];
           intArray[i] = str.length();
       }
       
       for(int j = 0; j < intArray.length; j++){                  //warum j++ dead code
           if(intArray[j]< intArray[j+1]){
               return true;
           }else{
               return false;
           }
       }
   return false;
   }

5/7 Test funktionieren allerdings weis ich nicht warum j++ dead code ist und wo es noch fehlt.
 
j++ ist dead Code weil auf jeden Fall nach einem Durchlauf die Methode mit einer return Anweisung verlassen wird.
Es kommt also nicht zu mehr als einem Schleifendurchlauf.
 
IF ... ELSE bedeutet dass in jedem erdenklichen Fall etwas gemacht wird.
Für dich heißt es dass auf jeden Fall die Methode in der for-Schleife im ersten Durchlauf mit einer return Anweisung beendet wird.
Was du brauchst ist aber: Verlasse die Methode nur wenn etwas gefunden wurde, ansonsten mache weiter.
 
egal wie ich es drehe verlässt er die schleife.
Eine while schleife funktioniert so auch noch nicht. Vllt stehe ich einfach auf dem Schlauch..
wäre um die Lösung Dankbar ärgere mich schon viel zu lang mit der "kleinen" aufgabe :/
 
Mach den else Zweig weg und return in der Schleife nur dann ( mit false ) wenn du ein Paar findest welches nicht aufsteigend sortiert ist. Solltest du die Liste ohne return durchlaufen haben musst du ganz am Ende noch true zurück geben.
 
Warum eigentlich so kompliziert ? Geht doch so:
Code:
        String[] myStrings = {"abcde", "abdcfg", "aaabbbcccddd" };
              
        for (int i=1; i<myStrings.length; i++) {
            if (!(myStrings[i-1].length()<=myStrings[i].length())) {
                return false;
            }
        }
        return true;
 
Im übrigen sollte er in deiner zweiten Schleife an der Stelle:
Code:
if(intArray[j]< intArray[j+1])
jedesmal eine Exception schmeissen 🙁🙁
 
Warum eigentlich so kompliziert ? Geht doch so:
Code:
        String[] myStrings = {"abcde", "abdcfg", "aaabbbcccddd" };
             
        for (int i=1; i<myStrings.length; i++) {
            if (!(myStrings[i-1].length()<=myStrings[i].length())) {
                return false;
            }
        }
        return true;
Lerneffekt? Aha-Erlebnis? ... Er hatte es schon fast
 
Es kommen noch so viele Aufgaben die mich verzweifeln lassen werden und hofftl den aha Effekt mit sich bringen.
Hab die aufgabe auf jeden Fall soweit verstanden 😀 und bin Dankbar..
 

Neue Themen


Zurück
Oben