URL: https://www.overclockers.at/coding-stuff/schlimmer_code_111265/page_1 - zur Vollversion wechseln!
falls jemandem fad ist:
ich hatte das Problem dass ich 2 Arrays hab befüllt mit int's die eine ID für einen gewissen Objekttyp sind.
Ich wollte aus den 2en ein neues Array machen das keine doppelten ID's enthält aber eben alle die vorkommen.
Der Code unten funktioniert, aber ich frage mich ob das nicht einfacher geht (siemlich sicher?).
Außerdem hab ich das Problem dass teilweise '0'en als ID im fertigen Array auftauchen, das ist zwar fürs Prog. egal, aber ich wüsste gern woran das genau liegt...
(Java)
btw: geht euch das auch so dass ihr teilweise euren eigenen Code nicht versteht
?
Code: PHPObject[] nummer1 = liste1.getSelectedValues(); Object[] nummer2 = liste2.getSelectedValues(); int[] tmp1 = new int[nummer1.length]; int[] tmp2 = new int[nummer2.length]; int[] tmp3 = new int[nummer2.length+nummer1.length]; for(int i=0; i<nummer1.length; i++ ){ Worker t = (Worker)nummer1[i]; tmp1[i] = t.getId(); } for(int i=0; i<nummer2.length; i++ ){ Worker t = (Worker)nummer2[i]; tmp2[i]= t.getId(); } //ab hier ists interessant int tmp_int = 0; int main_counter = 0; int sek_counter = 0; while(main_counter< nummer2.length ){ boolean found = false; for(int i=0; i<tmp1.length; i++){ tmp_int = tmp1[i]; if(tmp2[main_counter] == tmp1[i]){ tmp1[i]=-1; found = true; break; } } if(found){ tmp3[sek_counter]=tmp_int; sek_counter++; } else{ tmp3[sek_counter]=tmp2[main_counter]; sek_counter++; } main_counter++; } for(int j=0; j<tmp1.length; j++){ if(tmp1[j]!=-1 && tmp1[j]!=0){ tmp3[sek_counter]=tmp1[j]; sek_counter++; } } //ab hier bubblesort int b=0; int tmp; for(int i=tmp3.length-1; i>0; i--) { for(int j=0; j<i; j++) { if( tmp3[j]>tmp3[j+1]) { tmp=tmp3[j]; tmp3[j]=tmp3[j+1]; tmp3[j+1]=tmp; } } } //in tmp3 ist das ergebis
ich verabscheue java und kann dir leider nicht helfen.
allerdings würdest du dir ein paar zeilen sparen wennst die variablen sauber am anfang deklarieren würdest, wird dadurch auch lesbarer.
und würdest du gscheit dokumentieren kennst du dich später vielleicht auch aus. ich hab keine probleme ältere programme zu lesen.
wenn wir schon dabei sind.....etwas längere variablen namen wären auch nett, nicht nur i,j,a,c,x.....
Ja, ich weiß...
Ich hab das mehr aus dem Bauch heraus geschrieben und mich nachher gewundert dass es funktioniert 
es geht aber im prinzip nur darum aus 2 arrays eines zu machen in dem alle Elemente von beiden enthalten sind, aber nur einmal.
Das System ist in etwa so dass ich ein array (tmp2) hernehm und schau ob es das element im anderen auch gibt, wenn ja kopier ichs in dritte und 'lösche' es(=-1) aus dem anderen (tmp1). zum schluss kopier ich alle nicht gelöschten ausm tmp1 ins fertige.
Das ist nicht sehr schön finde ich, denn es könnte ja auch sein dass auch negative Zahlen vorkommen dürfen.
Da gibt es sicher schon so einen 'lehrbuch' algorithmus... wahrscheinlich so ähnlich wie eine Sortierung.
EDIT
habs ein wenig nachgebessert (namen)
in perl gibts dazu list::compare 
toString, zusammenhängen, zwei gegengleiche forschleifen zum aussortieren der doppelten und wieder arrayisieren
allerdings hab ich kaum ahnung von java 
@CitizenX
aber was machst wenn du mehrstellige Zahlen hast?(ok, is wohl wurscht) Das toString auszusortieren wär eventuell mehr arbeit, aber ich habs noch nie versucht.
http://java.sun.com/j2se/1.3/docs/a....html#compareTo(java.lang.String)
hätt ich dacht
hmm...
aber 1.sollt es auch für andere Sachen gehn (wär zumindest toll)
und 2. liefert ein .toString von einem Array doch etwas in der art: [1, 3, -6]
und ich glaub man hat da mehr arbeit damit zu arbeiten als anders?
ein schönerer ansatz, könnte so aussehen, daß du beide listen vorher sortierst (aber bitte nicht mit bubble), und du tust dir beim zusammenfügen(zusammenmischen) der listen wesentlich einfacher, und kannst auch einfach doppelte entfernen.
oder du hängst zuerste beide zusammen, sortierst, und entfernst dann doppelte.
bedie male kann das entfernen der doppelten im letzten schritt (mit und ohne zusammenmischen) wesentlich effizienter erfolgen (mit linearem aufwand), als das druchsuchen des gesamten arrays, für jedes einzelne element (=quadratischer aufwand).
falls du nicht selbst einen quick- oder mergesort programmieren möchtest, schau dir java.util.Arrays.sort(...) an.
Falls es sich eh nur um ganze Zahlen begrenzter (relativ kleiner) Größe handelt, ist die beste Sortiermethode immernoch ein bucketsort.
Der ist viel leichter verständlich als ein Quicksort und nochdazu flotter in dem Fall (lineare Komplexität vs logarithmische beim Quick vs quadratische beim Bubble)
Frißt zwar viel Speicher aber Speicher ist ja in unserer Zeit meist massig vorhanden 
wie gesagt: wenn man java.util.Arrays.sort() verwendet, muß man sich nichtmal mehr darum kümmern... wer es allerdings selber machen möchte: im tutorial-thread finden sich passende links zu erklärungen.
ok, thx.
Edit:
da steht auch was dazu...
http://forums.devshed.com/archive/t-26392
was mir nur noch einfällt:
statt dem:
tmp3[sek_counter]=tmp_int;
sek_counter++;
schreibst glei (wenns wie in C is :P):
tmp3[sek_counter++]=tmp_int;
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026