BubbleSort Java bei Vergleich soll ein Rückgabewert erstellt werden

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von Dark-Nightmare, 09.06.2013.

  1. #1 Dark-Nightmare, 09.06.2013
    Dark-Nightmare

    Dark-Nightmare Erfahrener Benutzer

    Dabei seit:
    21.01.2007
    Beiträge:
    1.807
    Zustimmungen:
    0
    Ort:
    Hamburg
    Moin,
    mein Aufgabe besteht darin ein Programm BubbleSort zu Schreiben. Eigentlich ganz einfach. Eigentlich.

    public interface CanBeCompared {
    public enum CompareResult {
    SMALLER, EQUAL, LARGER
    }
    public CompareResult compare(Object other);
    }

    Das hier wird mir vorgeben. Nun soll die Methode compare die Zahlen vergleichen. Nun ist mein Problem, dass je nach Fall, bei kleiner SMALLER, bei gleich EQUAL und bei größer LARGER zurückgegeben werden soll. Ich hab aber keine Ahnung was SMALLER, EQUAL und LAGER für ein Typ sein soll.

    Eclipse schlägt mir sowas vor:
    private static final CompareResult SMALLER = null;

    Eclipse scheint glücklich, bis wir auf dieses schöne null treffen. Was kann ich da den anstatt null eintragen?

    Die Methode compare soll eigentlich nur prüfen ob Wert 1 und Wert 2, größer, kleiner, gleich ist, jeweils LAGER,SMALLER oder EQUAL zurückgeben und je nach Rückgabe soll dann die andere Methode, die compare ausgeführt hat, dann handeln.

    Kann mir jemand da Helfen ?! Ich steh total auf dem Schlauch und die Vorlesung morgen fällt auch noch aus ;(
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 09.06.2013
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.881
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    SMALLER, LARGER und EQUAL sind BOOLEANs, die entweder TRUE oder FALSE sein koennen.
    Und diese BOOLEANs erhalten ihren Wert anhand des Vergleiches der zu pruefenden Variablen......
     
  4. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Vielmehr sind SMALLER, EQUAL und LARGER vom Datentyp CompareResult.
    Deine Compare-Methode verlangt einen Rückgabewert von genau diesem Datentyp.
    Das bedeutet du kannst diese Werte einfach zurückgeben.

    Das ganze mal kurz veranschaulicht.

    Code:
    if (a < b)
    return CompareResult.SMALLER;
    
    else if (a > b)
    return CompareResult.LARGER;
    
    else return CompareResult.EQUAL;
    
     
  5. #4 xandros, 09.06.2013
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.881
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Da CompareResult in diesem Zusammenhang nur eine Enumeration von vordefinierten Konstanten ist und eine Konstante ebenfalls einen Datentyp hat, kann SMALLER/EQUAL/LARGER nicht vom Datentyp CompareResult sein. Sie sind vielmehr Bestandteile der Auflistung und haben einen eigenen Datentyp wie jede Variable oder Konstante.

    Und die logische Folge davon ist, dass man diese Konstanten als Boolean betrachtet.
    Wenn Smaller Wahr ist, koennen die anderen beiden nur Falsch sein.
    Es wird dabei nicht auftreten, dass zwei oder gar alle drei Wahr sind......
     
  6. #5 Dark-Nightmare, 10.06.2013
    Dark-Nightmare

    Dark-Nightmare Erfahrener Benutzer

    Dabei seit:
    21.01.2007
    Beiträge:
    1.807
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hi Xandros,
    das mit den boolean Werten habe ich mir auch gedacht. Die Umsetzung hat aber nicht geklappt. Lotus Variante funktioniert :D
     
  7. #6 Dark-Nightmare, 20.06.2013
    Dark-Nightmare

    Dark-Nightmare Erfahrener Benutzer

    Dabei seit:
    21.01.2007
    Beiträge:
    1.807
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hi Leute,
    ich wollte das Programm gerade etwas verändern. Ich will ein Array übergeben, indem Strings enthalten sind. Sprich die "Zahlen" eins, zwei, drei... etc. diese sollen dann umgewandelt werden in ein int Array, BubbleSort soll diese sortieren und dann den Inhalt des int Arrays wieder in ein String Array umwandeln. Soweit klappt das auch. Ich erstelle zb. dieses Array :
    test = new String[] { "Sechs", "fünf", "Drei", "eins", "Acht", "sieben",
    "zwei", "vier" };

    Dann habe ich eine Methode geschrieben, an die ich das Array übergebe, dieses die Inhalte über den Index abruft und dann mit switch case jeweils die Zahl in das neue Array schreibt. Funktioniert auch umgekehrt und BubbleSort arbeitet auch richtig.

    Nun möchte ich aber an die Methode:
    public int [] sort(int CanBeCompared[]) {}, dass String Array auch übergeben können. BubbleSort soll dann die anderen Methode zum umwandeln aufrufen etc. Weiterhin soll aber auch ein reines int Array übergeben werden können.

    Nun meine Frage: Wie muss die Methode aussehen (bzw. geht das überhaupt?), dass diese nun kein int Array erwartet, sondern irgendein Array?

    Hoffe Ihr könnt mir (mal wieder ^^) helfen :)
     
  8. #7 Blaxxun, 20.06.2013
    Blaxxun

    Blaxxun aka Noisy

    Dabei seit:
    06.11.2005
    Beiträge:
    6.171
    Zustimmungen:
    0
    Was du suchst (sofern ich das richtig verstanden habe) nennt sich Überladen.
    Du erstellst dir
    public int [] sort(int CanBeCompared[]) {}
    und
    public int [] sort(String CanBeCompared[]) {}
    In dieser Funktion kannst du dein String Array dann umwandeln zu einem Int Array und dann an sort(int[]) übergeben. Zur Laufzeit wird dann die jeweils passende Funktion aufgerufen.
    Genau so funktionieren auch mehrere Konstruktoren, je nachdem ob oder was übergeben wird.
     
  9. #8 Dark-Nightmare, 20.06.2013
    Dark-Nightmare

    Dark-Nightmare Erfahrener Benutzer

    Dabei seit:
    21.01.2007
    Beiträge:
    1.807
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hi Blaxxun,
    auf die Idee bin ich auch schon gekommen :)
    Meine Idee oder "mein Ziel" ist es:
    Ich würde gerne eine Methode haben, der es egal ist, was für ein Array ich übergebe (int, double, String etc.). Das übergebene Array soll dann geprüft werden. Ist es ein int Array, läuft das Programm normal durch, ist es ein String Array soll diese erstmal umgewandelt werden und dann durchlaufen. Bei double oder sonnst etwas soll dann erscheinen, dass das Array nicht sortiert werden kann.

    Die Frage ist ob das möglich ist? Ich habe es schon mit public Object[] sort(Object CanBeCompared[]) {} versucht. Nun kann ich aber kein int oder String Array mehr an sort übergeben. Mach ich da etwas falsch, oder geht mein Vorhaben gar nicht?
     
  10. AdMan

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  11. #9 Blaxxun, 20.06.2013
    Blaxxun

    Blaxxun aka Noisy

    Dabei seit:
    06.11.2005
    Beiträge:
    6.171
    Zustimmungen:
    0
    Wie gesagt du musst die Methoden überladen.
    D.h. du erstellst dir die beiden oder die 4 Methoden und wandelst entsprechend in ein int Array um um dann die sort(int[]) aufzurufen.

    Warum möchtest du außerdem Methoden für double Ararys zur Verfügung stellen, wenn diese nicht untersützt werden. Gibt es die Methoden nicht können sie auch nicht aufgerufen werden, d.h. beim kompilieren gibt es schon einen Fehler.

    Du kannst nicht alles in einer Methode machen, falls das deine Frage ist.
    Für die WrapperKlassen sollte es zwar mittels Object funktionieren, soweit ich weiß aber nicht wenn es sich um ein int[] handelt. Es würde aber meiner Meinung nach auch keinen Sinn ergeben, mein Prof hätte dich wahrscheinlich dafür gekreuzigt ;)
     
  12. #10 Dark-Nightmare, 20.06.2013
    Dark-Nightmare

    Dark-Nightmare Erfahrener Benutzer

    Dabei seit:
    21.01.2007
    Beiträge:
    1.807
    Zustimmungen:
    0
    Ort:
    Hamburg
    Also ich habe einen Lösungsweg gefunden :D
    Ich habe nun Objekt Arrays erzeugt. Also ein Array ist vom Typ BubbleSortTest und in BubbleSortTest habe ich eine Objektvariable String zahlenWort erzeugt.

    Nun übergebe ich diese Array an:
    Code:
    public Object[] sort(Object CanBeCompared[])
    Dort habe ich nun eine if Bedingung, mit meinem gesuchten Befehl "instanceof",
    Code:
            if (CanBeCompared[0] instanceof TestBubbleString) {
                sortcopy = change(sortcopy);
            }
            if (sortcopy[0] instanceof TestInt) {}
    Je nach dem, was da nun rauskommt, sortiert er bei Int los und bei Strings werden die Worte erst in Zahlen umgewandelt, sortiert, zurück in ein String Array gewandelt und ausgegeben :)
     
Thema:

BubbleSort Java bei Vergleich soll ein Rückgabewert erstellt werden

Die Seite wird geladen...

BubbleSort Java bei Vergleich soll ein Rückgabewert erstellt werden - Ähnliche Themen

  1. Excel: 2 Spalten mit einander vergleichen und Fremdwert

    Excel: 2 Spalten mit einander vergleichen und Fremdwert: Ich würde gerne Spalte H und Spalte K mit einander vergleichen. Wenn 2 gleiche Werte gefunden werden, soll der Wert aus Spalte J (immer Links von...
  2. Tastaturtester mit Java

    Tastaturtester mit Java: Hallo Leute, ich wollte gerade mal auf die Schnelle ein Tastaturtester mit Java bauen. Grund ist ein neuer Encoder, der nächste Woche...
  3. Java 7

    Java 7: Hallo :) Ich kann mir kein Java Installieren weil er mir in den Programmen schon "Java 7 Update 9" anzeigt. Deinstallieren funktioniert auch...
  4. Gaming PC (1000€, Schon erstellt, Brauche Vorschläge)

    Gaming PC (1000€, Schon erstellt, Brauche Vorschläge): Ich hab hier mal bisschen rumgemacht und meinen eigenen PC zusammengestellt. Wenns von Preis/Leistung noch besser geht gerne. Hier
  5. Java-Programmierung - Fehler bei Ausführung

    Java-Programmierung - Fehler bei Ausführung: Ich habe kürzlich begonnen, mich mit der Programmierung in Java zu beschäftigen. Auf meinem PC habe ich Windows 8 laufen und verwende dias Java...