string rekursiv aufrufen möglich?

drpingoo

Erfahrenes Mitglied
Hallo zusammen!

Ich arbeite grad an einer Fkt. rum, die eingegebene Strings in die Kommandozeile alphabetisch ordnen soll. Ich muss jedoch ein Array mit String-Objekten verwenden. Wie kann ich es anstellen, dass ich es, wie oben erwähnt, meine Strings mit der Kommandozeile einlesen kann? Und wie kann ich die Fkt. rekursiv aufrufen?

lg

PHP:
  public void sort(String[] str) {   //Da hats auch nen Fehler drin! Weiss aber nicht wieso
		 
		  
		 /* if ( i < 2) 
		  {
			  return;
		  }
		  */  
		  boolean p = true; 
		
		 
		  String temp;
		  
		 int i;
		  for(  int j=1 ; j < i; j++)
		  {
			  if( (str[ j - 1].compareTo( str[ j]))>0)
		      {
				  p = false;
				  temp = str[ j - 1];
				  str[ j - 1] = str[ j]; 
				  str[ j] = temp;
		      }
		  }
		    
		  if(!p)
		  {
			  sort(str-1);
		  }
	  }
 
Hallo,
an die Parameter die in der Kommandozeile eingegeben wurden (z.B. über java sorter A B C) kommt du über den Parameter der main()-Funktion ran (meist sieht die main()-Funktion so aus main(String[] args); also über args.
Wenn du im laufenden Betrieb einlesen möchtest, so geht das über System.in.read()...
Was die Sortierung betrifft, so suche doch mal bei Google nach 'BubbleSort rekursiv' oder 'MergeSort rekursiv'...
Gruß,

Martin
P.S. Wenn dir das zu ungenau ist, so melde dich noch einmal, kann dir dann auch ein Beispiel machen...
 
Zuletzt bearbeitet:
ok, danke:). Und das macht kein Unterschied, ob ich das vorher eingebe oder erst während es läuft? Sieht jemand denn Fehler, wieso es so rekursiv nicht geht?

lg
 
Hi,

Es hat da noch 2 Fehler drin. Wie kann ich den String rekursiv aufrufen und was muss ich in der main-Methode bei der Methode sortieren in die Klammer schreiben, denn args stimmt iwie nicht, aber, wenn ich strArr reinschreibe, funktionierts auch nicht.

Danke schon im Voraus

lg

PHP:
package array;

//import java.util.*;
/**
* Informatik II - SS2007 <br>
* Uebungsserie 2, Aufgabe 1 <br>
* Template for class SortArray.java <br>
*
* @author Silvia Santini
*/

public class SortArray {
  // int-Array (15 elements)
  int[] a = new int[15];
  int myarray;
  
void sortieren(String []strArr ){
	
	  boolean p = true; 
	  int speicher;
	  int i=0;
	  
	  
	  for(int j=0; j<strArr.length; j++){
		  
		  
			  if( strArr[ j - 1].compareToIgnoreCase(strArr[ j])>0)
		      {
				  p = false;
				  String temp = strArr[ j - 1];
				  strArr[ j - 1] = strArr[ j]; 
				  strArr[ j] = temp;
		      }
		  }
		    
		  if(!p)
		  {
			  sortieren(i - 1);//das hier funtioniert nicht
		  }
	  }
		

    
		  public static void main (String[] args){ 
      sortieren(args); //das hier geht nicht
      // An instance of the class SortArray need to be created
      // to access class' Methods
   

      // Call to method methodName with s.<methodName>
      // Initialize:
   

      System.out.println("Array not sorted:");
      // Output, not sorted:
      
   
      
      
      // Sorting (Which parameter as input?)
   

      System.out.println("Array sorted:");
      // Output, sorted:
     
   }
 }
 
Hallo

wenn die Methode

Code:
 void sortieren(String []strArr ) { . . . }

einen Array of String als Parameter erwartet und du die Methode mit

Code:
sortieren(i - 1);

aufrufst, erwartest du aber nicht wirklich das das Funktioniert !

Das ist nicht Java-Syntax, das ist Käse ! i ist ein int !

In Bezug auf deinen ersten Code wäre es dann ...

Code:
sortieren(strArr-1);

Was soll da rauskommen ? Ein String-Array minus 1 ?
Soll da etwa ein Element aus dem Array verschwinden ?
So wird das aber nix !

Gruß JAdix
 
Hallo,

Ja, ich weiss, ich mach noch grobe Fehler. Ich hab einfach Mühe damit. Obwohl ichs gerne mache, liegt es mir iwie nicht. Was würdest du stattdessen vorschlagen?

lg
 
Zuletzt bearbeitet:
Hallo,

so evtl. :

Code:
public class SortArray {

	void sortieren(String []strArr ){
	    
		  boolean sort = false;
		  String temp = null;
		
	      for(int j=1; j<strArr.length; j++){
	          	          
	              if( strArr[j-1].compareTo(strArr[j])>0)
	              {
	                  sort = true;
	                  temp = strArr[j-1];
	                  strArr[j-1] = strArr[j]; 
	                  strArr[j] = temp;
	              }
	          }
	            
	          if(sort)
	          {
	              sortieren(strArr);
	          }
	      }
	  
	void anzeigen(String []strArr ){
	    
		for(int j=0; j<strArr.length; j++){
	          
			System.out.print(strArr[j]+",");
		}
		System.out.println();
	}
		
	
	      public static void main (String[] args){
	      	
	      	SortArray sa = new SortArray();
	   
	        System.out.print("Array not sorted: ");
	        sa.anzeigen(args);
	      	
	        sa.sortieren(args);

	      	System.out.print("Array sorted: ");
	        sa.anzeigen(args);
	   }
	 }

Obwohl man hier die Rekursion durch ne einfache Schleife ersetzen könnte !
Also so richtig Rekursiv ist für meinen Geschmack was anderes !

Gruß JAdix
 
Es funktioniert^^. Vielen Dank! Ich hab noch eine Frage, wieso setzt du jetzt boolean gleich false und wie muss man sich das vostellen, wenn du die Methode sortieren aufrufst, ohne was zu verändern?

lg und nochmals danke :)
 
Hi,

ich setze das sort-Flag zu beginn auf false.

Wenn aber wenigstens ein austausch von Elementen stattgefunden hatt,
dann war die Liste noch nicht sortiert, also im if-Block das sort-Flag auf true.

Nach dem durchlauf teste ich das Flag und wenn es gesetzt ist, dann
sortiere ich weiter (Rekursiv).

Wenn ein durchlauf ohne Tausch endet, dann ist die Liste sortiert -ENDE- !

Gruß JAdix

PS : Nach dem Bubblesort, was kommt jetzt ? Quicksort ? Bin schon gespannt ! :-)
 
Ah ok, danke. Nein, momentan steht ein Binärbaum mit Linksklammerdarstellung als Aufgabe, mal sehen, wies so laufen wird...

cheers:)
 
Zurück