Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Java] Arrayinhalt gruppieren (https://www.delphipraxis.net/123986-%5Bjava%5D-arrayinhalt-gruppieren.html)

Evian 12. Nov 2008 16:35


[Java] Arrayinhalt gruppieren
 
Hallo Zusammen,

ich soll eine Methode schreiben, die ein Array vom Typ Long[] wie folgt ausgibt:
Gruppiert in gerade und ungerade, d.h. erst alle geraden, dann alle ungeraden, reihenfolgeerhaltend.

Ich habe jetzt eine Version geschrieben, die zwar funktioniert, aber die mir echt gar nicht gefällt.
Die ist total redundant und irgendwie auch nicht besonders clever gelöst. Könnte mir jemand einen Tip geben,
wie man das viellicht noch besser lösen könnte?!

gruß, Phill

Code:
   long[] gruppiert(final long[] zahlen) throws IllegalArgumentException{
      if (zahlen == null){
         throw new IllegalArgumentException();
      }
      int pos=0;
      final long[] result = new long[zahlen.length];
      for(int e=1;e<=2;e++){
         for(int i=0;i<zahlen.length;i++){
            if (e==1) {
               if (zahlen[i]%2==0){
                  result[pos]=zahlen[i];
                  pos++;
               }
            }else{
               if (zahlen[i]%2!=0){
                  result[pos]=zahlen[i];
                  pos++;
               }
            }
         }
      }
      return result;
   }
PS: mir würde auch nen Ansatz in Pascal total reichen. ;)

jfheins 12. Nov 2008 16:47

Re: [Java] Arrayinhalt gruppieren
 
Du möchtest also nur gruppieren, aber die Elemente untereinander nicht sortieren?

Ich würd es so machen:

Code:
long[] gruppiert(final long[] zahlen) throws IllegalArgumentException{ 
      if (zahlen == null)
      { 
         throw new IllegalArgumentException();
      } 

      int pos=0;
      final long[] result = new long[zahlen.length];

         for(int i=0;i<zahlen.length;i++)
             if (zahlen[i] % 2 == 0)
                  result[pos++]=zahlen[i];
           
         for(int i=0;i<zahlen.length;i++)
             if (zahlen[i] % 2 == 1)
                  result[pos++]=zahlen[i];

      return result;
   }
Ist etwas kürzer aber verfolgt den gleichen Gedanken ;)

Nennt sich iirc Bucketsort ...

DeddyH 12. Nov 2008 16:56

Re: [Java] Arrayinhalt gruppieren
 
Ich interpretiere "reihenfolgeerhaltend" mal als sortiert ;)

Evian 12. Nov 2008 16:59

Re: [Java] Arrayinhalt gruppieren
 
@DeddyH: Nein, die ursprüngliche Reihenfolge soll erhalten bleiben, also unsortiert.

@jfheins: Na mein erster Ansatz war auch so, aber hierbei gibt es ja dann 2 Vorschleifen. Kann ich es nicht irgendwie mit nur einer Vorschleife, aber auch ohne Redundanz machen?! ;)

freak4fun 12. Nov 2008 16:59

Re: [Java] Arrayinhalt gruppieren
 
Vielleicht auch ein Array und die Anzahl von ungeraden ermitteln und dann in ein Array packen. Dann kann man ja die Pos. über 2 Zähler ermitteln wo sie hin müssen. ;)
Zitat:

Zitat von DeddyH
Ich interpretiere "reihenfolgeerhaltend" mal als sortiert ;)

Nein, würde ja die aktuelle Reihenfolge verändern. ;)

DeddyH 12. Nov 2008 17:03

Re: [Java] Arrayinhalt gruppieren
 
*Pfh*, dann eben nicht :tongue:

jfheins 12. Nov 2008 17:06

Re: [Java] Arrayinhalt gruppieren
 
Zitat:

Zitat von Evian
@DeddyH: Nein, die ursprüngliche Reihenfolge soll erhalten bleiben, also unsortiert.

@jfheins: Na mein erster Ansatz war auch so, aber hierbei gibt es ja dann 2 Vorschleifen. Kann ich es nicht irgendwie mit nur einer Vorschleife, aber auch ohne Redundanz machen?! ;)

Bei deiner Lösunf wurde die inner For-Schleife auch 2 mal ausgeführt ;)

Aber wenn es bei gerade/ungerade beleibt, kannst du es natürlich auch so machen:
Code:
long[] gruppiert(final long[] zahlen) throws IllegalArgumentException{ 
      if (zahlen == null)
      { 
         throw new IllegalArgumentException();
      } 

      int pos1 = 0;
      int pos2 = zahlen.length - 1;
      final long[] result = new long[zahlen.length];

         for(int i = 0; i < zahlen.length; i++)
         {
             if (zahlen[i] % 2 == 0)
                  result[pos1++] = zahlen[i];
             else
                  result[pos2--] = zahlen[i];
         }

      return result;
   }
Du fügst also quasi von 2 Seiten ein ;)

freak4fun 12. Nov 2008 17:08

Re: [Java] Arrayinhalt gruppieren
 
Das würde aber die Reihenfolge der ungeraden Zahlen ändern. Die wären doch vertauscht?

Evian 12. Nov 2008 17:25

Re: [Java] Arrayinhalt gruppieren
 
ja stimmt ich hab selber 2 Schleifen, ich dummi. Ach man man man... aber trotzdem vielen Dank!!!! :)

jfheins 12. Nov 2008 17:40

Re: [Java] Arrayinhalt gruppieren
 
Zitat:

Zitat von freak4fun
Das würde aber die Reihenfolge der ungeraden Zahlen ändern. Die wären doch vertauscht?

Ups, äh ja das wären sie dann :stupid:

Ok, du kannst 2 Arrays erstellen, die Zahlen ja nach gerade/ungerade in die beiden Arrays schmeißen und danach die beiden Array zusammenkopieren. Aber ob das schneller ist als meine 2. Lösung, wage ich sehr zu bezweifeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz