Bubble-Algorithmus

Status
Nicht offen für weitere Antworten.

Miri

Mitglied
Hallo!

Mein Problem ist, dass ich mit dem Programm verschiedene Methoden realisieren soll. Z.B: ein Wort soll in Spiegelschrift ausgegeben werden. Das klappt auch soweit alles bis auf den Teil, wo die Eingabe lexikographisch sortiert werden soll.
Weiß jemand vielleicht woran das liegt?

Vielen Dank schonmal
Miri

Code:
import java.io.*;
public class Aufgabe_3c {
       
	public static void main (String[] args) {
      	
		boolean check1=false, check2=false;
		String Eingabe;
		BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
		// Eingabebuffer

		do {

			for (int i=0; i<=3; i++) { System.out.println("\n"); }
			//Gibt vier Leerzeilen aus

			System.out.println("Menue - Bitte treffen Sie ihre Auswahl:");

			System.out.println("---------------------------------------------------------------------------------");

			System.out.println("[1] Wortanalyse    - Lassen Sie Buchstaben in einem Wort zaehlen.");

			System.out.println("[2] Spiegelschrift - Eingabe eines Wortes,gespiegelte Ausgabe.");

			System.out.println("[3] Sortierung     - Sortieren Sie ein Wort nach lexikographischer Reihenfolge.");

			System.out.println("[4] Abbruch        - Verlassen des Programmes.");

			System.out.println("---------------------------------------------------------------------------------");

			do {
			
				try {Eingabe = buffy.readLine(); }
				// Menupunkt - Eingabe durch Benutzer
			
				catch(IOException e)  { return; }
				// mit Kontrollroutine auf richtige Eingabe (nur 1-4)

				if (Eingabe.equals("1") || Eingabe.equals("2") ||Eingabe.equals("3") || Eingabe.equals("4")) {  
 
					// Wenn korrekte Eingabe
					check1=true; }
					// Verlassen der routine moeglich (check1=true) (Schleife springt zu while)
			
				else {
			
					// Wenn falsche Ausgabe,dann
					System.out.println("Falsche Eingabe - Bitte Geben sie eine Zahl zwischen 1 und 4 ein!");    
					// Fehlermeldung
	
					check1=false;
					// dowhile wird wiederholt (check1=false).
				}

			} while (!check1);
			// Eingaberoutine wird verlassen wenn check1=true (richtige Eingabe)

       		switch(Integer.parseInt(Eingabe)) {
		// Die Benutzereingabe (1-4) wird in Integer umgewandelt, damit dieser Gegenstand der switch/case Anweisung wird

			   
		case 1:
		// Bei Menauswahl 1

		String Buchstabe;
		// String fuer den Buchstaben

		char BChar;
		// Char Variabel fuer den Buchstaben

		boolean flag = false;
		// Flag, ob Buchstabe vorhanen ist!

	 	for (int i=0; i<=3; i++) { System.out.println("\n"); }
		//Gibt vier Leerzeilen aus

		System.out.println("Wortanalyse");
		System.out.println("Bitte geben sie ein Wort ein:");

		try {Eingabe = buffy.readLine(); }
		// Eingabe des Wortes

		catch(IOException e)  { return; }

		boolean VergleichsArray[] = new boolean[Eingabe.length()];
		// Vergleichsarray mit Stringlange erzeugen

		for (int i=0; i<Eingabe.length(); i++) {VergleichsArray[i]=false;}         
		// alle Werte im Array auf false (preset)

		char[] WArray = Eingabe.toCharArray();
		// Eingegebenes Wort zu CharArry konvertieren

		System.out.println("Bitte geben Sie jetzt den Buchstaben ein, nachdem das Wort durchsucht werden soll: ");

		try {Buchstabe = buffy.readLine(); }
		// Eingabe des Buchstaben in String

		catch(IOException e)  { return; }

		BChar=Buchstabe.charAt(0);
		// 1. Buchstabe der Eingabe in CharVar

		for (int i=0; i<Eingabe.length(); i++) {
		// Eingabe Array durchgehen,

			if (WArray[i] == BChar) {
			// wenn Array Stelle = Buchstabe,

				flag = true;
				// --> Buchstabe kommt vor, Flag(Makierung) setzen!

				VergleichsArray[i] = true;
				// --> Position im Vergleichsarray festhalten
			}
		}
		// Ausgabe

		if (flag==true) {
		// Wenn Buchstabe vorkommt:

			for (int i=0; i<Eingabe.length(); i++) {
			// Vergleichsarray durchgehen,

				if (VergleichsArray[i]==true) {
				// wenn markierte Stelle erreicht wurde,

					System.out.println("Buchstabe gefunden an Stelle: " +(i+1)); 
					// --> Ausgabe der Position des Buchstaben im Wort (i+1), weil i bei 0 anfaengt
				}
			}
		}
		// ansonsten ist der Buchstabe nicht vorhanden (doc)

		else { System.out.println("Der Buchstabe kommt nicht im Wort vor."); }

			break;
			// Programm wird abgebrochen, da es fertig ist

	   
		case 2:
		// Bei Menauswahl 2

		for (int i=0; i<=3; i++) { System.out.println("\n"); }
		//Gibt vier Leerzeilen aus
			   
		System.out.println("Spiegelschrift");
		System.out.println("Bitte geben Sie ein Wort ein.");

		try {Eingabe = buffy.readLine(); }
		// Eingabe des Wortes

	   	catch(IOException e)  { return; }

	   	char EingabeArray[] = Eingabe.toCharArray();
		// Eingegebenes Wort --> CharArray

		System.out.println("Ausgabe des Wortes in Spiegelschrift:");

		for (int i=EingabeArray.length-1; i>=0; i--) 
		
		{System.out.print(EingabeArray[i]);}  
		// Umgekehrte Ausgabe des Arrays

		break;
		// Programm wird abgebrochen, da es fertig ist


		case 3:
		// Bei Menauswahl 3

		boolean sortflag;

		char tempchar;
		// Char Zwischenspeicher fuer Tausch

		for (int i=0; i<=3; i++) { System.out.println("\n"); }
		//Gibt vier Leerzeilen aus
			   
		System.out.println("lexikographische Sortierung");
		System.out.println("Bitte geben Sie ein Wort ein.");

		try {Eingabe = buffy.readLine(); }
		// Eingabe des Wortes

		catch(IOException e)  { return; }

		char[] charArray = Eingabe.toCharArray();
		// String in charArray umwandeln

		do {
		// Bubblesortiert

			sortflag = false;
			// standartmaessig kein Tausch am Anfang

			for (int i=0; i<charArray.length-1; i++) {

				if (charArray[i] > charArray[i+1]) {
				// aktuelle Stelle im array groesser als folgende? (ASCII)

					tempchar = charArray[i];
					// ja: Vertauschen durch Auslagerung

					charArray[i] = charArray[i + 1];

					charArray[i + 1] = tempchar;

					sortflag = true;
					// Es hat ein Tausch stattgefunden
				}
			}

		} while (sortflag==true);
		// charArray wieder in den String Eingabe umwandeln

		System.out.println("Ausgabe des sortierten Wortes: ");
		System.out.println(Eingabe);
		// Ausgabe des sortierten Ergebnisses

		break;
		// Programm wird abgebrochen, da es fertig ist
   

		case 4:
		// Bei Menueauswahl 4

		for (int i=0; i<=3; i++) { System.out.println("\n"); }
		//Gibt vier Leerzeilen aus
			   
		break;
		// Abbruch - Verlassen des swicht/case Bereiches
		}

		System.out.println("\n\nWollen Sie ins [M]enue zurueckkehren oder das Programm [B]eenden?");

		do {

			try {Eingabe = buffy.readLine(); }
			// Eingabe / Abfrage auf Programmwiederholung s.o.

			catch(IOException e)  { return; }
	
			if (Eingabe.equals("M")) { check2=false; }
			// --> M, dann Menu (dowhile Bedingung erfuellt)

			if (Eingabe.equals("B")) { check2=true;  }
			// --> B, dann Beenden (dowhile Bedingung nicht erfuellt)

	       } while(Eingabe.equals("M")==false && Eingabe.equals("B")==false);
	       // Wiederholung bis gueltige Eingabe erfolgt

	       } while(!check2);
	       // Zum Verlassen des Programm Ablaufes muss check2 = true sein

	       System.out.println("Programm beendet.");

       }
}
 

Bleiglanz

Gesperrter Benutzer
Code:
      case 2:
      // Bei Menauswahl 2
bitte sinnvoller kommentieren und die switch-zweige in funktionen auslagern :)

du gibst ja einfach die Eingabe wieder aus? und nicht das sortierte CharArray??
 

mic_checker

Top Contributor
Btw. zum Umdrehen von Strings:

reverse()

Auch deinen 1. Fall find ich etwas zu viel des guten....Les doch einfach den Text ein , dann die Buchstaben etc. und du kannst ja mit indexOf gucken ob ein Buchstabe im String enthalten....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben