Ich schreibe ein Programm Primzahlen in JavaScript zu generieren. Das Problem ist, dass das Verhalten des Programms sehr seltsam ist, es scheint, dass die Funktionen nicht in der Reihenfolge ausgeführt werden, die es daran hindert, ordnungsgemäß ausgeführt zu werden. Hier ist mein Code:Funktionen unerwartetes Verhalten in JavaScript geben
<!DOCTYPE html>
<html>
<head>
\t <title>Generate Some Primes!</title>
</head>
<body>
\t <h1>Let's Generate Some Primes!!!</h1>
\t <form id="userInput">
\t \t <ul>
\t \t \t <li>
\t \t \t \t <label>Lower Bound (inclusive):</label>
\t \t \t \t <input type="number" id="lower">
\t \t \t </li>
\t \t \t <li>
\t \t \t \t <label>Upper Bound (exclusive):</label>
\t \t \t \t <input type="number" id="upper">
\t \t \t </li>
\t \t \t <li>
\t \t \t \t <input type="submit" value="Generate!">
\t \t \t </li>
\t \t </ul>
\t </form>
\t <p id="messageBox"></p>
\t <ul id="primes"></ul>
\t <script>
\t var primesList = document.getElementById("primes");
\t var lower;
\t var upper;
\t var NOT_STARTED = "Generating ...";
\t var DONE = "Done!";
\t window.onload = function() {
\t \t userInput.onsubmit = function(e) {
\t \t \t e.preventDefault();
\t \t \t writeMessage(NOT_STARTED);
\t \t \t if (checkInput()) {
\t \t \t \t checkNumbers();
\t \t \t \t writeMessage(DONE);
\t \t \t }
\t \t }
\t }
\t function checkInput() {
\t \t initializeBounds();
\t \t if (lower >= upper) {
\t \t \t writeMessage("Lower bound must be less than upper bound.");
\t \t \t return false;
\t \t }
\t \t return true;
\t }
\t function initializeBounds() {
\t \t lower = Math.round(document.getElementById("lower").value);
\t \t upper = Math.round(document.getElementById("upper").value);
\t \t primesList.innerHTML = "";
\t }
\t function checkNumbers() {
\t \t for (var i = lower; i < upper; i++) {
\t \t \t if (isPrime(i))
\t \t \t \t writePrime(i);
\t \t }
\t }
\t function writePrime(p) {
\t \t primesList.innerHTML += "<li>" + p + "</li>";
\t }
\t function writeMessage(message) {
\t \t var messageBox = document.getElementById("messageBox");
\t \t messageBox.innerHTML = message;
\t }
\t function isPrime(p) {
\t \t if (p < 2)
\t \t \t return false;
\t \t for (var b = p - 1; b > 1; b--)
\t \t \t if (GCD(p, b) > 1)
\t \t \t \t return false;
\t \t return true;
\t }
\t function GCD(a, b) {
\t \t if (b == 0)
\t \t \t return a;
\t \t else
\t \t \t return GCD(b, a % b);
\t }
\t </script>
</body>
</html>
Das sind meine Probleme:
Wenn die untere Grenze liegt in der Nähe der oberen Grenze, und sie sind beide relativ große Zahl, keine Ausgabe erzeugt (zum Beispiel versuchen, 900 als die untere Grenze und 1000 als die obere Grenze der Eingabe), obwohl ich weiß, sicher Primzahlen existieren, und dass m y Methode zum Generieren funktioniert.die Primzahlen sollte auf dem Bildschirm angezeigt werden, da sie, und nicht am Ende erzeugt werden, wenn sie alle geschaffen. Wenn Sie den Eingang 0 als untere Grenze und 10000 als die obere Grenze man deutlich das Problem sehen (Ich schlage vor, das Snippet Vollbild ausgeführt wird und gerade die Scrollbar Größe).
Dies bezieht sich auf Nummer 2. Die Nachricht
Generating ...
wird nie angezeigt, nurDone
.
EDIT: Ich habe einige Änderungen an dem Code, der das erste Problem gelöst.
Sie bitte Ihre Frage bearbeiten, "screwy Javascript Verhalten" ist keine Frage. – Soviut
@Soviut ist das besser? – theEpsilon
Woah, was ist los mit den Downvotes? Ich ging in einer Stunde von +2 auf -1. Bitte erklären Sie sich selbst. – theEpsilon