WinFuture-Forum.de: Java - Probleme Beim Sortieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java - Probleme Beim Sortieren


#1 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 01. Februar 2008 - 10:21

Moin,

ihr seid meine letzte hoffnung hier. ihc hab bis heut nacht um 3 an nem sortieralgorythmus gesessen und kriegs net gebacken.

kurz zur erklärung. das ist eine arraylist vom typ integer. darin sind artikelnummer gespeichert. mit den artikelnnummern bekommt man die artikel. die sollen alphabetisch sortiert werden.

ArrayList<Integer> allAuctionArticles = applicationLogicAccess.ApplicationLogicAccess.getA
llAuctionArticles();
			ArrayList<Integer> allSaleArticles = applicationLogicAccess.ApplicationLogicAccess.getA
llDirectSales();
			ArrayList<Integer> giveToHTML = new ArrayList();
			applicationLogicAccess.ApplicationLogicAccess
.getAllDirectSales();

			int size1 = allAuctionArticles.size();

			//AuktionsArtikel sortieren
			for (int j = 0; j < size1; j ++)
			{
			for (int i = 0; i < size1 -2; i ++)
			{
				System.out.println(allAuctionArticles);
				try {
					String a = applicationLogicAccess.ApplicationLogicAccess.getA
rticleToString(allAuctionArticles.get(i));
					String b = applicationLogicAccess.ApplicationLogicAccess.getA
rticleToString(allAuctionArticles.get(i+1));
					String a1 = a.substring( 7, 8 );
					String b1 = b.substring( 7, 8 );

					int lexicalSize1 = b1.compareToIgnoreCase("A");
					int lexicalSize2 = a1.compareToIgnoreCase("A");
					System.out.println(lexicalSize1);
					System.out.println(lexicalSize2);

					if (lexicalSize1 > lexicalSize2 || lexicalSize1 == lexicalSize2)
					{
						int aa = allAuctionArticles.get(i);
						giveToHTML.add(aa);
						int bb = allAuctionArticles.get(i+1);
						giveToHTML.add(bb);
						i++;
					}
					if (lexicalSize1 < lexicalSize2)
					{
						giveToHTML.add(allAuctionArticles.get(i));
						giveToHTML.add(allAuctionArticles.get(i+1));
						i++;
					}

				}
				catch (ArticleNotFoundException e)
				{
					quarry();
				}
			}
			allAuctionArticles.clear();
			System.out.println("vor dem Clear"+allAuctionArticles);
			System.out.println(giveToHTML);
			allAuctionArticles = (ArrayList<Integer>) giveToHTML.clone();
			giveToHTML.clear();
			System.out.println(allAuctionArticles);
			}


aber der sortiert einfach überhaupt nicht :( kann mir da jemand helfen? (sry, würd den gern nch erklären, muss jetzt aber erstmal meinen zug erwischen. ist aber vom prinzip her nen bubblesort (oder soll einer sein. der holt sich von jedem artikel den ersten buchstaben des artikels und gleicht die ab (der lexikalisce vergleich stimmt auch) aber fügt irgendwie käse in die finale tabelle ein. und den fehler find ich nicht.).

danke im vorraus,
lod14
0

Anzeige



#2 Mitglied ist offline   SoniX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 696
  • Beigetreten: 19. August 04
  • Reputation: 0
  • Wohnort:Buxtehude

geschrieben 01. Februar 2008 - 10:27

Also sortieren von Collections mache ich immer auf dem folgenden Wege.

Vielleicht hilft dir das ja. Brauchst halt vorher die Liste mit allen Auktionen, wenn ich
das bei Dir jetzt richtig gesehen habe.


		Collections.sort(list, new Comparator() {
			public int compare(Object o1, Object o2) {
				String name1 = ((Artikel) o1).getName();
				String name2 = ((Artikel) o2).getName();
				return name1.compareTo(name2);
			}
		});

Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild


System:
E6750 @2x 3.0Ghz, GA-P35 DS3, 3GB MDT , GF8800 GTS 640MB
0

#3 Mitglied ist offline   G.I.Joe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 978
  • Beigetreten: 19. September 04
  • Reputation: 0

geschrieben 01. Februar 2008 - 10:29

Könntest du mal ein Beispiel von der System.out-Ausgabe posten?
Ansonsten kann man unter Java auch schöner und effektiver sortieren. Schau die mal Collections.sort und Comperator an.
Eingefügtes Bild Eingefügtes Bild
0

#4 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 01. Februar 2008 - 13:02

gna, ich hab den denkfehler im zug gefunden^^ ich hab immer objekt i und i+1 verglichen und hab dann i auf i+2 gesetzt. und beim nächsten durchlauf das gleiche... da *könnten* ja nur 2 objekte vertauscht werdne, die hintereinander stehen. ein durchmischen der liste war garnicht nötig.

habs jetzt was anders gelöst. mir ist aufgefallen, dass ich auch explizit indizes in ner arraylist ansprechen kann und dann kann ich darüber immer einfach werte vertauschen und schön brav eins hochzählen und net 2^^

trotzdem danke...

ich glaube ich sollte einfach nicht mehr total übermüdet vor den rechner :angry:
0

#5 Mitglied ist offline   SoniX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 696
  • Beigetreten: 19. August 04
  • Reputation: 0
  • Wohnort:Buxtehude

geschrieben 01. Februar 2008 - 13:04

Wäre es aber nicht schneller und auch einfacher den Comparator zu verwenden?
Dann hast du solche Probleme erst gar nicht :angry:

Aber wenn es so schon mal läuft ist doch auch gut...
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild


System:
E6750 @2x 3.0Ghz, GA-P35 DS3, 3GB MDT , GF8800 GTS 640MB
0

#6 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 04. Februar 2008 - 11:38

hrmpf. also diese suchen treiber mihc noch in den wahnsinn. irgendwie klappt da garnischt.

vielleicht kann mir nochmal wer helfen:
ArrayList<Integer> allAuctionArticles = applicationLogicAccess.ApplicationLogicAccess.sear
chUser(userName).getLastSearch();

				int size1 = allAuctionArticles.size();

				//AuktionsArtikel sortieren
				for (int j = 0; j < size1; j ++)
				{
					for (int i = 0; i < size1 -1; i ++)
					{
						float a = 0;
						float b = 0;
						try
						{
							a = applicationLogicAccess.ApplicationLogicAccess.sear
chArticle(i).getMillisToDeadline();
							System.out.println(a);
							b = applicationLogicAccess.ApplicationLogicAccess.sear
chArticle(i+1).getMillisToDeadline();
							System.out.println(b);
							//Halt der klassiker: Blubbelsort.
							if (a > b)
								{
									int aa = allAuctionArticles.get(i);
									int bb = allAuctionArticles.get(i+1);
									allAuctionArticles.set(i, bb);
									allAuctionArticles.set(i+1,aa);
								}
						}//Ende Try

						catch (ArticleNotFoundException e)
							{
								quarry();
							}
					}
				}


also irgendwie ist das alles nachher nicht sortiert. kein plan warum. ne wertetabelle sieht hinterher so aus:

5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364737E10
5.9364737E10
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.29924096E8
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9364606E10
5.9451113E10
5.9451113E10
5.9451113E10
5.9451113E10
5.9451113E10
5.9451113E10
5.953749E10
5.953749E10
5.953749E10
5.953749E10
5.953749E10
5.953749E10
5.9623866E10
5.9623866E10
5.9623866E10
5.9623866E10
5.9623866E10
5.9623866E10
5.9710243E10
5.9710243E10
5.9710243E10
5.9710243E10
5.9710243E10
5.9710243E10
5.9796619E10
5.9796619E10
5.9796619E10
5.9796619E10
5.9796619E10
5.9796619E10
5.9883127E10
5.9883127E10
5.9883127E10
5.9883127E10
5.9883127E10
5.9883127E10
5.9969503E10
5.9969503E10
5.9969503E10
5.9969503E10
5.9969503E10
5.9969503E10
6.005588E10
6.005588E10
6.005588E10
6.005588E10
6.005588E10
6.005588E10
6.0142256E10
6.0142256E10
6.0142256E10
6.0142256E10
6.0142256E10
6.0142256E10
2.86927094E10
2.86927094E10
2.86927094E10
2.86927094E10
2.86927094E10
2.86927094E10
2.87790858E10
2.87790858E10
2.87790858E10
2.87790858E10
2.87790858E10
2.87790858E10
2.88654623E10
2.88654623E10
2.88654623E10
2.88654623E10
2.88654623E10
2.88654623E10
2.91606364E10

ansonsten zu den comparatoren: das geht doch nur, wenn die objekte in der arraylist das implementiert haben, oder? (sry, ich HASSE dieses interface und hab mich immer drum gedrückt). das ist was problematisch, weil ich hier mit 2 listen hantiere. in der ersten sind als integer nur die artikelnummern gespeichert. mit diesen int werten kann ich dann aus einer anderen liste die zugehörigen objekte holen und mir dann von denen den titel oder halt hier die restzeit holen. und dann muss ich dementsprechend die erste arraylist mit den integerwerten umsortieren, weil die dann von wem anders weiterverarbeitet wird.

wenn das mit comparatoren realisierbar ist, wäre vielleicht doch ganz nice, dannmuss ich den der das artikelmanagement geschrieben hat mal anhaun, ob der das interface einbaut.

Dieser Beitrag wurde von LoD14 bearbeitet: 04. Februar 2008 - 11:50

0

#7 Mitglied ist offline   SoniX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 696
  • Beigetreten: 19. August 04
  • Reputation: 0
  • Wohnort:Buxtehude

geschrieben 04. Februar 2008 - 11:59

Teste mal die Comperatoren, meines Wissens mußt Du kein Interface implementieren.
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild
Eingefügtes Bild


System:
E6750 @2x 3.0Ghz, GA-P35 DS3, 3GB MDT , GF8800 GTS 640MB
0

#8 Mitglied ist offline   m4rkus 

  • Gruppe: aktive Mitglieder
  • Beiträge: 316
  • Beigetreten: 28. Juni 06
  • Reputation: 0

geschrieben 04. Februar 2008 - 12:36

Also so wie ich das verstanden habe, wär doch das beste aus den zwei arraylists ne Treemap zu machen.
da kannst du zu nem schlüssel (bei dir artikelnummer) nen wert hinterlegen (artikel).
außerdem is ne treemap von haus aus sortiert.
2*3=4
0

#9 Mitglied ist offline   LoD14 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.931
  • Beigetreten: 04. Mai 03
  • Reputation: 45
  • Wohnort:Hennef bei Köln

geschrieben 05. Februar 2008 - 23:04

hm, also wir haben jetzt die comparatoren implementiert und bei den titeln geht das auch wunderbar. nur irgendwie bin ich zu dämlich restzeit und und preis zu sortieren.

kann ich normale mathematische vergleiche auf long und float anwenden? (eigentlich ja ja^^) ist float 1 < als float 2? bzw long? ich bin eigentlich sicher dass ja, aber die wollen eifnach nicht wirklich. grad die longs zicken rum oO
0

#10 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 06. Februar 2008 - 03:04

bin leider grad zu müd vom j2ee lernen, deswegen nur ein paar generelle dinge,die mir beim drüber schauen aufgefallen sind:

int aa = allAuctionArticles.get(i);
int bb = allAuctionArticles.get(i+1);

ich würde die variablendeklaration außerhalb machen, damit nicht bei jedem schleifendurchlauf die dinger neu deklariert werden.
zudem gibt es auch eine sortedlist,sodass du da ja einfach werte reinschmeißen könntest. die ist dann auch garantiert sortiert
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0