# String - einzelne Zeichen sortieren



## Jupp (1. Jun 2006)

Hallo zusammen,

ich habe in meiner Ausbildung die Aufgabe die Zeichen einer String varbiable per Bubble Sort Verfahren alphabetisch zu sortieren... Das Programm was ich habe, kann jedoch nur einzelne Wörter sortieren, nicht aber DIE ZEICHEN (Buchstaben) eines Wortes.

Der Quellcode sieht so aus:


```
class Bubble{
	public static void main(String[] args){
		String[] r;
		int i;
		String tmp;
		boolean done;
		
		r = new String[]{"Daniel", "Christian", "Mark"};
		
		do{
			done = true;
			for(i=0; i<r.length-1 ; i++){
				if(r[i].compareTo(r[i+1]) > 0){
					tmp= r[i]; r[i]=r[i+1]; r[i+1]=tmp;
					done= false ;
				}
			}
		}while(!done);
		
		for(i=0; i<r.length;i++){
			System.out.println(r[i]+ " ");
		}
	}
}
```
Das funktioniert auch soweit! Aber es sollte eben SO laufen, dass r nur aus einem Begriff (z.B. Daniel) besteht und die Ausgabe zum ende dann so aussieht. "aDelin"

Das einzige was ich finden kann ist die charAt Methode.. aber ich habe keine Ahnung, wie ich diese nun verwenden kann/soll. Wäre sehr nett, wenn ihr mir helfen könntet. 

Danke![/code]


----------



## The_S (1. Jun 2006)

Mach deinen String zu einem Char-Array und diese zu einem String-Array, dann kannste das Wort deiner Methode übergeben.

(ok, ist nicht die feine Englische Art, aber für alles andere hab ich im Moment keine Zeit)


----------



## Jupp (1. Jun 2006)

Ja danke für die Antwort.. aber ich bin immernoch Anfänger und weiss nun auch nicht wie ich das machen soll


----------



## norman (1. Jun 2006)

ein char[] zu einem String[] zu machen, ist imho nicht so prima, nur um compareTo anwenden zu können. 
eine eigene compareTo-methode ist hier schneller geschrieben:


```
public class Testklasse {	

	   public static void main(String[] args) {
		      //String wort = args[0];
		      String wort = "sortieremich";
		      char[] buchstaben = wort.toCharArray();
		      String wortSortiert = bubbleSort(buchstaben);
		      System.out.println(wortSortiert);
	   }

	   public static int compareChars(char c1, char c2) {
		   return (c1 - c2);
	   }
		
	   public static String bubbleSort(char[] buchstaben){
		      
		      //String[] r;
		      int i;
		      char tmp;
		      boolean done;
		      
		      //r = new String[]{"Daniel", "Christian", "Mark"};
		      char[] r = buchstaben;
		      
		      
		      do{
		         done = true;
		         for(i=0; i<r.length-1 ; i++){
		            if (compareChars(r[i], r[i+1]) > 0){
		               tmp= r[i]; 
		               r[i]=r[i+1]; 
		               r[i+1]=tmp;
		               done= false ;
		            }
		         }
		      }while(!done);
		      
		      return new String(r);		     
		 }
}
```


----------



## Gast (1. Jun 2006)

Hallo zusammen,

wie kann ich diesen Code in eine Switch-Case Schleife einbauen?


----------



## norman (1. Jun 2006)

über welchen wert willst du denn switchen? über die buchstaben? mit welchem ziel?


----------



## Gast (1. Jun 2006)

Ich habe eine Menuefunktion mit mehreren Unterprogrammen. Nun soll dieser Progrmmcode einer dieser Unterprogramme sein. Jetzt der og. Programmcode eine eigene Klasse. Wie kann ich den in einen case einbauen??? Sorry bin auch Anfänger!!!


----------



## norman (1. Jun 2006)

Gast hat gesagt.:
			
		

> Ich habe eine Menuefunktion mit mehreren Unterprogrammen. Nun soll dieser Progrmmcode einer dieser Unterprogramme sein. Jetzt der og. Programmcode eine eigene Klasse. Wie kann ich den in einen case einbauen??? Sorry bin auch Anfänger!!!




```
switch (menueAuswahl) {
  //..
  case 3 :  
     String wort = "sortieremich";
     char[] buchstaben = wort.toCharArray();
     String wortSortiert = Testklasse.bubbleSort(buchstaben); 
     System.out.println(wortSortiert);
     break;
  //..
}
```
[/code]


----------



## Gast (1. Jun 2006)

Und wo kommt dann der Rest des Codes hin???
Danke schonmal

Läuft die Testklasse als Unterklasse, denn ich habe ja bereits schon eine Klasse


----------



## norman (1. Jun 2006)

es gibt keine beschränkung bezüglich der anzahl der klassen.

packe die Testklasse in das gleiche Verzeichnis, in dem auch deine andere klasse ist, dann funktioniert das wie oben beschrieben.


----------



## Jupp (1. Jun 2006)

Danke schonmal für eure Antworten... ich versuche nun das ganze in meinem Programm zu vereinen... Leider spuckt der Compiler mir immernoch eine Fehlermeldung aus... ich denke der Fehler wird ziemlich klein sein.... 

Interessant sind vor allem die Stellen hinter dem "Case 3" und unten halt die komplette Klasse unten. 


```
import java.io.*;

class Menue{
	static public void main (String[] args)throws IOException{
		
		String line = "";
		String weiter="J";
		String buchstabe ="";
		double ja;
		
		
		
		//do{
		System.out.println("Bitte geben Sie das Wort ein: ");
		BufferedReader eingabe = new BufferedReader	(new InputStreamReader (System.in));
		line = eingabe.readLine();
		
		
		if(line.length() == 0)
	System.out.println("\n \n" + "Bitte geben Sie ein Wort ein!");
	else{
		
			
			System.out.println("Treffen Sie bitte Ihre Auswahl");
			System.out.println("1 - Nach Buchstabenpostion suchen");
			System.out.println("2 - Wort in Spiegelschrift ausgeben");
			System.out.println("3 - Buchstaben sortieren");
		}
			
			 int i = Integer.parseInt(eingabe.readLine());
			switch(i) {
				
				case 1:
				
						System.out.println("Nach welchem Buchstaben wollen Sie suchen?");
						buchstabe = eingabe.readLine();
						
						int position = line.indexOf(buchstabe);
						position++;
						System.out.println("Der Buchstabe befindet sich an Position: " + position +"\n");
					
				break;
				
				case 2: System.out.println ("Spiegelschrift:\n\n");
						String umgekehrt = new String ();
						
						for (int j = line.length()-1 ;j>=0; j--){
							umgekehrt += line.charAt(j);
						}
						System.out.println("Das Wort " + line + " lautet in Spiegelschrift : " + umgekehrt + "\n");
						
						
				break;
				
				case 3:  
     					 char[] buchstaben = line.toCharArray();
     					String wortSortiert = Testklasse.bubbleSort(buchstaben);
     					System.out.println(wortSortiert); 
				
				
				
				break;
				
				case 4:	System.out.println("\n\n\nEnde!!!");
				
				break;
				
				default: System.out.println("ungueltige Auswahl getroffen");

}


			
	//}while(i!=4);
}


public static void Testklasse {   

         public static int compareChars(char c1, char c2) {
         return (c1 - c2);
      }
      
      public static String bubbleSort(char[] buchstaben){
           
           
            int i;
            char tmp;
            boolean done;
           
            
            char[] r = buchstaben;
           
           
            do{
               done = true;
               for(i=0; i<r.length-1 ; i++){
                  if (compareChars(r[i], r[i+1]) > 0){
                     tmp= r[i];
                     r[i]=r[i+1];
                     r[i+1]=tmp;
                     done= false ;
                  }
               }
            }while(!done);
           
            return new String(r);           
      }
    }



}
```


Diese Fehlermeldung bekomme ich:

C:\......\Menue.java:78: '(' expected

public static void Testklasse {   

                              ^
1 error

Compilierung beendet

--------------------------------------------------
[/quote][/code]


----------



## norman (1. Jun 2006)

du darfst nicht 2 public klassen in dieselbe datei schreiben.
besser ist, jede klasse in eine datei..

[edit]
vergiss was da steht.
du hast die Testklasse zu einer Methode machen wollen, das geht so nicht.
was du brauchst sind 2 datein mit jeweils einer der klassen.
aus deiner klasse Menue kannst einfach du Testklasse.bubblesort aufrufen..


----------



## Jupp (1. Jun 2006)

das habe ich mir schon gedacht.. nur soll das leider alles in einer datei sein....


----------



## norman (1. Jun 2006)

dann musst du eben die 2 methoden übernehmen: 
	
	
	
	





```
import java.io.*;

class Menue {
	static public void main(String[] args) throws IOException {

		String line = "";
		String weiter = "J";
		String buchstabe = "";
		double ja;

		int i;
		do {

			System.out.println("Bitte geben Sie das Wort ein: ");
			BufferedReader eingabe = new BufferedReader(new InputStreamReader(
					System.in));
			line = eingabe.readLine();

			if (line.length() == 0) {
				System.out.println("\n \n" + "Bitte geben Sie ein Wort ein!");
			} else {
				System.out.println("Treffen Sie bitte Ihre Auswahl");
				System.out.println("1 - Nach Buchstabenpostion suchen");
				System.out.println("2 - Wort in Spiegelschrift ausgeben");
				System.out.println("3 - Buchstaben sortieren");
			}

			i = Integer.parseInt(eingabe.readLine());

			switch (i) {
			case 1:
				System.out
						.println("Nach welchem Buchstaben wollen Sie suchen?");
				buchstabe = eingabe.readLine();

				int position = line.indexOf(buchstabe);
				position++;
				System.out.println("Der Buchstabe befindet sich an Position: "
						+ position + "\n");
				break;

			case 2:
				System.out.println("Spiegelschrift:\n\n");
				String umgekehrt = new String();

				for (int j = line.length() - 1; j >= 0; j--) {
					umgekehrt += line.charAt(j);
				}
				System.out.println("Das Wort " + line
						+ " lautet in Spiegelschrift : " + umgekehrt + "\n");

				break;

			case 3:
				char[] buchstaben = line.toCharArray();
				String wortSortiert = bubbleSort(buchstaben);
				System.out.println(wortSortiert);

				break;

			case 4:
				System.out.println("\n\n\nEnde!!!");
				break;

			default:
				System.out.println("ungueltige Auswahl getroffen");
			}
		} while (i != 4);
	}
	
	public static int compareChars(char c1, char c2) {
		   return (c1 - c2);
	}
	
	public static String bubbleSort(char[] buchstaben){
	      
	      //String[] r;
	      int i;
	      char tmp;
	      boolean done;
	      
	      //r = new String[]{"Daniel", "Christian", "Mark"};
	      char[] r = buchstaben;
	      
	      
	      do{
	         done = true;
	         for(i=0; i<r.length-1 ; i++){
	            if (compareChars(r[i], r[i+1]) > 0){
	               tmp= r[i]; 
	               r[i]=r[i+1]; 
	               r[i+1]=tmp;
	               done= false ;
	            }
	         }
	      }while(!done);
	      
	      return new String(r);		     
	 }
}
```

PS: die sortierung funktioniert nicht bei gemixter schreibweise (groß/klein)


----------



## Jupp (1. Jun 2006)

VIELEN DANK !!!!!

Ich habe jetzt beide Versionen am laufen! vielen Dank nochmal!


----------

