Anfänger-Fehler
Tom-M
- javascript
0 Michael Seifert0 ThomasP0 AndreasW
Hallo Leute.
Folgender Source:
<html>
<title>TEST JAVA SCRIPT</title>
<head>
<script language="javascript">
var i;
var j;
var flag;
function primzahl (anfang,ende)
{
document.write("<h3>Es werden die Primzahlen zwischen " + anfang + "und " + ende + " berechnet</h3>");
for(i=anfang;i<=ende;i++)
{
flag=1;
for(j=2;j<=i;j++)
{
if(i%j==0)
flag=0;
}
if (flag==1)
document.write(i + " ist Primzahl");
}
}
</script>
</head>
<body onLoad="primzahl(1,100)">
<h2>TEST-Page for Java Script</h2>
</body>
</html>
Beim Test der Page schreibt der Browser die Überschrift korrekt hin, hängt sich aber dann auf (lädt ewig ohne zu Ergebnis zu kommen). Da ich erst seit heut mit javascript angefangen habe, denke ich dass es sich um einen Anfänger-Fehler handelt.
Gruß
tom
Hi Tom
Ich denke es ist die Unterschleife, in der du die Teibarkeit überprüfst. Und zwar ist deine Startzahl 2, aber deine Endzahl 1.
Ich denke daher, daß sich das mit dem i++ nicht verträgt.
Außerdem wurde 1 per Definition von den Primzahlen ausgeschlossen.
Ich hoffe das war der Fehler, ansonsten müssen wir halt noch ein bißchen weitersuchen. Die Hoffnung stirbt zuletzt.
Cu Michael
Hi Tom!
Ich poste mal das zum Testen veraenderte Script, mit dem ich den (die) Fehler eliminiert habe:
<html>
<title>TEST JAVA SCRIPT</title>
<head>
<script language="javascript">
var i;
var j;
var flag;
function primzahl (anfang,ende)
{
document.write("<h3>Es werden die Primzahlen zwischen " + anfang + " und " + ende + " berechnet</h3>");
for(i=anfang;i<=ende;i++)
{
document.write("i=>"+i+"<br>");
flag=1;
for(j=2;j<i;j++) //beachte hier, dass j<i und nicht j<=i, da sonst ausser 1 keine Primzahl erkannt wird
{
document.write(" j=>"+j+"<br>");
if((i%j)==0)
flag=0;
}
if (flag==1)
document.write(i + " ist Primzahl<br>");
}
}
</script>
</head>
<body>
<h2>TEST-Page for Java Script</h2>
<pre>
<script language=javascript>
primzahl(1,100);
</script>
</pre>
</body>
</html>
Schau Dir die Ausgabe an, dann weisst Du, was ich meine.
Gruß
Thomas (der P)
Hallo Leute.
Folgender Source:
[...]
{
flag=1;
for(j=2;j<=i;j++)
wenn Du j bis i laufen läßt, wird das Flag immer auf 0 gesetzt.
Beim letzten Durchlauf ist i == j und i % i = 0.
{
if(i%j==0)
flag=0;
}
if (flag==1)
document.write(i + " ist Primzahl");
sollte besser sein:
document.write(i + " ist Primzahl<br>");
sonst werden alle Meldungen in einer Zeile ausgegeben
}
}
</script>
»» </head>
»» <body onLoad="primzahl(1,100)">
»» <h2>TEST-Page for Java Script</h2>
»» </body>
ersetzen durch:
<body>
<script language="JavaScript">
<!--
primzahl(1,100);
// -->
</script>
Soweit ich mich erinnere, ersetzt ein document.write im Body-onload den existenten Body-Inhalt.
Dadurch wird der h2-Tag nicht mehr ausgegeben
</html>
Beim Test der Page schreibt der Browser die Überschrift korrekt hin, hängt sich aber dann auf (lädt ewig ohne zu Ergebnis zu kommen). Da ich erst seit heut mit javascript angefangen habe, denke ich dass es sich um einen Anfänger-Fehler handelt.
Gruß
tom