2016-10-17 2 views
1

Hallo und danke, dass Sie sich die Zeit genommen haben, sich das anzuschauen.Schleife durch eine Warteschlange mit for-Schleifen und If/Else

Ich versuche, die folgende Ausgabe zu erreichen:

Iteration 0:
Warteschlange 1 = 2345678910 | Warteschlange 2 =
Iteration 1:
Warteschlange 1 = 3579 | Warteschlange 2 = 2
Iteration 2:
Warteschlange 1 = 57 | Warteschlange 2 = 23
Iteration 3:
Warteschlange 1 = 7 | Warteschlange 2 = 235
Iteration 4:
Warteschlange 1 = | Queue 2 = 2357

Dies soll eine Implementierung von „The Sieve of Eratosthenes
Ich will nicht sein liegen diese Arbeit offenbar Schule ist! (Obwohl die Frist vorbei ist und ich nicht versuche, eine einfache Note zu bekommen. Ich möchte wirklich wissen, warum ich das nicht zur Arbeit bringen konnte)
Ich habe intensiv gesucht, aber alle ähnlichen Dinge, die ich gefunden habe, werden mit Arrays implementiert. (was der Professor nicht erlaubt)

here ist eine Geige, die zeigt, wo ich bin an:

das scheint mein Problem zu sein Es wird nicht das letzte Element entfernen.

if (this.first == this.last) { 
     this.first = null; 
     return this.first.content; 
     this.length--; 
    } 

ich vollgestopft mit allen Arten von Steueranweisungen, um die Logik Problem zu finden ...

, als ich begann ich ziemlich sicher war, was ich tun kann es folgt mag:

Schleife durch Queue 1 und aktuellen Wert (x) speichern - Schleife durch Warteschlange 1, bewegen Sie den ersten Punkt 2 to Queue ---- IF/Else aktuelles Element von x Schachzug sonst Wieder Warteschlange teilbar ist

I eingeschaltet es bis zu while-loops aber es wird

// find the primes function 
    function fp() { 

    fillQueue(); // call the fillQueue function below 

    document.getElementById("output").innerHTML += "Ctrl " + "|it. " + it + " |queue length " + q1.length + " |x " + x + " |current x" + cx + " |Q1: = " + q1.toString() + " | Q2: = " + q2.toString() + " | Q3: = " + q3.toString() + "<br />"; 

    while (q1.length >= 0) { 
    dq1(); 
    cx = x; 
    q3.enqueue(cx); 

    while (q1.length >= 0) { 
     dq1(); 
     eval(); 
     it++; 
    } 


    while (q2.length >= 0) { 
     dq2(); 
     d1.enqueue(x); 
    } 
    } 
+1

Erinnern Sie sich: '=' Zuordnung ist, '==' (oder besser gesagt, '' ===) ist zum Vergleich. Diese Zeile wird dir einige Probleme bereiten: it = n - 1. Das sollte wahrscheinlich auch '<' oder '<=' anstelle von '=' sein. –

+0

danke für die Antwort ... das reparierte das Iterationsproblem und brachte mich näher ... habe noch einige Probleme zu lösen, da die Ausgabe immer noch nicht stimmt – Qriz75

Antwort

1

ich einen anderen Ansatz zu verwenden, legen nahe, mit dem Entfernen des letzten Elements stecken und Schleife, während das erste Element der Zahlen kleiner als die Zahl ist, bis die Prüfung stattfinden soll. Machen Sie die Protokollausgabe, drücken Sie das erste Element der Zahlen auf multiples, und filtern Sie dann numbers mit einer Überprüfung für das Vielfache der Zahl bei Index Null.

Am Ende machen Sie ein anderes Protokoll ausgegeben.

function calculate() { 
 
    var number = document.getElementById('number').value, 
 
     numbers = Array.apply(null, { length: number - 1 }).map(function (_, i) { return i + 2; }), 
 
     multiples = []; 
 

 
    while (numbers[0] < number) { 
 
     document.getElementById('out').innerHTML += numbers.join(' ') + ' ||| ' + multiples.join(' ') + '\n'; 
 
     multiples.push(numbers[0]); \t \t \t \t 
 
     numbers = numbers.filter(function (a) { 
 
      return a % numbers[0]; 
 
     }); \t \t \t \t 
 
    } 
 
    document.getElementById('out').innerHTML += numbers.join(' ') + ' ||| ' + multiples.join(' ') + '\n'; 
 
}
<input id="number" /><button onclick="calculate()">calculate</button> 
 
<pre id="out"></pre>

+0

Vielen Dank ... Ich mag das ... das Professor erlaubt nicht die Verwendung von Arrays. Ich werde versuchen, dies mit Warteschlangen zu implementieren. – Qriz75

+0

etwas ist nicht richtig mit meinem De-Queue-Prozess ...Es wird nicht das letzte Element entfernt ;-( – Qriz75

Verwandte Themen