gpt4 book ai didi

java - 显示和插入方法错误(双端队列)

转载 作者:行者123 更新时间:2023-11-30 05:12:34 24 4
gpt4 key购买 nike

1)我的问题

当我从右侧或左侧删除时,程序将被删除 true但是当我调用diplay方法时内容错误

像这样我插入 12 43 65 23当从左侧删除程序时,将删除 12但是当调用显示方法时显示如下 12 43 65

当从正确的程序中删除时将删除 23但是当调用显示方法时显示如下 12 43

为什么???? );

当我尝试在删除后插入时写这个

由于队列已满,无法正确插入。先删除右边,然后你可以插入右边

问题出在哪里?

请帮助我

2)我的代码

头等舱

class dqueue
{
private int fullsize; //number of all cells
private int item_num; // number of busy cells only
private int front,rear;
public int j;
private double [] dqarr;
//==========================================
public dqueue(int s) //constructor
{
fullsize = s;
front = 0;
rear = -1;
item_num = 0;
dqarr = new double[fullsize];
}
//==========================================
public void insert(double data)
{
if (rear == fullsize-1)
rear = -1;
rear++;
dqarr[rear] = data;
item_num++;

}
public double removeLeft() // take item from front of queue
{
double temp = dqarr[front++]; // get value and incr front
if(front == fullsize)
front = 0;
item_num --; // one less item
return temp;
}
public double removeRight() // take item from rear of queue
{
double temp = dqarr[rear--]; // get value and decr rear
if(rear == -1) //
rear = item_num -1;
item_num --; // one less item
return temp;
}
//=========================================

public void display () //display items
{
for (int j=0;j<item_num;j++) // for every element
System.out.print(dqarr[j] +" " ); // display it
System.out.println("");
}

//=========================================
public int size() //number of items in queue
{
return item_num;
}
//==========================================
public boolean isEmpty() // true if queue is empty
{
return (item_num ==0);
}


}

第二类

import java.util.Scanner;
class dqueuetest
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println(" ***** Welcome here***** ");
System.out.println(" ***** Mind Of Programming Group***** ");
System.out.println(" _____________________________________________ ");
System.out.println("enter size of your dqueue");
int size = input.nextInt();
dqueue mydq = new dqueue(size);
System.out.println("");
System.out.println("enter your itemes");
//=====================================
for(int i = 0;i<=size-1;i++)
{
System.out.printf("item %d:",i+1);
double item = input.nextDouble();
mydq.insert(item);
System.out.println("");
}

//=====================================
int queue =size ;
int c = 0 ;
while (c != 6)
{
System.out.println("");
System.out.println("************************************************");
System.out.println(" MAIN MENUE");
System.out.println("1- INSERT RIGHT ");
System.out.println("2- REMOVE LEFT");
System.out.println("3- REMOVE RIGHT");
System.out.println("4- DISPLAY");
System.out.println("5- SIZE");
System.out.println("6- EXIT");
System.out.println("************************************************");
System.out.println("choose your operation by number(1-6)");
c = input.nextInt();
switch (c)
{
case 1:
if (queue == size)
System.out.print("Can not insert right because the queue is full . first remove right and then u can insert right ");
else { System.out.print("enter your item: ");
double item = input.nextDouble();
mydq.insert(item);}
break;

case 2:
System.out.println("REMOVE FROM REAR :");
if( !mydq.isEmpty() )
{
double item = mydq.removeLeft();

System.out.print(item + "\t");
} // end while
System.out.println("");
mydq.display();

break;

case 3:
System.out.println("REMOVE FROM FRONT :");
if( !mydq.isEmpty() )
{
double item = mydq.removeRight();

System.out.print(item + "\t");
} // end while
System.out.println("");
mydq.display();
break;

case 4:
System.out.println("The items in Queue are :");
mydq.display();
break;

case 5:
System.out.println("The Size of the Queue is :"+mydq.size());
break;

case 6:
System.out.println("Good Bye");

break;

default:
System.out.println("wrong chiose enter again");
} //end switch
} //end while
} // end main

}//end class

最佳答案

我怀疑最让您困惑的是您的 display 方法...:

public void display ()                //display items
{
for (int j=0;j<item_num;j++) // for every element
System.out.print(dqarr[j] +" " ); // display it
System.out.println("");
}

在这种方法中,您完全忽略了您编码的队列的“内部逻辑结构”,这主要取决于 frontrear 索引:确实,请注意,您在这里甚至没有提及任何一个索引 - 您只是打印“物理上第一个”item_num 元素,这些元素与“逻辑上存在”没有任何关系的。

您需要从第 front 个元素(不是0 个元素!)开始并显示 item_num 元素从那里开始(当然,如果您遇到它,则在末尾有环绕)。这将显示队列的逻辑内容,而不是实现它的数组的“随机”切片!-)

关于java - 显示和插入方法错误(双端队列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com