使用数组的JAVA队列实现
我正在尝试用JAVA实现队列。我是初学者。我不明白这为什么不起作用。“推”功能正常,但“弹出”功能不起作用。有人能指出我哪里出了问题吗 流行音乐:使用数组的JAVA队列实现,java,arrays,queue,Java,Arrays,Queue,我正在尝试用JAVA实现队列。我是初学者。我不明白这为什么不起作用。“推”功能正常,但“弹出”功能不起作用。有人能指出我哪里出了问题吗 流行音乐: public void pop() { for(int i=0;i<length;i++) { while(i<(length-1)) { arr[i]=arr[i+1]; } } } pop运行后,输出不会显示任何数据。
public void pop()
{
for(int i=0;i<length;i++)
{
while(i<(length-1))
{
arr[i]=arr[i+1];
}
}
}
pop运行后,输出不会显示任何数据。您不会在pop中增加i,因此while循环将无休止地运行
在push中,您使用的是一个for循环,它增加i::forint i=0;i当您按下需要从方法返回的元素时:
public void push(int x) {
for (int i = 0; i < length; i++) {
if (arr[i] == null) {
arr[i] = x;
return; // Exit from push when you added the element in the right position
}
}
}
请注意,此代码未经过优化。推送一个元素需要打开,因此可能会为大队列浪费大量时间,但这是最接近您的代码的解决方案。无论如何,一个简单的优化可以通过引入一个保存最后使用的索引的变量来完成。因此,您可以使用该变量在O1中推送和弹出一个元素。请发布完整的代码,例如变量i、arr等的定义。检查问题,您尚未发布完整的代码。只是对术语进行澄清。队列通常是队列和出列,堆栈使用推送和弹出。请解释。您预期会发生什么,为什么会发生这种情况,以及发生了什么错误/异常/其他结果?更新了整个代码-这是我关于堆栈溢出的第一篇文章-很抱歉混淆了部分代码。我的逻辑:a[0]将变成[1],a[1]将变成[2],在a[10]变成[11]超出边界之前,循环停止长度-1。这不是正确的吗?@Chandradhar你的逻辑是正确的,但是你的实现是错误的。如果你在。。。如果。。。您将获得所需的逻辑,而这是另一个循环关键字,即循环将一直运行,直到满足条件为止,这是永远不会发生的。逻辑的唯一问题是,在示例中,如果在[10]=a[11]之前停止,a[10]将永远不会改变,即循环后需要a[10]=null,这可能更有效,但这是一个开始。我的推送代码工作正常,使用break语句代替return。pop的代码不起作用。但我想知道退货声明是否比break好?或者两者都可以在这种情况下使用?
public void show()
{
int c=0;
for(int i=0;i<length;i++)
//if(arr[i]!=null)
{
System.out.println(arr[i]);
c++;
}
System.out.println("Current Capacity "+c+"/"+length);
}
public static void main(String...i)
{
System.out.println("Stack Implementation");
Queue stack = new Queue();
System.out.println("Push");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.show();
System.out.println("Pop");
stack.pop();
stack.show();
}
public void push(int x) {
for (int i = 0; i < length; i++) {
if (arr[i] == null) {
arr[i] = x;
return; // Exit from push when you added the element in the right position
}
}
}