【问题标题】:Queue list output is not coming out like it should队列列表输出没有像应有的那样出现
【发布时间】:2016-06-16 20:22:39
【问题描述】:

我应该得到的输出如下所示:

输入为 10

迭代 0:L1 = 2 3 4 5 6 7 8 9 10,Q1 = ,

迭代 1:L1 = 3 5 7 9,Q1 = 2

迭代 2:L1 = 5 7,Q1 = 2 3

迭代 3:L1 = 7,Q1 = 2 3 5

迭代 4:L1 = , Q1 = 2 3 5 7

但是,我不断得到这个输出:

迭代 0:L1 = 2,3,4,5,6,7,8,9,10,Q1 =

迭代 4:L1 = Q1 =2,3,5,7,

迭代 1-3 不会输出...

function Queue() {

var items = [];
var front=0;
var rear=0;
var size=20;

this.insert = function(element){
if(rear==size)
alert("Queue is full!");
else
{
items[rear]=element;
rear++;
}
};

this.delete = function(){
var deletedElement;
if(front==rear)
alert("Queue is empty!");
else
{
deletedElement=items[front];
front++;
}

return deletedElement;
};

this.deleteByElement = function(element) {
var index = items.indexOf(element);
if (index > -1) {
   items.splice(index, 1);
rear--;
}else {
alert("element not found ");
}
}

this.deleteByFactor = function(element) {
var isdeleted=false;
for(var i=front;i<rear;i++)
{
if(items[i]%element==0)
{
this.deleteByElement(items[i]);
        isdeleted=true;
}
}
        return isdeleted;
}

this.isEmpty = function(){
return rear == 0;
};

this.size = function(){
return items.length;
};

this.clear = function(){
items = [];
};

this.print = function(){
var queue='';
for(var i=front;i<rear;i++)
{
queue = queue + items[i]+",";
}
return queue;
};
}

function createNewQueue(queue)
{
var newqueue = new Queue();
var iter=0;
var start=2;
  
//Initial iteration
document.getElementById("output1").innerHTML = "Iteration "+ iter + ": L1 = " + queue.print() + " Q1 =" + newqueue.print();

while(!queue.isEmpty())
{
if(queue.deleteByFactor(start))
{
iter++;
newqueue.insert(start);

document.getElementById("output2").innerHTML = "Iteration " + iter + ": L1 = " + queue.print() + " Q1 =" + newqueue.print();
  
}
start++;
  
}   
  
}
var element = prompt("Enter Queue Element", "");
var queue = new Queue();
for(var i=2;i<=element;i++)
queue.insert(i);
//calling create new queue method
createNewQueue(queue);
<p>Queue Program</p>

<p id="output1"></p>
<p id="output2"></p>

【问题讨论】:

  • 看起来你不是每次都增加iter,而是覆盖#output2的内容

标签: javascript queue


【解决方案1】:

你已经很接近了,看起来只有几件事。

首先,检查您的计数器变量。您想在循环的每次迭代中更新iter,而不仅仅是在if 语句中。

其次,您对 div #output2 的输出每次迭代都会覆盖现有输出。您想附加新文本。

这样的事情会起作用:

更新代码

function createNewQueue(queue) {
  var newqueue = new Queue();
  var iter=0;
  var start=2;

  //Initial iteration
  var output = document.getElementById("output1");  //use a variable to store the output element
output.innerHTML = "<p>Iteration "+ iter + ": L1 = " + queue.print() + " Q1 =" + newqueue.print() + "</p>";

  while(!queue.isEmpty()) {
    iter++; //make sure to increment the counter with each loop

    if(queue.deleteByFactor(start)) {           
      newqueue.insert(start);

      //append the new output to the existing output  
      output.innerHTML = output.innerHTML + "<p>Iteration " + iter + ": L1 = " + queue.print() + " Q1 =" + newqueue.print() + "</p>";
    }
    start++;
  } //while    
} //createNewQueue()

输出

迭代 0:L1 = 2,3,4,5,6,7,8,9,10,Q1 =
迭代 1:L1 = 3,5,7,9,Q1 =2,
迭代 2:L1 = 5,7,Q1 =2,3,
迭代 4:L1 = 7,Q1 =2,3,5,
迭代 6:L1 = Q1 =2,3,5,7,

你可以在这个 JS Fiddle 中看到它的工作原理:https://jsfiddle.net/igor_9000/abnbpp01/

希望有帮助!

【讨论】:

  • 非常感谢,但我能问你为什么你的迭代 #s 去 0,1,2,4,6...。它们应该是 0,1,2,3,4
  • 很高兴它对你有用。在您的代码中,在迭代 3 和 5 期间永远不会输入 if 语句 if(queue.deleteByFactor(start)),因为您的 deleteByFactor() 函数在这些迭代期间返回 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2012-06-22
相关资源
最近更新 更多