probleme mit code |
|
was ist denn normal?
natürlich kannst du fragen, aber es wird dir nicht viel bringen ... es wird dir auch nicht viel bringen nur ein buch zu lesen ...
du kannst die fragen die du stellst selbst beantworten:
nimm dir nen browser, schreib ne kleine html datei und binde JS code ein ...
code den du nicht verstehst, kannst du ausführen lassen ... wenn dir nicht klar ist wie die ausführung zustande kommt, nimm den code weiter auseinander, und lass teile ausführen...
ein beispiel:
Zitat: |
1) a[a[i]] = a[0]
hier ist ein array in einem anderem array , wie kann man das so schreiben a[a[i]] , die zwei arrays haben doch den gleichen namen ? |
|
wie wertet JS diesen ausdruck aus ?
aus der schule solltest du wissen, wie klammern wirken ... was in einer klammer steht, wird zuerst ausgewertet ...
a[a[i]] ist ein klammer ausdruck, auch wenn es sich hier bei den klammern um den indexoperator handelt ... so kannst du es zumindest betrachten(wenn du wissen willst wie es dazu kommt, schau dir an welche priorität welcher operator hat ...)
es wird zunächst a[i] ausgewertet ... das ergebnis ist das, was an stelle i im array a steht ... nennen wir diesen wert x
a[a[i]] ist demnach nichts anderes als a[x] ...
nun steht a[a[i]] auf der linken seite der zuweiseung, soll heißen in diese variable wird gespeichert ... und zwar das was in a[0] steht ...
wie kannst du sowas selbst rausfinden?
am anfang steh dort a[a[i]] ...
was wenn du dir den wert von a[i] ausgeben lässt?
was wenn du diesen ausgegebenen wert (x) benutzt um a[x] auszuwerten? ... breche den code auf kleine teile runter, die du nachvollziehen kannst, und dann setze diese teile in den code ein ... spiel damit rum ... probier dinge aus, wenn du fragen hast ...
das hält dich davon ab trivialfragen zu stellen, mit denen wir hier unsere zeit verschwenden ... ich behaupte mal mehr als 90% der fragen die du bisher gestellt hast, hättest du nicht stellen müssen wenn du das tun würdest ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
26.07.2008 17:19 |
|
|
|
ok, darauf hätte ich auch kommen müssen, aber die frage mit z.b. dem mehrdimensionalem array kann ich nicht einfach ausprobieren , denn ich verstehe sie ja nicht , wie soll ich denn damit arbeiten. um das in einem beispiel zu bringen und auseinander zu nehmen , müsste ich ja wissen wie ich dieses beispiel auch richtig schreibe, und das kann ich ja nicht bei allen , deswegen frage ich .
ich habe auch zitate aus dem buch hier gepostet, weil ich selbst das noch nicht ganz verstehe und noch nicht nachvollziehen kann was da passiert.
|
|
26.07.2008 19:02 |
|
|
|
also, ich hab zwar die vorherigen posts nur überflogen, aber die frage, was ein mehrdimensionales array ist, kann ich dir auch so beantworten:
also stell die ein array int a[5] als eine kette vor, angefangen mit a[0] bis a[5] (also eine kette mit 6 perlen. das ist ein eindimensionales array, jedes stück an der kette hat genau eine perle, die einen wert annehmen kann. bei einem zweidimensionalen array, hast du an jeder stelle zwei perlen. a[5][1] beudetet also, an der stelle 0 auf der kette hängen zwei perlen, einmal a[0][0] und a[0][1], diese können auch beide einen Wert haben. dann geht es weiter mit a[1][0] und a[1][1] und a[2][0] a[2][1] usw bis a[n][0] a[n][1]. sinn macht das, wenn du zB ein array hast, das postleitzahlen nummeriert speichern soll. du hast eine liste mit 20 plz und diese soll nummeriert abgespeichert werde. also erstellst du ein 2-dimensionales array nach dem muster int a[19][1]. du kannst dir das grafisch ungefähr so vorstellen
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
_____________________________
| | |
|______________|______________|
| | |
|______________|______________|
| | |
|______________|______________|
| | |
|______________|______________|
| | |
|______________|______________|
| | |
|______________|______________| |
|
usw...
du hast also einmal dein norm. array, welches nach unten geht, 20 elemente, und du hast an jeder arraystelle nochma ein array, welches 2 elemente in die breite geht. jetzt kannst du zB zuordnen, a[0][0]=1 a[0][1]=63579
und a[1][0] = 2 a[1][1]=78569 usw...
die arrays kannst du natürlich beliebig verlängern, a[19][20] ein array mit 20 stellen und an jeder stelle hast du nochmal 21 arrays ergibts insg. 420 elemente, die du befüllen kannst...
ich hoff das war einigermaßen verständlich
ich sollte nich so viel trinken bevor ich sowas erklär...
__________________ Alle sagten, es geht nicht, da kam einer, der wusste das nicht und tat es einfach...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Schatten: 26.07.2008 23:57.
|
|
26.07.2008 23:55 |
|
|
|
glaubs auch
int a[5] geht übrigends nur von 0 bis 4. aber der speicher danach wird bestimmt eh nicht gebraucht
|
|
27.07.2008 00:04 |
|
|
|
Um ein Array in einer anderen Reihenfolge als der alphabetischen zu sortieren, mueüssen
Sie sort( ) eine Vergleichsfunktion als Argument üuebergeben. Diese Funktion entscheidet,
welches ihrer beiden Argumente im sortierten Array zuerst erscheinen soll. Wenn das
erste Argument vor dem zweiten erscheinen soll, sollte die Vergleichsfunktion eine Zahl
zurueückgeben, die kleiner als null ist, und wenn das erste Argument im sortierten Array
hinter dem zweiten stehen soll, sollte sie eine Zahl zurueückgeben, die groessößer als null ist.
Wenn die beiden Werte äaequivalent sind (d.h., wenn ihre Reihenfolge irrelevant ist), sollte
die Vergleichsfunktion 0 zurueckgeben. Um also zum Beispiel Array-Elemente numerisch
statt alphabetisch zu sortieren, köoennten Sie folgendermaßsen vorgehen:
....
was heisst : "Wenn das erste Argument vor dem zweiten erscheinen soll, sollte die Vergleichsfunktion eine Zahl"... und was macht das für einen sinn überhaupt ??
wie ist das gemeint das "erste argument vor dem zweiten" . bei diesem beispiel
var a = [33, 4, 1111, 222];
a.sort( ); //
gibt es mehr als 2 argumente ich möchte doch nicht 2 argumente vertauschen sondern alle sortieren ?
|
|
29.07.2008 14:42 |
|
|
|
ws heisst das : edit falsch verstanden ??
|
|
29.07.2008 15:56 |
|
|
|
allgemein ist die sort funktion eine funktion zum ordnen eines objektes. Man kann z.b mit der sort funktion ein Array sortieren. Dies tut sie mit einem bestimmten muster, z.b. alphabetisch. Der sort funktion kann allerdings eine eigen definierte funktion übergeben werden, welche angibt nach welche Art und Weiße die sort funktion sortieren soll, z.b nach der Anzahl der Konsonanten eines Wortes in einem Array.
Mit zahl zurückgeben ist der Rückgabewert der Funktion gemeint. Der Rückgabewert wird mittels return gegeben.
|
|
29.07.2008 16:17 |
|
|
|
1) var a = [33, 4, 1111, 222];a.sort(); //ergebnis : 1111,222,33,4
2) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return a-b; }); // erg : 4,33,222,1111
3) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return 3-2; }); // erg : 1111,4,33,222
4) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return 3-4; }); // erg : 33,1111,222,4
a) kannst du mir kurz jede zeile verständlich erklären ?
b) was mich sehr irritiert; im zweiten beispiel steht in der funktion nur ...a,b... und ...a-b... .
woher weiss der interpreter was da rein kommt , wenn ich die funktion nicht mit irgendwelchen zahlen aufrufe , die anstelle von a und b kommen,
damit er dann auch etwas zurückgeben kann , in den letzten 2 beispielen gibt er ja zahlen zurüück, aber im zweiten beispiel ?
c) wenn ich nach anzahl der konsonaten eines wortes in einem array sortieren soll, wie muss ich dann die funktion schreiben ?
d) gibt es drei und vier-dimensionale arrays ?
e) ..."Dabei kommt beispielsweise die Zahl 13 vor der Zahl 7, weil "13" als Zeichenkette lexikalisch vor "7" kommt. ..."
was heisst weil die "13" als zeichenkette LEXIKALISCH vor "7" kommt ?
hätte man nicht viel verständlicher sagen können , dass man bei zahlen immer nur die erste zahl zum vergleich nimmt ??
z.b. "2345" < "345" // warum ? , weil 2 kleiner als 3 ist
"56" > "123" // warum ?, weil 5 grösser als 1 ist usw.
man nimmt also immer nur ,bei strings mit zahlen , die erste zahl zum vergleich ?
ist doch richtig was ichhier schreibe oder ?
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von pimpong: 29.07.2008 18:41.
|
|
29.07.2008 18:26 |
|
|
|
Zitat: |
Original von pimpong
1) var a = [33, 4, 1111, 222];a.sort(); //ergebnis : 1111,222,33,4
2) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return a-b; }); // erg : 4,33,222,1111
3) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return 3-2; }); // erg : 1111,4,33,222
4) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return 3-4; }); // erg : 33,1111,222,4
a) kannst du mir kurz jede zeile verständlich erklären ?
|
|
1. a wird mit der standard sortierfunktion sortiert (lexikalisch)
2. a wird mit der angegebenen sortierfunktion sortiert, was dazu führt, dass aufsteigend numerisch sortiert wird
3. | 4. da die sortierfunktion nicht sinnvoll ist, wird a pseudozufällig sortiert
Zitat: |
b) was mich sehr irritiert; im zweiten beispiel steht in der funktion nur ...a,b... und ...a-b... .
woher weiss der interpreter was da rein kommt , wenn ich die funktion nicht mit irgendwelchen zahlen aufrufe , die anstelle von a und b kommen,
damit er dann auch etwas zurückgeben kann , in den letzten 2 beispielen gibt er ja zahlen zurüück, aber im zweiten beispiel ?
|
|
... mal wieder: ... LERNE JS AUSDRÜCKE ... was ist 'a' - 'b' ? solange du trivial ausdrücke nicht verstehst, brauchst du dich mit sowas nicht beschäftigen ...
Zitat: |
c) wenn ich nach anzahl der konsonaten eines wortes in einem array sortieren soll, wie muss ich dann die funktion schreiben ?
|
|
deine funktion muss in diesem fall die konsonanten von a und die konsonanten von b zählen ... entsprechend der auszählung muss sie dann eine zahl kleiner 0 zurückgeben wenn a vor b im array stehen soll, eine zahl größer 0, wenn b vor a stehen soll, und 0, wenn beide gleich viele haben ...
Zitat: |
d) gibt es drei und vier-dimensionale arrays ?
|
|
wenn du spaß daran hast kannst du auch 128 dimensionale arrays haben ... oder 256-dimensionale ... oder ...
Zitat: |
e) ..."Dabei kommt beispielsweise die Zahl 13 vor der Zahl 7, weil "13" als Zeichenkette lexikalisch vor "7" kommt. ..."
was heisst weil die "13" als zeichenkette LEXIKALISCH vor "7" kommt ?
hätte man nicht viel verständlicher sagen können , dass man bei zahlen immer nur die erste zahl zum vergleich nimmt ??
z.b. "2345" < "345" // warum ? , weil 2 kleiner als 3 ist
"56" > "123" // warum ?, weil 5 grösser als 1 ist usw.
man nimmt also immer nur ,bei strings mit zahlen , die erste zahl zum vergleich ?
ist doch richtig was ichhier schreibe oder ? |
|
määäp ... der kandidat ist durchgefallen ...
ein lexikalischer vergleich hat nichts mit der zahlen- oder ziffern- wertigkeit zu tun ...
ein beispiel:
angenommen wir haben ein array mit folgenden einzelnen ASCII zeichen:
'a','5','B',':','3','+'
lexikalisch sortiert ergibt sich:
'+','3','5',':','B','a'
im besonderen gilt zwar, dass '3'<'5' aber dass liegt einzig und alein daran, dass in der ascii tabelle das zeichen '3' den wert 51 und das zeichen '5' den wert 53 hat ... und da offensichtlich 51 < 53 ist, wurde diese sortierreihenfolge gewählt ... dass das die gleiche reihenfolge wie beim numerischen vergleich ergibt, darf man getrost als netten "zufall" ansehen, wobei man diesen zufall einem designkriterium der ascii tabelle verdankt ...
du musst allerdings davon ausgehen, dass es auch codierungen geben kann, bei denen dies nicht der fall ist ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
29.07.2008 19:58 |
|
|
|
a) var a = [33, 4, 1111, 222];a.sort(function(a,b) { return a-b; }); // erg : 4,33,222,1111
was passiert bei obigem beispiel intern nacheinander ?
b)das a und b bringt mich durcheinader , welchen wert haben a und b , wird deren wert dauernd verändert oder wie , was stellen a und b dar ?
c) es wird also einzig und allein die ascii tabelle genommen , nach dem die vergleiche
ausgeführt werden ?
wie sieht es mit 13 und 7 aus ? wie erklärt man das ?
|
|
30.07.2008 15:58 |
|
|
|
a, b)
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
|
<?php <script>
d = document
function foo(a, b) {
d.write(a + " wird mit " + b + " verglichen.<br>")
if (a > b) {
d.write(a + " ist groesser als " + b + ".<br>")
d.write("return 1 beweist sort(), dass das erste Element groesser ist.<br>")
ret = 1
} else if (a < b) {
d.write(a + " ist kleiner als " + b + ".<br>")
d.write("return -1 beweist sort(), dass das erste Element kleiner ist.<br>")
ret = -1
} else {
d.write(a + " ist gleich " + b + ".<br>")
d.write("return 0 beweist sort(), dass beide Elemente gleichwertig sind.<br>")
ret = 0
}
d.write("Mit dem Wissen kann sie die zwei Elemente einschaetzen und ordnen.<br><br>")
return ret
}
list = [33, 4, 1111, 222]
list.sort(foo)
d.write("Die sortierte Liste: ")
for (i in list)
d.write(list[i] + ", ")
</script> ?> |
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
33 wird mit 4 verglichen.
33 ist groesser als 4.
return 1 beweist sort(), dass das erste Element groesser ist.
Mit dem Wissen kann sie die zwei Elemente einschätzen und ordnen.
33 wird mit 1111 verglichen.
33 ist kleiner als 1111.
return -1 beweist sort(), dass das erste Element kleiner ist.
Mit dem Wissen kann sie die zwei Elemente einschätzen und ordnen.
1111 wird mit 222 verglichen.
1111 ist groesser als 222.
return 1 beweist sort(), dass das erste Element groesser ist.
Mit dem Wissen kann sie die zwei Elemente einschätzen und ordnen.
33 wird mit 222 verglichen.
33 ist kleiner als 222.
return -1 beweist sort(), dass das erste Element kleiner ist.
Mit dem Wissen kann sie die zwei Elemente einschätzen und ordnen.
Die sortierte Liste: 4, 33, 222, 1111,
|
|
c) wie erklärt man was?!
|
|
30.07.2008 16:41 |
|
|
|
alles was du dazu wissen musst, ist das die javascript implementation einen sortieralgorithmus durchführt ... der ist für dich eine black box, soll heißen du kannst nicht reinsehen ... das ist aber auch völlig egal, ob das nun mergesort, quicksort, bublesort, oder irgend was anderes ist ... alle sortieralgorithmen haben eine gemeinsamkeit: sie vergleichen 2 objekte ... und da kommt die funktion ins spiel die du da angibst ... der sortieralgorithmus gibt deiner funktion die beiden objekte a und b ... und erwartet von deiner funktion eine aussage: kleiner null, null, oder größer null ... dementsprechend werden die beiden verglichenen objekte in der blackbox behandelt ...
deine funktion wird für jeden vergleich den der sortieralgorithmus machen will einmal aufgerufen ...
übergibst du keine funktion, dann gäbe es eigentlich ein problem: der sortieralgorithmus braucht ein vergleichskriterium ... komme was will ... ohne kann er nicht funktionieren ...
folglich gibt es eine standard vergleichsfunktion die benutzt wird, wenn du keine angabe machst ... diese funktion vergleicht lexikalisch...
um auf dein beispiel mit 13 und 7 zu kommen ...
auch wenn 2 worte nicht gleich lang sind, kann man sie lexikalisch sortieren ... nimm dir zum beispiel den duden ... der ist lexikalisch sortiert.
und wenn wir das prinzip nun nicht nur auf worte, sondern auf zeichenketten anwenden? (wir gehen einfach davon aus, dass jedes zeichen in der zeichenkette eine art buchstabe ist... niemand verbietet uns das alphabet, für diese sortieraufgabe, um ein par zeichen zu erweitern)
wir nehmen in deinem beispiel die ascii tabelle als alphabet ... sie ist sortiert, da jedes zeichen einen index hat ... und wenn wir nun die "worte" '13' und '5' betrachten, sehen wir ganz genau dass die 1 vor der 5 kommt ... somit ist lexikalisch '13' kleiner als '7'
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
30.07.2008 16:46 |
|
|
|
wie ist das mit dem bsp:
javascript : var a = ["apfel","banane","mango","kirsche"];a.sort(function(a,b) { alert(a+","+b);return a-b; });alert(a) ;
nach welchem schema tut alert das ausgeben , scheint durcheinander zu sein ?
bei diesem beispiel kann man doch nicht z.b apfel-banane rechnen, wie beim obigen z.b 1111-33 , wozu ist so eine funktion bei wörtern überhaupt gut ?
|
|
31.07.2008 15:48 |
|
|
|
php: |
1:
2:
3:
4:
5:
6:
|
<?php <script>
s1 = "apfel";
s2 = "banane";
document.write(s1 - s2);
</script> ?> |
|
NaN ist kein Wert kleiner, größer oder gleich 0. ergo: schwachsinn
|
|
31.07.2008 16:23 |
|
|
|
ok, aber die antworten noch zu meinen fragen , so kann ich das nicht verstehen .
|
|
01.08.2008 13:44 |
|
|
|
DU bist im entwicklungsfall der programmierer, und somit ist es deine aufgabe, wenn du sort benutzen willst, eine funktion anzugeben, die für deinen anwendungsfall sinn macht ...
willst du lexikalisch sortieren, dann gibst du keine funktion an, die zahlenwerte vorraussetzt ...
das beispiel soll dir dies zeigen ... wählst du die funktion flasch, kann sort nicht vernüntig arbeiten, und gibt dir kein sortiertes array zurück... du hast in diesem fall keine sinnvolle vergleichsoperation zur verfügung gestellt
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
01.08.2008 16:57 |
|
|
|
dass heisst man muss nicht immer diese funktion , mit a-b nehmen, man muss desweiteren auch keine funktion schreiben, kommt darauf an was man macht , richtig ?
wenn ich jetzt z.b. die wörter oben so sortieren will, das man nicht nach dem ersten buchstaben (alphabetisch) , sondern nach dem zweiten sortieren möchte, was schreibe ich dann in die klammern bei sort ?
zb. kirsche, mango ; ergebnis : mango, kirsche ( weil bei mango ist der zweite buchstabe ein a und bei kirsche ein i , alles klar ?
|
|
01.08.2008 18:01 |
|
|
|
Zitat: |
Original von pimpong
dass heisst man muss nicht immer diese funktion , mit a-b nehmen, man muss desweiteren auch keine funktion schreiben, kommt darauf an was man macht , richtig ?
|
|
richtig.
Zitat: |
wenn ich jetzt z.b. die wörter oben so sortieren will, das man nicht nach dem ersten buchstaben (alphabetisch) , sondern nach dem zweiten sortieren möchte, was schreibe ich dann in die klammern bei sort ?
zb. kirsche, mango ; ergebnis : mango, kirsche ( weil bei mango ist der zweite buchstabe ein a und bei kirsche ein i , alles klar ? |
|
das ist vergleichsweise einfach:
du kennst vermutlich die vergleichsoperatoren für zahlen ( < > <= >= == ) ... die gleichen operatoren können auch auf zeichenketten angewand werden.
wenn du dann noch das zeichen an einer bestimmten position im string(zeichenkette) haben willst, kannst du die methode charAt() verwenden ... wenn du mehr als nur die 2. stelle vergleichen willst, zum beispiel wenn du alphabetisch sortieren willst und nur den ersten buchstaben ignorieren willst, kannst du die funktion substr() verwenden, um einen teil des strings zu bekommen ...
entsprechend dem ergebnis des vergleichs, kann deine funktion dann z.b. -1 0 oder 1 zurück geben...
mach dir ne kleine übrung daraus so eine vergleichsfunktion mal zu implementieren ...
wenn du an ein problem stößt stell deine funktion (das was du bis dahin hast) hier rein, und beschreibe das problem
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von DarkSquirrel: 02.08.2008 03:00.
|
|
02.08.2008 02:56 |
|
|
|
code: |
1:
2:
3:
4:
|
if("abc"<"def")
{alert("abc ist lexikalisch kleiner als def");}
else
{alert("def ist lexikalisch kleiner oder gleich abc");} |
|
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
06.08.2008 19:12 |
|
|
|