Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 11:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



BubbleSort in Java: ArrayProblem

Discussion on BubbleSort in Java: ArrayProblem within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
BubbleSort in Java: ArrayProblem

Hallo Leute,

ich habe die Aufgabe den BubbleSort Algorythmus nun in Java umzusetzen.
ich muss sagen das ich mich leider nicht wirklich mit Java auskenne.

Ich habe es erst selbst versucht jedoch ergaben sich beim ausführen immer Compiler Fehler.. Ich habe mir daher ersteinmal eine lösung aus dem internet gesucht und diese auf mein "Programm" angepasst.

Problem1: Ich will die Zahlen bevor sie sortiert werden nocheinmal ausgeben. Jedoch werden Zahlen wie 49, 50 etc..ausgeben obwohl ich 1,2,3,4,5,6 eingebe..

Hier mal mein code.
- Habe der Übersichtlichkeit halber nur eine "Eingabe" angegeben.

Code:
package sortieralgorythmen;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Sortieralgorythmen {

    public static void main(String[] args) {
        
        int Eingabe_Array[] = new int[6];
		
		try
		{
			int eingabe;
			BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
			eingabe = br.read();
			Eingabe_Array[0] = eingabe;
			
			// br.close();
			
		}
		catch (Exception e)
		{
			System.out.println("Lesen lief nicht");
		}
		
		             
                System.out.print("Vor dem Sortieren: " + Eingabe_Array[0] + " " + Eingabe_Array[1] + " " + Eingabe_Array[2] + " " + Eingabe_Array[3] + " " + Eingabe_Array[4] + " " + Eingabe_Array[5]);
                int h;
                for (int i = 1; i < Eingabe_Array.length; i++)
                {
                    for (int j = 0; j < Eingabe_Array.length - i; j++)
                    {
                        if (Eingabe_Array[j] > Eingabe_Array[j + 1])
                        {
                            h = Eingabe_Array[j];
                            Eingabe_Array[j] = Eingabe_Array[j + 1];
                            Eingabe_Array[j + 1] = h;
                        }
                        System.out.println(Eingabe_Array.length);
                    }
                }               

    }
}
Ich habe gedacht das ich vllt lieber die ArrayList benutzen sollte?!
Hat jemand eine Ahnung woran es liegen könnte?



MrBlack
MrBlack321 is offline  
Old 05/09/2013, 12:22   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Du liest ja auch nur einen Integer-Wert für deine erste Zahl im Array ein, der Rest bleibt ohne Zuweisung.

Scanner s = new Scanner(System.in);
int index = 0;
while (s.hasNext() && i < Eingabe_Array.length)
Eingabe_Array[index++] = s.nextInt();

Ausgabe:

sysout("Vor dem Sortieren: ");
for (int i : Eingabe_Array)
sysout(i + " ");

Zum Algorithmus selber kann ich nichts sagen, da ich den noch nie wirklich in der Vorlesung diskutiert habe, aber zumindest das solltest du evtl. implementieren.
snow is offline  
Old 05/09/2013, 16:22   #3
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
ich weiß ja nicht warum du 2 for-schleifen drin hast (vllt. klappt es ja auch)

aber normalerweise ist der bubble sort so aufgebaut:
(ich sag jetz mal 'normalerweise' in der hoffnung keinen scheiss zu erzählen )

Code:
  //int Eingabe_Array[] = {2, 3, 4, 1, 5};
  int temp;
  boolean check = false;

  for(int x=0;x!=Eingabe_Array.length;x++) {
    System.out.println("-" + Eingabe_Array[x] + "-");
  }

  do{
    check=false;
      for (int i=0;i < (Eingabe_Array.length-1); i++){
       if (Eingabe_Array[i] > Eingabe_Array[i+1]){
         temp=Eingabe_Array[i];
         Eingabe_Array[i]=Eingabe_Array[i+1];
         Eingabe_Array[i+1]=temp;

         check=true;
         }
      }
  }while(check);

  System.out.println("\n");
  
  for(int x=0;x!=Eingabe_Array.length;x++) {
    System.out.println("-" + Eingabe_Array[x] + "-");
  }
omer36 is offline  
Old 05/10/2013, 10:27   #4
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
Hallo Snow

es wird jedem platz im Array ein Wert zugewiesen!
Quote:
- Habe der Übersichtlichkeit halber nur eine "Eingabe" angegeben.

Selbst wenn es nur einer wäre, würde das leider nicht erklären wieso solche komischen Zahlen ausgegeben werden^^


Hi Omer

laut meinem Lehrer braucht man 2 schleifen daher habe ich auch zwei verwendet. (gilt nur für den Algerythmus im Struktogramm)
Bei mir ist es ja so das ich zwei Arrayplätze vergleiche (ich hab es zumindest vor ) und bei dir ist es ja so das du einen Platz + 1 nimmst.

Noch eine Frage zu deinem Code.

Code:
System.out.println("-" + Eingabe_Array[x] + "-");
Wieso werden hier die Zahlen ausgegeben?
Müsste dort nicht einfach nur die länge des Arrays mehrfach hintereinander ausgegeben werden? (also woher weiß das x die Zahlen aus dem Array?)


EDIT:
Da ich die Aufzeichnungen zu den Algorythmen immer mal wieder verlege und nur Zuhause zur Hand habe kann es sein das ich auch vom ExchangeSort oder SelectSort spreche es sollte sich aber hier um den BubbleSort handeln.
MrBlack321 is offline  
Old 05/10/2013, 12:13   #5
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
also dein algo klappt auch ohne probleme.
werden bei mir richtig angezeigt.

zu deiner frage..

liegt halt an der for-schleife.

Code:
  
for(int x=0;x!=Eingabe_Array.length;x++) {
    System.out.println("-" + Eingabe_Array[x] + "-");
}
(wie du wissen solltest)
wird die schleife so oft wiederholt, bis die arraylänge erreicht ist.
und 'x' fängt dabei bei 0 an.
also wird bei Eingabe_Array[] jedes element angesprochen.

das ist auch eines der vorteile wenn mann mit arrays arbeitet, mann sparrt sich eine menge schreibarbeit.

wie mann hier sieht.
Code:
System.out.print("Vor dem Sortieren: " + Eingabe_Array[0] + " " + Eingabe_Array[1] + " " + Eingabe_Array[2] + " " + Eingabe_Array[3] + " " + Eingabe_Array[4] + " " + Eingabe_Array[5]);
^hier hast du genau 6 elemente.
wenn der user jetzt aber nur 3 eingibt erhällst du am ende im programm eine fehlermeldung.
omer36 is offline  
Old 05/10/2013, 13:15   #6
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
Danke für deine schnellen Antworten!

Quote:
(wie du wissen solltest)
Ja das bekomm ich noch hin^^
Nur ich wusste nicht wieso die länge des Arrays nicht ausgegeben wird(6).

Quote:
das ist auch eines der vorteile wenn mann mit arrays arbeitet, mann sparrt sich eine menge schreibarbeit.
Ja das stimmt und das habe ich heute auch anders gemacht (Da ich schon wieder an einem anderen Rechner sitze musste ich neu anfangen).

Quote:
wenn der user jetzt aber nur 3 eingibt erhällst du am ende im programm eine fehlermeldung.
Das habe ich mit einem Try Catch Block behoben.

Ich habe nun auch eine Antwort darauf, wieso die besagten Zahlen meines Ersten Posts, aufgetreten sind.
Ist zwar peinlich aber ich dummerchen habe vergessen den eingelesenen String in einen Integer umzuwandeln und somit wurde z.B. aus der Zahl 1 die 50.

Du hattest außerdem recht damit, dass ich mich vertan habe und das hier nicht der BubbleSort ist sondern der ExchangeSort!!!


Ich hätte noch zwei kleine Fragen. Wenn das genehm ist?

Ich habe hier:
Code:
for (int i = 0; i < ZahlenArray.length - 1; i++)
         {
            for (j = i + 1; j < ZahlenArray.length; j++)
	    {
                if (ZahlenArray[j] < ZahlenArray[i])
		{
                    int h;
                    h = ZahlenArray[j];
                    ZahlenArray[j] = ZahlenArray[i];
                    ZahlenArray[i] = h;
                }
            }
        }
in der ersten FOR-Schleife, "ZahlenArray.length - 1" geschrieben in der danach volgenden jedoch nicht. Wenn ich in der ersten Schleife nun das - 1 weglasse, fällt das Ergebniss jedoch gleich aus. Wieso ist das so?
Wenn ich die beiden Schleifen also richtig verstehe:
Geht die erste der beiden Schleifen nur bis zum Vorletzten Wert (wegen der -1?), da dieser ja mit dem Letzten verglichen werden muss. Deswegen lasse ich nun das - 1 bei der zweiten Schleife weg damit er bis zum letzten Wert läuft?? oder hat es noch einen anderen Grund? (evtl. weil der erste Platz im Array 0 ist?)
nächste Frage:
Wenn ich in den Schleifen "j < ZahlenArray.length - 1" eingebe ist doch das - 1 ganicht mehr nötig da ich ja ehh unter der Größe bleibe? (ich sag ja nicht "<=")


MrBlack
MrBlack321 is offline  
Old 05/14/2013, 13:26   #7
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
Hat keiner eine Antwort?

Ich werde demnächst auch mal meinen Code reinstellen damit eventuell auch andere was davon haben(oder es übernehmen können )
MrBlack321 is offline  
Old 05/14/2013, 13:54   #8

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
ZahlenArray.length gibt immer die Länge aus beginnend mit der 1. Also int[] a = {0,1,2}; hat die Länge 3. Mit a[a.length-1] greifst du somit auf das vorletzte Element zu.

Somit lässt deine erste Schleife das letzte Feld weg da diese mit 0 anfängt zu zählen und du das '<' verwendest.

Wenn du wissen willst warum bei beiden Fällen das Ergebnis gleicht bleibt debugge es einfach und geh Schritt für Schritt es durch :O
Obilee is offline  
Old 05/14/2013, 14:33   #9
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
Quote:
Originally Posted by Obilee View Post
ZahlenArray.length gibt immer die Länge aus beginnend mit der 1. Also int[] a = {0,1,2}; hat die Länge 3. Mit a[a.length-1] greifst du somit auf das vorletzte Element zu.
*fixed :P

Quote:
Wenn ich in den Schleifen "j < ZahlenArray.length - 1" eingebe ist doch das - 1 ganicht mehr nötig da ich ja ehh unter der Größe bleibe? (ich sag ja nicht "<=")
die erste schleife soll ja nicht nur unter der länge des arrays bleiben, sondern noch einen weniger.
Quote:
Geht die erste der beiden Schleifen nur bis zum Vorletzten Wert (wegen der -1?), da dieser ja mit dem Letzten verglichen werden muss.
jep, darum.

wenn du die -1 löschst bleibt das ergebnis gleich, weil es für den weiteren verlauf keinen unterschied mehr macht;

wenn unser array z. B. 3 elemente beinhaltet und wir das haben
for (int i = 0; i < ZahlenArray.length; i++)
for (int j = i + 1; j < ZahlenArray.length; j++)

die erste schleife läuft bis i=2 ist. (weil die arraylänge 3 ist und die bedingung als < gesetzt wurde)
nun sind wir in der 2. schleife und dort ist unser j nun 3 (da j=i+1)
und die bedingung ist solange j<arraylänge (also 3).
da unser j nun 3 ist wird dieser vorgang übersprungen.
omer36 is offline  
Old 05/14/2013, 14:48   #10
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
Achso!!
Ich war mir immer nicht sicher ob es mit der .length nicht genau so ist wie bei dem zählen der Felder, wo ja ab Null an gezählt wird.

Danke! Das hat mir grad super weiter geholfen

So ich habe es nun endlich geschafft!

Meine Aufgabe war nicht nur der BubbleSort es kamen auch noch der ExchangeSort und der SelectionSort dazu. Jetzt nachdem ich es selber gemacht und geschafft habe, muss ich sagen das es garnicht so schwer ist. Ich kann aber sagen, das es besonders auf Grund meiner miserablen Java und allgemeinen Programmierkenntnisse doch eine neue und schöne Herausforderung für mich war.

Damit auch andere die vllt. die gleiche Aufgabe in der Schule etc. bekommen haben poste ich mal meinen Code.

BubbleSort
Code:
import java .io.BufferedReader;
import java.io.InputStreamReader;

public class BubbleSort
{
	public static void main (String[] args)
	{
		int BubbleArray[] = new int [6];
		// int BubbleArray[] = {57, 7, 21, 46, 70, 11};
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int eingabe = 0;
		for (int k = 0; k < BubbleArray.length; k++)
		{
			try
			{
				eingabe = Integer.parseInt(br.readLine());
			}
			catch (Exception ex)
			{
				System.out.println("bla");
			}
			BubbleArray[k] = eingabe;
		}
		
		System.out.println();
		System.out.print("Zahlen vor dem sortieren: ");
		for (int p = 0; p < BubbleArray.length; p++)
		{
			System.out.print(BubbleArray[p] + " ");
		}
		System.out.println(" ");
		System.out.println(" ");
		
		for (int i = 0; i < BubbleArray.length; i++)
		{
			for (int j = 0; j < BubbleArray.length - 1; j++)
			{
				if (BubbleArray[j] > BubbleArray[j + 1])
				{
					int g;
					g = BubbleArray[j + 1];
					BubbleArray[j + 1] = BubbleArray[j];
					BubbleArray[j] = g;
				}
			}
		}
				
		System.out.print("Zahlen nach dem sortieren: ");
		for (int o = 0; o < BubbleArray.length; o++)
		{
			System.out.print(BubbleArray[o] + " ");
		}
		System.out.println();
		
	}
}
ExchangeSort
Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExchangeSort
{
	public static void main (String[] args)
	{
		int eingabe = 0;
        int ZahlenArray[] = new int[6];
		// int ZahlenArray[] = {45, 23, 76, 12, 2, 99};

        for (int z = 0; z < ZahlenArray.length; z++)
		{
            try
			{
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                eingabe = Integer.parseInt(br.readLine()); // Convertierung on String zu Integer
                ZahlenArray[z] = eingabe;
            }
			catch (Exception e)
			{
                System.out.println("bin in Exception gesprungen");
            }
        }

		System.out.println();
        System.out.print("Zahlen vor dem Sortieren: ");
        for (int k = 0; k < 6; k++)
		{
            System.out.print(ZahlenArray[k] + " ");
        }
        System.out.println("\n");
		
        int j = 0;
        for (int i = 0; i < ZahlenArray.length; i++)
        {
            for (j = i + 1; j < ZahlenArray.length; j++)
			{
                if (ZahlenArray[j] < ZahlenArray[i])
				{
                    int h;
                    h = ZahlenArray[j];
                    ZahlenArray[j] = ZahlenArray[i];
                    ZahlenArray[i] = h;
                }
            }
        }
				
        System.out.print("Zahlen nach dem sortieren: ");
        for (int k = 0; k < 6; k++)
		{
            System.out.print(ZahlenArray[k] + " ");
		}
		System.out.println();
	}
}
SelectionSort
Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SelectionSort
{
	public static void main(String[] args)
	{
		int SelectionArray[] = new int[6];
		// int SelectionArray[] = {85, 12, 41, 53, 98, 4};
		int count = 0;
		int eingabe = 0;
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for (int g = 0; g < SelectionArray.length; g++)
		{
			try
			{
				eingabe = Integer.parseInt(br.readLine());
			}
			catch (Exception ex)
			{
				System.out.println("Eingabe konnte nicht konvertiert werden!");
			}
			SelectionArray[g] = eingabe;
		}
		
		System.out.println();
		System.out.print("Zahlen vor dem sortieren: ");
		for (int k = 0; k < SelectionArray.length; k++)
		{
			System.out.print(SelectionArray[k] + " ");
		}
		System.out.println();
		System.out.println();
		
		for (int j = 0; j < SelectionArray.length - 1; j++)
		{
			count = j;
			
			for (int i = j + 1; i < SelectionArray.length; i++)
			{
				if (SelectionArray[count] < SelectionArray[i])
				{
					count = i;
					int temp = SelectionArray[j];
					SelectionArray[j] = SelectionArray[count];
					SelectionArray[count] = temp;
				}
			}
		}
		
		System.out.print("Zahlen nach dem sortieren: ");
		for (int k = 0; k < SelectionArray.length; k++)
		{
			System.out.print(SelectionArray[k] + " ");
		}
		System.out.println();
	}
}


Danke nochmal an alle die hierzu etwas beigetragen haben!
MrBlack321 is offline  
Old 05/17/2013, 00:52   #11
 
elite*gold: 30
Join Date: Feb 2006
Posts: 1,724
Received Thanks: 465
Gewöhn dir von vorne herein an Kommentare zu setzen und Java-Docs zu verwenden..auch bei so klein Mist und recht simplen Programmen..von KOmmentierfaulheit wegzukommen ist die Hölle .
Schön, dass du dich durchgewühlt hast
kaiN_92 is offline  
Old 05/19/2013, 18:12   #12
 
elite*gold: 0
Join Date: Apr 2013
Posts: 21
Received Thanks: 1
ohh stimmt! danke für den hinweis hatte ich ganz vergessen
MrBlack321 is offline  
Reply


Similar Threads Similar Threads
[JAVA Error] Could not create the java virtual machine
07/21/2013 - Technical Support - 10 Replies
Schönen Abend! Leider hat es sich aus einem unerfindlichen Grund ergeben, dass sobald ich die Minecraft.exe starten will die Errormeldung kommt. Die Tips auf Minecraft.net habe ich schon ohne Erfolg befolgt. Hoffe ihr könnt mir weiterhelfen... Mein PC:
recompile Problem (Block.java, item.java)
04/13/2013 - Minecraft - 1 Replies
Guten Morgen liebe Com (: Ich versuche etwas neues in Minecraft.. für mich einzubauen.. neuer Block + das Item dazu, des eingepflanzt werden muss.. wie bei einer Karotte oder einer Kartoffel. Ich zeige euch den Inhalt meiner BlockOnion.java package net.minecraft.src;
Elementarschritt im Bubblesort
04/22/2012 - General Coding - 14 Replies
Huhu, ich sitz gerade an ner Uni-Aufgabe und weiß zum ersten mal nicht, was ich zutun hab :|. ich hab mich zur Lösung für nen BubbleSort entschieden, bei dem er dann einfach das 2. Glied ausgibt (bzw solang nach hinten rutscht bis n != n-1) Allerdings komme ich auf die Elementarschrittfrage nicht klar..
[Java] Could not create the Java virtual machine
06/22/2011 - Minecraft - 1 Replies
hallo ihr minecraftler ^^ habe seit heute das problem das wenn ich minecraft starte original als auch cracked das diese fehlermeldung kommt: Java virtual machine Launcher Could not create the Java virtual machine



All times are GMT +2. The time now is 11:11.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.