BubbleSort Hausaufgabe

K

KlemensyXYZ

Gast
Moin,
könnte jemand mal bitte hier drüber sehen?

Java:
import java.io.*;
class bs
{
	public static void main (String args[]) throws IOException
	{
		System.out.println();
		System.out.println("Programmstart BubbleSort");
		System.out.println();
		
		int zahlenFeld[];
		int anzahlElemente;
		int i;
		int x;
		boolean tausch;
		String inData;
		
		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println();
		System.out.println("Geben Sie eine Zahl ein");
		System.out.println();
		inData = stdin.readLine();									
		anzahlElemente = Integer.parseInt(inData);
		
		i = anzahlElemente - 1;
		
		zahlenFeld = new int [anzahlElemente];
		
		do
		{
			tausch = false;
			
			for (int j = 1 ; j < i ; j++)
			{
				if (zahlenFeld[j - 1] > zahlenFeld[j])
				{
					x = zahlenFeld[j - 1];
					zahlenFeld[j - 1] = zahlenFeld[j];
					zahlenFeld[j] = x;
					
					tausch = true;
				}
			}
			
			i = i - 1;
		}
		while (i > 0 && tausch == true);
		
		System.out.println();
		System.out.println("Programmende BubbleSort");
		System.out.println();
	}
}

soll nen BubbleSort Programm werden.
alles soll in eine Methode (was anderes hatten wir noch nicht)
Und ich weis nicht wie das Programm da Ergebnisse ausspucken soll ('System.out.println ("??????")')

vielleicht kann hier mir ja wer helfen.

Danke

(PS. Wir arbeiten mit dem Buch Java4U, falls das wem was sagt.)
 

M4D-M4X

Bekanntes Mitglied
Also wenn ich dich jetzt richtig verstanden habe, dann sollte das helfen:

Eine Möglichkeit das Endergebnis auszugeben ist, nach allen Schleifen, einfach eine neue Schleife zu machen und dann alle Indexpositionen des Arrays auszugeben. Also so:

Java:
for(int j=0; j < array.izahlenFeld; j++){
   System.out.println(izahlenFeld[j]);
}

Wenn dir das auch nichts hilft, dann hab ich noch etwas anderes:

Nachdem ich die selbe Geschichte vor sagen wir 4 Wochen machen musste, poste ich mal meinen Code dazu:


Java:
public class Bubblesort {
	
	//Zur Erschwerung des Programms folgt die Ausgabe des Arrays über ein Unterprogram!
	
	
	/*Deklarieren und initialisieren des benötigten Arrays   zu beachten sind die Präfixe! z.B. ca = char Array
	 * 
	 * Andere schreibweise zur initialisierung: (ist genauso gut)
	 * caChars[0] = 'A';
	 * caChars[1] = 'D';
	 * caChars[2] = 'C';
	 * caChars[3] = 'E';
	 * caChars[4] = 'F';
	 * caChars[5] = 'B';
	 * 
	 */
	static char[] caChars = {'A','D','C','E','F','B'};

	
	//Unstere main Methode
	public static void main(String[]args){
		
		
		//Erste Schleife um die Anzahl der insgesamten durchgänge festzulegen.  (caChars.length-1) gibt die Länge des Arrays - 2 an, also 4.
		//Insgesamt wird die Schleife 4 mal durchlaufen, da i < (caChars-2). Das < Zeichen ist hierbei von Bedeutung. Währe es <= würde die
		//Schleife 5 mal durchlaufen.
		for(int i=0;i<(caChars.length-2);i++){
			
			//Die Zweite Schleife dient dazu jedes einzelne Paar zu vergleichen und an die nächste Indexposition des caChars Array zu rutschen.
			//Zu beachten ist hier, dass an dieser Stelle der <= Operator verwendet wird. (caChars.length-2) ergibt wieder den Wert 4, da
			//aber von 0 zu zählen beginnt, wird die Schleife 5 mal durchlaufen.
			for(int j=0;j<=(caChars.length-2);j++){
				
				//Hier steht unsere if Anweisung, um zu verifizieren, wann die chars im Array getauscht werden oder nicht.
				//Zu beachten ist hierbei nur, dass nur getauscht wird, wenn 
				//caChars[j] größer ist als die darauf folgende Position caChars[j+1].
				//Wenn dieser Fall eintritt, wird eine Variable angelegt die den Wert caChars[j+1] speichert.
				//Wichtig ist hier wieder der Präfix c!
				//Anschließend wird der Wert der auf Position [j+1] steht mit dem Wert von [j] überschrieben.
				//Zum Glück haben wir den Wert vorher in eine char Variable gespeichert und können ihn problemlos mit
				//caChars[j] = ctemp; zuweisen.
				if(caChars[j]>caChars[j+1]){
					char ctemp = caChars[j+1];
					caChars[j+1] = caChars[j];
					caChars[j] = ctemp;
				}
			}
		}
		//Aufrufen des Unterprogramms output;
		output();
	}
	
	//Unterprogramm output, dass lediglich für die Ausgabe zuständig ist.
	private static void output(){
		System.out.println("Ausgabe: "+ caChars[0] + caChars[1] + caChars[2] + caChars[3] + caChars[4] + caChars[5]);
	}
	
	
	
}



Und noch als kleiner Tipp für die Leerzeilen. Man macht dafür nicht mehrere Ausgaben.

Versuche mal folgendes:

String sausgabe = '\n' + "deinString" + '\n';
 
Zuletzt bearbeitet:
K

KlemensyXYZ

Gast
Java:
for(int j=0; j < array.izahlenFeld; j++){
   System.out.println(izahlenFeld[j]);
}

;(

also wenn ich das nun compiliere sagt er dass die variabeln
array und izahlenfeld
nicht finden kann.
Das "i" habe ich mal entfernt;
fehler bei array bleibt bestehen.

Muss ich die jetzt auch noch deklarieren usw.?
wenn ja wo, wenn nein was sonst?
 

M4D-M4X

Bekanntes Mitglied
Oh verzeihung... war ein kleiner Fehler meinersteits *schäm*

So sollts gehen:

Java:
for(int j=0; j < zahlenFeld.length; j++){
   System.out.println(zahlenFeld[j]);
}


Mit dem Array war dein int Array zahlenFeld gemeint.

Ich merk schon... hast du eigentlich eine Ahnung was du da alles deklarierst und worfür du es verwendest ?
 
K

KlemensyXYZ

Gast
wenn ich da jetzt 6 eingebe spuckt der nur 6 mal 0 aus ?!

ist das normal?

"Ich merk schon... hast du eigentlich eine Ahnung was du da alles deklarierst und worfür du es verwendest ?"

-> eigentlich schon, sollte die arrays zuhause mit dem buch :rtfm: erarbeiten da mein lehrer krank is, habs´nur teilweise kapiert und versuche diese hausaufgabe zu lösen.
Irgendwie.:autsch:
 

M4D-M4X

Bekanntes Mitglied
Mhm okay wenn die ganze Sache so aussieht.

Wenn du willst und Zeit hast, kann ich mich mit dir heute Abend via ICQ, Teamspeak, Skype whatever mal für ne Stunde oder so hinsetzen und dir das Notwendigste erklären und erarbeiten.

Ist denk ich mal die einfachste Lösung.

Was sagste ?
 

M4D-M4X

Bekanntes Mitglied
Okay dann schreib ich dir ne PM mit meiner Nr. bzw. kannst se ja da links hinzufügen.

Dein Fehler war bzw. ist, dass du die "Arraygröße" in einen int schreibst, aber das Array weiß ja nicht das es die nehmen soll.

Damit du aber jetzt schonmal weiterbasteln kannst mach mal folgendes:

Erstelle erstmal den reinen sortier Algorithmus ohne Eingabe.

Sprich ein Array mit den Zahlen : 452316
Soll in die richtige Reihenfolge sortiert werden.

Es gibt zwei Arten der Arrayinitialisierung:

1. Initialisieren und dann erst deklarieren:

Java:
int [] iatest = new int[6];

iatest[0] = 4;
iatest[1] = 5;
iatest[2] = 2;
iatest[3] = 3;
iatest[4] = 1;
iatest[5] = 6;

das new int[6]; erstellt ein neues Array mit der größe 6.

Natürlich gibt es da auch noch etwas leichteres ;)

2. Initialisieren und deklarieren in einem

Java:
int [] iatest = { 4,5,2,3,1,6 };

Sollte verständlich sein oder?

Und zum auslesen des Arrays benutzt du wie ich oben schon geschrieben habe eine Schleife, oder wenn du einzelne Elemente ausgeben willst:

Java:
System.out.println(iatest[Position]);
 
Zuletzt bearbeitet:
K

KlemensyXYZ

Gast
so habs hinbekommen :D
hat den ganzen nachmittag gedauert :eek: , aber es funktioniert

hier ist es:
Java:
import java.io.*;
import java.math.*;

class BubbleSort
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    
		int temp;
		int zahlenFeld[];
		String inData;
    
		System.out.println("Geben Sie die Anzahl der Elemente ein: ");
		inData = stdin.readLine();
		zahlenFeld = new int[(Integer.parseInt(inData))];
    
		for (int i = 0; i < zahlenFeld.length; i++)
		{
			zahlenFeld[i] = (int)(Math.random() * 100 + 1);
		}
    
		System.out.println("Urspruengliches Array: ");
		
		for (int i = 0; i < zahlenFeld.length; i++)
		{
			System.out.print(zahlenFeld[i] + " ");
		}
		
		System.out.println();
    
		for (int i = 0; i < zahlenFeld.length; i++)
		{
			for (int j = 0; j < zahlenFeld.length; j++)
			{
				if ( j != 0 && zahlenFeld[j] < zahlenFeld[j - 1])
				{
					temp = zahlenFeld[j - 1];
					zahlenFeld[j - 1] = zahlenFeld[j];
					zahlenFeld[j] = temp;
				}
			}
		}
    
		System.out.println("Ausgeben: ");
		
		for (int i = 0; i < zahlenFeld.length; i++)
		{
			System.out.print(zahlenFeld[i] + " ");
		}
  }
}
Google hat natürlich gut geholfen :oops:

irgendwelche Verbesserungsvorschläge?
 

M4D-M4X

Bekanntes Mitglied
Ja der Code sollte immerhin schonmal funktionieren ;D

Meine Fragen sind jetzt:

Wozu brauchst du nach jedem mal wenn du die index fom zahlenFeld ausließt einen Leerstring?:

zahlenFeld + " "

Was macht der print in Zeile 30? (hoffentlich nicht für eine Leerzeile)


Wodurch du jetzt natürlich den Code noch schöner Gestalten könntest, wäre anstatt an jeder position zu sagen: println("Ausgabe"); o.ä.

final variablen am Anfang zu deklarieren und diese dann im print verwenden.

z.B.

Java:
final String MENUE_OUTPUT = "Bitte geben sie die Anzahl der gewünschten Indexpositionen ein:";

Ansonsten könntest du natürlich die Ausgabe in einer schönen extra Methode ausführen die sich meinetwegen ausgabe nennt, aber das ist bei solche einem kleinen Programm nicht die Welt.

Für mich (das kannst du aber selbst entscheiden) ist der String Name inData falsch gewählt.
Stell dir mal vor du willst eine Datei einlesen und überschreibst den String... das wäre nicht so toll.
Ich hab mit angewöhnt den String sInput zu nennen.

Was ich dir noch ans Herz lege sind die Präfixe.
Also z.b. für dein zahlenFeld: iazahlenFeld <- da es ein int array ist
 
G

gman

Gast
Hi,

hier noch ein kleiner Verbesserungsvorschlag. Statt:

Java:
    zahlenFeld = new int[(Integer.parseInt(inData))];

lieber:

Java:
    int anzahlZahlen = Integer.parseInt(inData);

    zahlenFeld = new int[anzahlZahlen];

Grund: Wenn man soviel in eine Zeile quetscht wird es schnell unübersichtlich.

@M4D-M4X:

Die ungarische Notation (so heisst das mit den Prefixen glaub ich) ist nicht mehr so
angesagt. Wenn man mit dem Texteditor programmiert mag das noch hilfreich sein,
aber in den heutigen IDEs braucht man das nicht mehr. Und der Code ist einfacher
zu lesen wenn man das weglässt.

Alles zusammen fällt unter das Stichtwort: Clean Code
 

M4D-M4X

Bekanntes Mitglied
Ich kann deine Meinung absolut nicht vertreten gman.

Was gibt es übersichtlicheres als Präfixe? ???:L
Vor allem in großen Projekten ist das doch super.

Wird wahrscheinlich eher Geschmackssache sein, aber ich code immer nur mit Präfixe.
 

nrg

Top Contributor
muss ich wohl gman recht geben... ungarische notation ist imho mit den heutigen IDEs nicht nur hässlich sondern auch überflüssig. wobei ersteres wohl wirklich Geschmackssache sein mag
 
G

gman

Gast
@M4D-M4X:

Es geht mehr um Lesbarkeit als um Übersichtlichkeit. Das Problem bei den Präfixen ist
das die Bezeichnung der Variable dann mehr als eine Information enthält:
1. der Präfix den mann erstmal in die eigentliche Bedeutung umsetzen muss
2. der eigentliche Name der Variablen

Mann kann den Namen der Variablen auch so wählen das durch ihn klar wird was
die Variable ist (von welchem Typen) z.B. hier:

Java:
int zahlenArray = new int[..];

Die Information über das int kann man weglassen da es auf den Typ der Zahlen
hier nicht so ankommt. Und wenn man es wirklich wissen will fragt man halt
seine IDE ;)
 
K

KlemensyXYZ

Gast
Ja der Code sollte immerhin schonmal funktionieren ;D

Meine Fragen sind jetzt:

Wozu brauchst du nach jedem mal wenn du die index fom zahlenFeld ausließt einen Leerstring?:

zahlenFeld + " " soll nen Leerzeichen sein

Was macht der print in Zeile 30? (hoffentlich nicht für eine Leerzeile) ist eine -> "darf" noch nichts anderes benutzen


Wodurch du jetzt natürlich den Code noch schöner Gestalten könntest, wäre anstatt an jeder position zu sagen: println("Ausgabe"); o.ä.

final variablen am Anfang zu deklarieren und diese dann im print verwenden.

z.B.

Java:
final String MENUE_OUTPUT = "Bitte geben sie die Anzahl der gewünschten Indexpositionen ein:";
hatten wir noch nicht; "darf" ich auch noch nicht

Ansonsten könntest du natürlich die Ausgabe in einer schönen extra Methode ausführen die sich meinetwegen ausgabe nennt, aber das ist bei solche einem kleinen Programm nicht die Welt.

Für mich (das kannst du aber selbst entscheiden) ist der String Name inData falsch gewählt.
Stell dir mal vor du willst eine Datei einlesen und überschreibst den String... das wäre nicht so toll.
Ich hab mit angewöhnt den String sInput zu nennen. das inData stammt aus unserem Lehrbuch -> soll ich so nennen

Was ich dir noch ans Herz lege sind die Präfixe.
Also z.b. für dein zahlenFeld: iazahlenFeld <- da es ein int array ist


Trotzdem erstmal DANKE für deine/eure Hilfe

@ gman -> ja stimmt, werde ich ändern
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Generischer Bubblesort Java Basics - Anfänger-Themen 19
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
H Bubblesort-Algorithms Java Basics - Anfänger-Themen 14
I Bubblesort Java Basics - Anfänger-Themen 1
L Bubblesort in Batch Script Java Basics - Anfänger-Themen 15
D Bubblesort Java Basics - Anfänger-Themen 2
G Bubblesort Array der Größe 10 Java Basics - Anfänger-Themen 1
M Bubblesort ohne Array Java Basics - Anfänger-Themen 30
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
R Erste Schritte Einsteiger-Video Bubblesort Bewertung Java Basics - Anfänger-Themen 11
D Array/Bubblesort Fehlermeldungen Java Basics - Anfänger-Themen 1
U BubbleSort Problem Java Basics - Anfänger-Themen 2
L Array und Bubblesort Java Basics - Anfänger-Themen 4
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
T BubbleSort Java Basics - Anfänger-Themen 9
O Bubblesort allgemeiner schreiben Java Basics - Anfänger-Themen 5
J Interface Bubblesort soll Arrays beliebiger Referenztypen sortieren können. Java Basics - Anfänger-Themen 5
N Mein Bubblesort sortiert mein Array nicht Java Basics - Anfänger-Themen 2
E BubbleSort Java Basics - Anfänger-Themen 2
J Erste Schritte Bubblesort Java Basics - Anfänger-Themen 6
G Array mit BubbleSort sortieren Java Basics - Anfänger-Themen 2
N Bubblesort Programm funktioniert nicht Java Basics - Anfänger-Themen 19
R BubbleSort Java Basics - Anfänger-Themen 4
R BubbleSort Java Basics - Anfänger-Themen 15
A BubbleSort Java Basics - Anfänger-Themen 7
B BubbleSort Java Basics - Anfänger-Themen 10
R BubbleSort Java Basics - Anfänger-Themen 6
C Klassen BubbleSort was passiert mit dem Index ? Java Basics - Anfänger-Themen 2
B Sortiermethode bei Bubblesort Java Basics - Anfänger-Themen 15
G Bubblesort - Falsche Sortierung Java Basics - Anfänger-Themen 6
M Laufzeitanalyse Bubblesort Java Basics - Anfänger-Themen 7
T BubbleSort Java Basics - Anfänger-Themen 2
P BubbleSort-Methode Java Basics - Anfänger-Themen 18
M BubbleSort (Sortieralgorithmus) Java Basics - Anfänger-Themen 28
B Bubblesort Java Basics - Anfänger-Themen 70
G Bubblesort ohne Schleifen Java Basics - Anfänger-Themen 10
F Bubblesort, Insertsort Java Basics - Anfänger-Themen 2
B Bubblesort-Algorithmus und Testklasse Java Basics - Anfänger-Themen 5
c_sidi90 Array mit Bubblesort sortieren Java Basics - Anfänger-Themen 8
B Java Bubblesort Java Basics - Anfänger-Themen 5
F Bubblesort---Frage von Anfänger Java Basics - Anfänger-Themen 2
E BubbleSort kleiner Fehler? Java Basics - Anfänger-Themen 14
B BubbleSort Java Basics - Anfänger-Themen 5
L Bubblesort: Exception in Thread "main" Java Basics - Anfänger-Themen 5
K Einfaches Bubblesort Java Basics - Anfänger-Themen 11
W Problem mit BubbleSort und Array Java Basics - Anfänger-Themen 10
Spin taschenrechner incl bubblesort Java Basics - Anfänger-Themen 5
G Bubblesort Java Basics - Anfänger-Themen 2
Binary.Coder Bubblesort in einfachen unmissverständlichen Sätzen Java Basics - Anfänger-Themen 2
B Bubblesort Verfahren Java Basics - Anfänger-Themen 2
C Bubblesort Java Basics - Anfänger-Themen 5
I BubbleSort-Algorithmus Java Basics - Anfänger-Themen 8
G Bubblesort Java Basics - Anfänger-Themen 23
G Bubblesort Java Basics - Anfänger-Themen 15
kulturfenster BubbleSort Java Basics - Anfänger-Themen 7
T Bekomme Fehler mit Bubblesort Java Basics - Anfänger-Themen 2
T Zahlen mit Bubblesort sortieren Java Basics - Anfänger-Themen 2
D Bubblesort und Array Java Basics - Anfänger-Themen 6
T Bubblesort Java Basics - Anfänger-Themen 5
L Bubblesort funzt nicht Java Basics - Anfänger-Themen 3
N bubblesort Java Basics - Anfänger-Themen 4
T BubbleSort optimieren ??? Java Basics - Anfänger-Themen 26
Mojtaba1986 Hausaufgabe (Schleifen) Java Basics - Anfänger-Themen 33
H Codeverbesserung, FH-Hausaufgabe | Bruchrechner Java Basics - Anfänger-Themen 5
I Programmierung-Hausaufgabe: Hilfe benötigt Java Basics - Anfänger-Themen 8
G Hausaufgabe mit LinkedList und LinkedListStack verstehen Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
B Hausaufgabe Berechnung quadratischer Funktion Java Basics - Anfänger-Themen 16
S Hausaufgabe: Java-Programm schreiben zur Berechnung von x und y Java Basics - Anfänger-Themen 9
K Ausgabe problem in einer Hausaufgabe Java Basics - Anfänger-Themen 5
J Hilfe Java Hausaufgabe kommt nicht weiter Java Basics - Anfänger-Themen 5
S hausaufgabe Java Basics - Anfänger-Themen 4
T Theoretische Hausaufgabe Java Basics - Anfänger-Themen 4
T Problem mit einer Java Hausaufgabe Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben